Today, I would not recommend anybody to go into graphics programming:
I started in 2001, when NVidias first Geforce 1 ("the Gigatexl shadercard") was first announced:
The field developed since then with so much speed and innovations, it blows my mind of. Compared to what we could do 25years ago, the tech today is just fu*ing impressive.
Though, with this impressiveness comes a big "but": The space is developing at a speed which is really really scary. Nvidia came up with AI-based effects to influence scene & assets on their own - back then, we wouldnt have even thought about that this will be possible some day in realtime.
I do not know if its possible at all to be a "decent pro" in this field now - let me use other words: "Where is todays Jon Carmack?" - he was famous for squeezing everything out of the hardware, using ideas very hidden in the community etc. - today, there is not any competitive moat for people like him (he actually lives on his legacy), and that is because the field is so vast and evolving so fast that there is no chance to become the next one
Graphics programming has this one very, very useful aspect, exponentially more valuable today: the matrix algebra pipelines, and then the requirement to 'think in matrix transforms' is a wonderful and visually engaging way to get your foundation for machine learning math.
JC was a bit of an anomaly but also his image is mostly coming from players and journalists. Developers struggled to use the later id software engines (partly why UE won that war).
You don’t need to be JC to earn a decent living as a graphics/game programmer.
Feels like we try to turn anything we do into a career or job, especially with the odd ML angle. How about you "do graphics programming" instead of "being a graphics programmer"? Like start doing simple stuff until it clicks and you see it for being logistics to the GPU, then you can layer on top all the crazy concepts. Its like a small mountain you climb and suddenly everything clicks and you think like "oh my"... the possibilities and things to experiment with...
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.
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 painting it, but people still paint. I'm tired, boss... I yearn for a past when we didn't have to end every conversation with a disclaimer about Al taking over.
Somewhat surprising there is no mention of basic design principles, or understanding the quirks of human perception. My brother was a production artist for some well-known computer games in the '90s-'00s, and continually complained about programmers and managers with zero visual sense, or curiosity about understanding the artists' side.
Graphics aren't my specialty, but as a musician, sound designer and producer, by far the most effective/influential audio DSP coders I'm aware of understand the basics of music, the physics/acoustics of sounds, and the gotchas at the interface between discrete digital processes and how we perceive and interpret stimuli.
I was a technical artist for a series of feature films during the early '00s. At a good studio they'll have art and design classes for the tech origin staff and scripting and bash classes for the art origin staff. I was both, and that was a ton of fun.
Exactly, Technical Artist is a distinct position that normally bridges the gap between pure programmers and artists and their needs. All TAs I've ever worked with had this incredible skill of knowing exactly what tech thing they need to achieve the outcome that the artists want.
This applies outside of creative industries too. I've seen my fair share of B2B/enterprise software where its clear the vendor has no clue how the industry they are selling to works, or how the users of that software think.
AI changed the calculus a bit (or at least, it has the potential to) but I think that was a huge part of the whole "learn to code" movement in the mid 2000s, to start treating software development as a "feature, not a product" of existing experts in their field so that the people most familiar with their domain are actually the ones making the software instead of having to translate the requirements down to a dev team.
Think more code monkeys for enterprise software consultancies, like Accenture, Tata, IBM Global Services, etc.
They needed warm bodies for their projects, as the usual source of manpower was grinding leetcode to work on bigtech at salaries that would make an accenture business type vomit in disgust.
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.
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.
Today, I would not recommend anybody to go into graphics programming:
I started in 2001, when NVidias first Geforce 1 ("the Gigatexl shadercard") was first announced: The field developed since then with so much speed and innovations, it blows my mind of. Compared to what we could do 25years ago, the tech today is just fu*ing impressive.
Though, with this impressiveness comes a big "but": The space is developing at a speed which is really really scary. Nvidia came up with AI-based effects to influence scene & assets on their own - back then, we wouldnt have even thought about that this will be possible some day in realtime.
I do not know if its possible at all to be a "decent pro" in this field now - let me use other words: "Where is todays Jon Carmack?" - he was famous for squeezing everything out of the hardware, using ideas very hidden in the community etc. - today, there is not any competitive moat for people like him (he actually lives on his legacy), and that is because the field is so vast and evolving so fast that there is no chance to become the next one
Graphics programming has this one very, very useful aspect, exponentially more valuable today: the matrix algebra pipelines, and then the requirement to 'think in matrix transforms' is a wonderful and visually engaging way to get your foundation for machine learning math.
This is like saying being a cashier prepares you for a job in high-finance because both involve arithmetic on dollars and cents.
I've been in ML for ~5 years in multiple FAANGs and I have never seen a rotation matrix.
Is the linear algebra of machine learning more complicated than that of graphics?
TBF, I bet any graphics programmer would be a boon for a ML shop for their GPU/performance optimization knowledge alone.
JC was a bit of an anomaly but also his image is mostly coming from players and journalists. Developers struggled to use the later id software engines (partly why UE won that war).
You don’t need to be JC to earn a decent living as a graphics/game programmer.
Huh? Just because you're not going to become the next graphics programming legend you think it's not worth getting into graphics programming at all?
Feels like we try to turn anything we do into a career or job, especially with the odd ML angle. How about you "do graphics programming" instead of "being a graphics programmer"? Like start doing simple stuff until it clicks and you see it for being logistics to the GPU, then you can layer on top all the crazy concepts. Its like a small mountain you climb and suddenly everything clicks and you think like "oh my"... the possibilities and things to experiment with...
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!
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 painting it, but people still paint. I'm tired, boss... I yearn for a past when we didn't have to end every conversation with a disclaimer about Al taking over.
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...
And this person: https://www.khanacademy.org/profile/kaid_9428127706426004539...
unfortunately, khan academy has been deleting old accounts: https://kap-archive.bhavjit.com/view?p=6177161966469120
Somewhat surprising there is no mention of basic design principles, or understanding the quirks of human perception. My brother was a production artist for some well-known computer games in the '90s-'00s, and continually complained about programmers and managers with zero visual sense, or curiosity about understanding the artists' side.
Graphics aren't my specialty, but as a musician, sound designer and producer, by far the most effective/influential audio DSP coders I'm aware of understand the basics of music, the physics/acoustics of sounds, and the gotchas at the interface between discrete digital processes and how we perceive and interpret stimuli.
There’s a separate role that is more along the lines of what you’re saying, called a Technical Artist (that’s what I do)
I think graphics programmers benefit from having an artistic mindset, but they usually work so low level that it isn’t necessary to be successful.
I was a technical artist for a series of feature films during the early '00s. At a good studio they'll have art and design classes for the tech origin staff and scripting and bash classes for the art origin staff. I was both, and that was a ton of fun.
Is this a viable field for employment?or did it collapse like alot of other digital art?
Exactly, Technical Artist is a distinct position that normally bridges the gap between pure programmers and artists and their needs. All TAs I've ever worked with had this incredible skill of knowing exactly what tech thing they need to achieve the outcome that the artists want.
This applies outside of creative industries too. I've seen my fair share of B2B/enterprise software where its clear the vendor has no clue how the industry they are selling to works, or how the users of that software think.
AI changed the calculus a bit (or at least, it has the potential to) but I think that was a huge part of the whole "learn to code" movement in the mid 2000s, to start treating software development as a "feature, not a product" of existing experts in their field so that the people most familiar with their domain are actually the ones making the software instead of having to translate the requirements down to a dev team.
the learn to code movement was a psyop by big tech to get more javascript monkeys for cheap
I doubt most JavaScript monkeys would have got through their leet code style interview process ! :)
Think more code monkeys for enterprise software consultancies, like Accenture, Tata, IBM Global Services, etc.
They needed warm bodies for their projects, as the usual source of manpower was grinding leetcode to work on bigtech at salaries that would make an accenture business type vomit in disgust.
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.
Immutability. Semantics.
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.