10 ms·
What to learn to be a graphics programmer
- SoleilAbsolu 3mo agoSomewhat 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.
- shikshake 3mo agoThere’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.
- gambiting 3mo agoExactly, 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.
- tayo42 3mo agoIs this a viable field for employment?or did it collapse like alot of other digital art?
- harulf 3mo agoGood Technical Artists are one of the most sought after professions in game dev. But it's also an annoyingly broad role that means different specific things at different places. The one common trait is being able to bridge the gap between art and code in a way that makes both parties happy.
- bsenftner 3mo agoI 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.
- shikshake 3mo agoSounds like great growth opportunities. This is my first job and I work in a small studio, I really wish I had mentorship and training like that.
- doodlesarefun 3mo agoAny suggestion for paths into tech art? I'm very strong in traditional media, I know my way around photoshop & blender very well[0] and I've self-studied programming to a level where I can read lower-level (c/c++) code and know what it's doing. I even got a PR merged into blender once! But I have no industry connection and my public portfolio is mostly charcoal and oil. The company that flew my drone animations is small & didn't get good video of them (there's a cellphone video or two from the audience, but that's not very good for a showreel). I've been thinking of just getting some good footage of a field & using blender to render & composite the designs, but doing that well will be time consuming and I feel like I might be better off doing something else. Any advice on breaking in? [0] I made a small blender workflow & add-on before AI to coordinate droneshow animations that I was selling to a small company, used renderdoc to insert gl.readcolors into the renderloop in a very ugly so I could get the benefit of the shader engine, which no commercial drone-animation software could do at the time. Almost worked for a bigger drone company but the contract was untenable.
- shikshake 3mo agoIf you're asking for video games/creative studios, unfortunately my best advice is have good connections and a strong public portfolio. Both of these are solvable problems. Your skills aren't immediately applicable to a tech artist role. You need to learn about the graphics pipeline (high-level) and how 3D models and particle effects are rendered behind the scenes, plus knowing specific tricks for rendering different common visual effects. You can learn all of this from free online resources.
- doodlesarefun 3mo agoThank you!
- thewebguyd 3mo agoThis 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.
- mghackerlady 3mo agothe learn to code movement was a psyop by big tech to get more javascript monkeys for cheap
- pipes 3mo agoI doubt most JavaScript monkeys would have got through their leet code style interview process ! :)
- elzbardico 3mo agoThink 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.
- milesvp 3mo agoI see this all the time with audio too. The amount of bits you need to reserve a
- Atrix256 3mo ago(author of the article) 100% agree. As others have said, a good graphics programmer works with tech artists and artists. Frankly, graphics programming is largely a role of service to enable those people to do what they want to do, or help create what they envision. People mentioned Inigo Quilez as an example of a graphics programmer who is also an artist. He is a power house and a unicorn. I personally like playing music / programming audio more, which is a good ground for learning DSP things - useful when for instance, you want to push your rendering noise into the high frequencies, so a low pass filter is more effective at denoising.
- at_compile_time 3mo ago>Inigo Quilez I came across this guy's channel the other day and it was an immediate subscribe.
- sudo_cowsay 3mo agoI 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/browse https://www.khanacademy.org/computing/computer-programming/b... This guy has some good art: https://www.khanacademy.org/profile/kaid_101904269317089495055459/projects https://www.khanacademy.org/profile/kaid_1019042693170894950...
- sudo_cowsay 3mo agoAnd this person: https://www.khanacademy.org/profile/kaid_9428127706426004539463954/projects https://www.khanacademy.org/profile/kaid_9428127706426004539...
- sudo_cowsay 3mo agounfortunately, khan academy has been deleting old accounts: https://kap-archive.bhavjit.com/view?p=6177161966469120 https://kap-archive.bhavjit.com/view?p=6177161966469120
- psram1986 3mo agotrigonometry->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.
- conartist6 3mo agoImmutability. Semantics.
- playorizaya 3mo ago1. 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 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!
- SirHackalot 3mo agoWhy 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.
- playorizaya 3mo agoYeah depends what/why you wanna do. As a kid I wanted to make games when I got older, I always saw learning to program as a means to that end. It wasn’t until I was deep into my career that I started developing all these preferences and ego and suddenly caring about the craft of the craft - specializing in work I never imagined spending so much time and energy on, career aspects I never meant to work into my personal identity. Part of me feels a huge sense of relief with LLMs and image gen - because finally I don’t have to be the maniac anymore! The machine can be the machine again, I don’t have to sit at an IDE for 13 hours grinding out tedium. Now I can make games, now I can do art. In that sense it’s a lot like the early arts and literature movements - a renaissance - where the printing press, canvas, international finance, and the enabling of the rapid production of ideas paid off tremendously in the following decades and centuries. We’ll get great films, games, stories, and research because of this stuff. And then great innovation - stuff we could not do without it at unimaginable scales.
- jplusequalt 3mo ago>We’ll get great films, games, stories, and research because of this stuff. If you were the kind of person who could create great art, then you would have found a way to make that art happen before LLMs were made. Sorry if that comes off as harsh, but it's true. Too many people are convinced that an AI is suddenly going to skyrocket them from the ground floor to the ceiling of a craft. It won't. Accept that there are no shortcuts to mastery. Accept that ideas are cheap, and execution is what matters. Accept that a large portion of people find it repugnant to engage with generative art.
- KellyCriterion 3mo agoToday, 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
- bsenftner 3mo agoGraphics 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.
- mathisfun123 3mo agoThis 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.
- pascahousut 3mo agoIs the linear algebra of machine learning more complicated than that of graphics?
- molybd3num 3mo ago
- jplusequalt 3mo agoI'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.
- sph 3mo agoThank 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.
- mawadev 3mo agoFeels 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...
- xboxnolifes 3mo agoI don't think the wording implies a career or job. It's more implying an identity. "I'm a rock climber", "I'm a gamer", "I'm an artist", "I'm a mother", "I'm a father", "I'm a gym bro", "I'm a graphics programmer". None of these necessarily imply career or job, though they do tend to imply more than just a passing, casual involvement.
- Agentlien 3mo agoI agree with this. I've identified as a graphics programmer for a long time because it's a passion of mine and the fact that it's my profession seems almost like a happy accident.
- ivansavz 3mo agoIf anyone needs a quick tutorial on linear algebra, you can check out this printabale four pager that I wrote: https://minireference.com/static/tutorials/linear_algebra_in_4_pages.pdf https://minireference.com/static/tutorials/linear_algebra_in... I also have some notebooks with SymPy code examples here: https://github.com/minireference/noBSLAnotebooks https://github.com/minireference/noBSLAnotebooks
- SilentM68 3mo agoGood Books :)
- Rendello 3mo agoThat is extraordinarily beautiful aesthetically! It's always a shame when beautiful mathematics is presented with bad typography and ugly spacing.
- Cpoll 3mo agoIf anyone needs a longer tutorial, I strongly recommend 3b1b's series here: https://youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab https://youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFit... The visualizations made things click in a way my Linear 101 course didn't.
- dmarcos 3mo agoI created and still maintain A-Frame (aframe.io). It’s been a gentle gateway to learn 3D graphics for a decade. Cool community if I can say so ha ha. Web is a great way to share stuff as you learn, collect feedback and get visibility. Many cases in the community of people that ended up doing 3d graphics professionally.
- utopiah 3mo agoCan definitely recommend it! Start with just <a-box> and <a-sky>, add some animations, then add some community components if it's not enough. Still not enough then modify via ThreeJS, all the way to shaders. A-Frame is amazing so thanks for creating and maintaining it! PS: Oh, and you can even do AR and VR with it.
- dapper_w0lf 3mo agoWow, I wrote my master's thesis using A-Frame! Honestly, I'd love to give you my deepest gratitude for what you did with A-frame. I wasn't a programmer at the time and had very little experience but A-Frame helped me realise my idea in a really intuitive way. I occasionally look back at the repo and cringe from how bad my code was back then but if it wasn't for that project I doubt I would be where I am today. Thank you.
- dmarcos 3mo agoThanks so much! Really happy to hear. It makes all sweat, blood and tears of open source maintenance worth it.
- 725686 3mo agoClaude Code
- nicebyte 3mo agoMy 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).
- deleted 3mo ago[deleted]
- purple-leafy 3mo agoI’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
- ivanjermakov 3mo agoI 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-management/ https://chrisbrejon.com/cg-cinematography/chapter-1-color-ma...
- qingcharles 3mo agoColor 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: https://www.youtube.com/watch?v=6hAVA6_Sczs https://www.youtube.com/watch?v=6hAVA6_Sczs
- yunnpp 3mo ago> 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.
- ivanjermakov 3mo agoI think the problem is that terminology for graphics programming was reinvented without asking color scientists. Unfortunately common in our industry where solutions are created without proper research of existing alternatives.
- teddyh 3mo agoI again feel compelled to link to the quite excellent Color FAQ: <https://poynton.ca/pdf/ColourFAQ.pdf https://poynton.ca/pdf/ColourFAQ.pdf>
- ivanjermakov 3mo agoUpdate: and this one, with more on display transforms https://chrisbrejon.com/articles/ocio-display-transforms-and-misconceptions/ https://chrisbrejon.com/articles/ocio-display-transforms-and...
- Animats 3mo agoDo you want to make games, or do 3D engine programming? If you want to make games, use an existing engine. Unreal Engine, Unity, Godot, and Bevy are good choices. You'll learn the higher level issues of graphics, not how to push pixels around. The real problem is making it fun. If you want to do 3D engine programming, be aware that there are too many bad game engines. In Rust land, where I am, there are three failed renderers, one unfinished one, and the one inside the Bevy engine. Those are the major projects. There are many other "I'm going to build a game engine" projects. Building a game engine takes about two years to get to the My First Renderer point. Getting to big, highly detailed, dynamic scenes is a much bigger job. Be aware of the scale difference between the first demo and a useful engine. If you want a job, be aware that the game industry sucks. Pay is lousy, hours are lousy, jobs end when the project is completed, and, like Hollywood, there's an army of wannabees wanting in. Also, right now, because of the collapse of the Metaverse thing, there's a glut of experienced people. Then there's mobile. Everything is a cram job. Not enough screen, not enough compute, not enough GPU, not enough battery. This is why most indy games now are 2D. That's do-able. Often in HTML/JavaScript.
- qingcharles 3mo agoAgree with almost all of that. Unless you are targeting some obscure or old platform, I don't even know how you'd justify trying to write a 3D engine from scratch in 2026, except as a fun learning experience. Also, think about tooling. Last time I wrote an engine from scratch, the tooling to support it probably took way more time than the engine did.
- charlie90 3mo agoAI changes this a lot. You can realistically get a featured 3d engine+editor up and running in a couple week with AI, working solo. Probably better than what Godot or even Unity gives you. Also AI is very good at editor/tooling stuff, I've even found it getting better at graphics programming stuff, just telling it to 1-shot implementing gpu occlusion culling, ddgi probes, taa, etc. type of features. Also for stuff like animation, I just told my AI "clone Unreal's animation blueprints" and I have a pretty featured animation system now. "clone Unity's particle system" and it 1-shots it in an hour with the runtime and nice editor tools. With the advantage being you can just implement exactly what you need.
- smetannik 3mo agoFor some reason, graphics is one of most popular topics for recreational programming.
- purple-leafy 3mo agoBecause it’s fun as hell and a super deep rabbit hole?
- StefanBatory 3mo agoAnd you get feedback almost instantly.
- pcmaffey 3mo agoI 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.
- dimitrios1 3mo agoMy 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.
- gafferongames 3mo agoGraphics programming in games is like playing the guitar. It's cool, but everybody wants to do it. Make the bold choice. Be a game network programmer. Nobody wants to do it, it's really hard and it kinda sucks. Play the accordion :)
- mcmoor 3mo agoAny resources? It actually sounds more interesting to me since hearing about Rollback Netcode. Any front-end thing always gives me headache anyway.
- gafferongames 3mo agoThis is a good place to start: https://github.com/0xFA11/MultiplayerNetworkingResources https://github.com/0xFA11/MultiplayerNetworkingResources
- VaporJournalAPP 3mo ago[flagged]
- vnext 3mo ago[flagged]
- raincole 3mo agoI 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). [0]: https://thebookofshaders.com/ https://thebookofshaders.com/
- dvrp 3mo agoI 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!
- legends2k 3mo agoHere's my created list I maintain: https://legends2k.github.io/note/cg_resources/ https://legends2k.github.io/note/cg_resources/ Do learn if it piques your curiosity and have the time. You're in for a blast and a lot of learning, that'll make you a better engineer, in many other fields of computer science too (you understand hardware, system programming, programmer's machine model, etc.). Don't learn if you do it with a monetary end goal as it's fleeting, ephemeral and not guaranteed in this day and age.
- optymizer 3mo agoI've been using this one, maybe others will find it useful as well: https://owlcat.games/learning https://owlcat.games/learning
- Mierenik 3mo agoDepends 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
- satnhak 3mo agoShould 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.
- deliciousturkey 3mo agoSadly, 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.
- pjmlp 3mo agoNot necessarily, some folks advocate that with modern compute APIs we are better doing "software" rendering, but on the GPU. By the way, this is what renders like OTOY Octane do.
- deliciousturkey 3mo agoSadly you can't access RT cores with CUDA, you need to use a graphics API like Vulkan or D3D12. You can make a fast ray tracing based renderer using pure GPU compute, but it'll still be slower than using RT cores. And even with GPU compute, you benefit from HW acceleration with the HW texture unit.
- stefangordon 3mo agoI would learn both Claude and ChatGPT just to be safe.
- Cthulhu_ 3mo agoI 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.
- love0972 3mo agoIs it okay if I only learn Python?
- Mierenik 3mo agoNo, Python is a slow and high level language, so there are aren't many examples or documentation out there for graphics, and you need very high performance for graphics, and python just doesn't get you that. Learn c++ or rust, or even something else but it has to be fast and pretty low-level
- wizzerking 3mo agowhite background makes this page unreadable for me
- thisislife2 3mo ago[dead]