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.
playorizaya
Make awesome shaders. Check this out: https://fragcoord.xyz
playorizaya

Join the discussion

Write your take first — we'll ask for email only when you're ready to publish.

  • Hacker News
  • 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

  • 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.
  • 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.

  • 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...

  • I again feel compelled to link to the quite excellent Color FAQ: <https://poynton.ca/pdf/ColourFAQ.pdf>
  • > 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.

  • Update: and this one, with more on display transforms

    https://chrisbrejon.com/articles/ocio-display-transforms-and...

  • 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:

    https://www.youtube.com/watch?v=6hAVA6_Sczs

  • 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...

  • unfortunately, khan academy has been deleting old accounts: https://kap-archive.bhavjit.com/view?p=6177161966469120
  • I 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.
  • Can 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.

  • Wow, 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.
  • Here's my created list I maintain: 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.

  • I've been using this one, maybe others will find it useful as well: https://owlcat.games/learning
  • Graphics 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 :)

  • Any resources? It actually sounds more interesting to me since hearing about Rollback Netcode. Any front-end thing always gives me headache anyway.
  • 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 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.
  • 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 see this all the time with audio too. The amount of bits you need to reserve a
  • (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.
  • 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.

  • 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.

  • If 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...

    I also have some notebooks with SymPy code examples here: https://github.com/minireference/noBSLAnotebooks

  • Good Books :)
  • That is extraordinarily beautiful aesthetically! It's always a shame when beautiful mathematics is presented with bad typography and ugly spacing.
  • If anyone needs a longer tutorial, I strongly recommend 3b1b's series here: https://youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFit...

    The visualizations made things click in a way my Linear 101 course didn't.

  • 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