Do 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.
The amount of otherwise decent games that run poorly due to Unity or UE is very unfortunate. I wish people would stop recommending this stuff. I do hope Godot and Bevy are better, but I'm not sure if they are.
To name some games with very bad perf issues that I've played in the last couple years: Core Keeper (Unity), WORMHOLE (Unity, mostly see the lag in endless mode), Crab Champions (UE4, have to use nonsense upscaling stuff that makes the game hideous just to maintain 60fps at 1920x1200).
Meanwhile Terraria, Necesse, and Barony use their own engines and run great, they have aged like wine.
Out of fairness, I'll say Tiny Rogues (Unity) usually ran pretty well from what I recall, though the dev is actually working to move off Unity in the future, so he has clearly found issues with it himself.
I know there is the argument of making a game vs making an engine, and actually getting a game done and shipping it, but when you put out garbage you aren't gonna have a very positive legacy. I think it would be better to take the long way and ensure some level of quality. Games are often played for decades after release and if they are buggy or laggy, people will continue to run into that forever.
> The amount of otherwise decent games that run poorly due to Unity or UE is very unfortunate. I wish people would stop recommending this stuff. I do hope Godot and Bevy are better, but I'm not sure if they are.
Games don't run poorly "because of unity or UE", those engines are highly optimized for the graphical fidelity they provide, It's super easy to find examples of games that run flawlessly with these engines (UE5: Arc Raiders, Unity: Arknights Endfield). Seriously, this narrative is ridiculous and needs to stop.
Some games with those engines run poorly because no matter the engine, if the developers don't take the time to optimize their games, the result will be an unoptimized mess. Is Unity engine responsible for the fact that Cities Skyline 2 devs decided to render the full polygons of every individual's teeth no matter the distance ? There are a ton of tools built in to handle level of details and they didn't use them...
I doubt those unoptimized games would do any better and in a shorter time if the studio had to build their own engines, or with any other available engine. Bevy is too barebones to be compared, and Godot is not as capable as Unity/UE.
> The amount of otherwise decent games that run poorly due to Unity or UE is very unfortunate
The amount is approximately zero. If someone write badly optimized code with Unity they have 200% chance to write badly optimized code with their own engine.
Today I discovered, fell in love with, and returned Tainted Grail because it is horribly, terribly optimized. Apparently the PS5 version is so bad that it’s an offense to nature. Which is sad because it’s apparently a phenomenal game.
Though maybe it wouldn’t have even existed if it wasn’t for Unity.
1. Engine choice is only a factor in performance. If you build an unoptimised game it will run poorly. Doesn't matter if you do it in Unity or your own engine.
2. Terraria, etc did not succeed because they use their own engines.
3. Those bad performance games have bad performance and happen to use an engine, not the other way round.
4. The quality of your game has a lot more to do with effort, care, etc than the engine you choose to use. You can create a buggy piece of crap no matter how you make it
5. Performance alone is a bad reason to roll your own engine. "Existing engines are not performant so you should roll your own" is a very bad piece of advice.
6. Making a good engine is HARD and a lot of effort. There is no guarantee that you produce anything better because you chose that path.
I don’t agree necessarily that if you want to make games to use an existing engine in every case. For most cases it’s good advice.
But existing engines are so “general purpose” and full of assumptions about your game. Maybe your game requires different constraints?
Especially for 2D. For instance I’m building a game, powered by my custom game engine, that specifically focuses on performance and compression and no server or database in the loop.
My engine has very specific structure and assumptions about how my games must be structured, to reach pretty extreme performance and compression scenarios based on the constraints I set for myself and my game. (Hackernews post about it soon, I’m hoping next week)
I tried building my browser game so many times previously - first with unity, then godot, then react (lol!) - but having to learn the apis sucked, and the engines were not able to meet my extreme constraints (also attributed to me not being good with the engines). But looking back, I still don’t think what I’ve achieved internally would be possible without a custom ground up engine.
But I’ve learnt so much building my own engine and game.
Especially now with LLMs, I think it’s reasonable for experienced devs to try build their own custom game engines, it’s suddenly in reach for most developers.
I can't speak to "most", but the incredible CrossCode displays the HTML5 shield on startup, so indie games on the web stack do exist and can be amazing.
Agree 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.
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.
While the sister comment is down voted, they are not necessarily wrong. AI absolutely makes custom 3d engines easier to make because the math is very well understood.
Most games do not need 90% of the features 3d engines have. A simple geometry batcher with a bog standard rendering equation and simple single directional shadow map will go a very long way. I can confirm AI has been able to one shot this for well over a year.
However, dont expect to churn out nanite overnight
It's possible to not make an engine, or use a 3rd party engine. You just make a game. Use SDL or something. It's honestly easier and more fun. Definately don't use Rust.
It doesn't take two years.
The more you focus on making gameplay, and not making an engine the better. Which sounds like similar advice to "use an existing engine", but it's not, because using existing engines is also a pretty sad time. You can waste just as much time farting around in Unreal as you do making your own engine.
At the end of the day, most people are just not serious about making a game. Using someone elses engine, building from scratch, both will work if you are actually making a game and not just wasting time.
Because 90% of the work on an engine goes into the tooling (DCC tool exporters, asset pipelines, editor tools, ...), e.g. the "actual" engine runtime is just a small (and frangkly: quite trivial) thing dangling off the end of the asset pipeline. And game engine tools development is a never ending rabbit hole that's never quite finished (UI tools development got much easier though thanks to Dear ImGui).
IME two years sounds about right starting from scratch until getting everything into a state that can be called a basic game engine (if a bit optimistic). You can start earlier building a game on the in-progress-engine of course and tbh that's the only way to not develop an entirely useless engine. But that way you'll also end up with an engine that's mostly only useful for that one game, and progress on the game will be atricious in the first year or so. And of course developing both side by side means spreading the butter even thinner.
In the end though I have seen at least as many game projects fail using an off-the-shelf engine (in that case: Unity) compared to using an inhouse engine. The decision to use inhouse tech versus off-the-shelf engine doesn't make or break a game, in the end the failure always lurk within the team (but the engine is usually blamed first when things went south heh).
I want to do something different. I want to make desktop applications that utilize 2d and 3d graphics. These aren't games, and so while game engines can work, they are a heavyweight fit. And this is certainly not game engine programming, although there may need to be a way to program a 2d system rather than relying on the litany of 2d graphics libraries that all have major limitations.
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
I really dislike people that got into a thing and then try to discourage others. “Don’t be like me! I wasted my entire life” which is bullshit from a jaded person that lost passion. Telling people to stay away from graphics programming is not how to entice tomorrow’s John Carmack.
So here’s another perspective. If all you have done is web apps and Kubernetes, for example, do get into graphics programming. The feedback cycle is exhilarating, and you get to appreciate how mind boggingly fast your average computer is. You’ll get to optimize things that are ultimately unimportant because you have never learned how quick things are at the low level. There are a ton of resources and the maths is not too bad. You might find that 3D modeling is a creative outlet you didn’t know you needed. Even if completely inapplicable to your day job, you’ll find new ways to appreciate the art of programming computers, and might just decide to never touch Kubernetes again and spend the next 5 years writing your own game engine in your spare time. There are a lot of crazy people like that, and the community of hobbyists that are not ground down by life and game dev as a career is larger than you’d think. The Graphics Programming discord is a welcoming place if you want to check it out.
Is it so wrong to be doubtful of whether the field is still lucrative? We live in times of great change, it's only natural to be less assured when recommending a career path to others.
That's not the argument being made here. The field is changing. I had a good career in graphics, my life wasn't wasted at all. That doesn't mean a college student would have the same experience starting today.
Yeah, like I imagine they mean that as a career it is competitive and demanding while having few openings so you shouldn’t stake your education and future on it, but I’m with you. This is something I really want to learn well enough to contribute the world.
Another staple of HN I abhor is “don’t bother learning this cool thing unless an official IQ test says you are over 150.”
Chill down. It's just someone who has a lot of experience in the field making an analysis of the current landscape of the career, using their own as an example.
> Telling people to stay away from graphics programming is not how to entice tomorrow’s John Carmack.
John Carmack was one of the _first_ graphics programmer to ever exist. The next John Carmack can't be in the same field. The same way we can't expect the next Beatles to be playing rock music. :)
That sounds nice, but we need to make money and there aren't alot of opportunities. I'd love to get away from web and infra nonsense but,in The right domain id even do it for a pay cut. Hobby work won't get you a job
> I really dislike people that got into a thing and then try to discourage others. “Don’t be like me! I wasted my entire life” which is bullshit from a jaded person that lost passion. Telling people to stay away from graphics programming is not how to entice tomorrow’s John Carmack.
Given that almost everyone who wants to be a "graphics programmer" is also somehow gaming industry adjacent, it is extremely fair to ward them off from the folly. I do the same for anyone wishing to do "VLSI hardware engineering." If you have the skill to do either of those, you almost CERTAINLY have the skill to do something else that is almost as interesting and not saddled by garbage employers.
The primary problem with being a "graphics programmer" beyond a tyro is that the biggest consumer of graphics programmers is the game industry which is a notoriously shitty and wretched industry. Every ... single ... employer. So, from the point of view of future potential, "graphics programmer" has very little upside over pretty much ANY other type of programmers.
Second, "learning graphics programming" is like "learning phone programming", you spend more time fighting godawful software infrastructure more than you do actual programming. AI actually kind of helps this, but it doesn't completely remove the fact that 80% of your knowledge has a half-life of 18-24 months.
Finally, saying "I want to learn graphics programming" is like saying "I want to learn engineering." What "graphics programmer" means is vastly underspecified. 3D game rendering and 3D/2D CAD rendering and 2D vector rendering are completely different skillsets. GPUs are great at the first and kinda okay at the second and kinda lousy at the third. Which kind of "graphics programmer" are you even going to be?
Computer graphics is intrinsically interesting and rewarding. It sits at the intersection of several important fields, from computer science to mathematics to theoretical physics to low-level programming.
Maybe steering away from it is good advice for someone who's looking for a career transition but doesn't care about what they're actually doing. But that's not a good way to go through life; my advice to such a person would be to follow what they find interesting and valuable, and constantly challenge themselves to learn new things. Then deciding whether or not to learn computer graphics is relatively straightforward and it will be a net positive for the right kind of person. Even if they don't make it a career, the skills transfer well to many other areas.
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.
I don't really see this with modern graphics programming, but I was highly amused that my 1980s-1990s graphics skills (in particular, coordinate transform math) were very useful when I started working in robotics in the 2010s-2020s (because forward and inverse kinematics are exactly the same thing as 2d/3d projections.)
The trick there is that they both have related physical analogs, and machine learning math doesn't really (in that while you can visualize them spatially, it doesn't seem to help solve any problems in that space.)
How about people like Inigo Quilez? I'd say they're still quite high profile in today's landscape. And the main thing is I think there's just way more people in the field overall today too, not everyone can be famous! It's totally fine to not be as high profile as literally one of the most well known people in a field, it's fine to just do it because you enjoy it! The math and art of graphics (and games in general) programming is beautiful in and of itself.
Where are today's games with sufficient insight on their technical aspects, to the level we got with Commander Keen, Wolfenstein and Doom?
Dwarf Fortress solved some outstanding lag issues involving tracking owned objects. But if you ask a random person HOW, we don't actually have a serious clue.
Think of well known instances of big developers having their code exposed and we have... I dunno, Valve's TF2 leak and their incredibly rare Dota 2 between the lanes posts?
There is no John Carmack now. You're saying its because there's no large space to improve on like how early people had to. I say it's not because the struggles and unique problems disappeared, but because there isn't a benefit to that type of transparency anymore.
Right. Most of the clever stuff that Carmack is famous for moved from software into hardware.
By argument about not getting into graphics programming is different -- are 3D engines, with their vertices and textures, going to even exist a few years from now? Or will everything be rendered directly by an AI world model? How much code will a game contain, or will it simply exist in a series of cleverly-worded prompts?
Couldn't disagree more. I've only recently started digging into graphics programming and I've found it incredibly rewarding. It's the _one_ area of expertise that I don't yet have that has been preventing me from solo-developing a 3D game engine.
It takes five minutes of trawling through the videos on the GDC Vault to see all of the clever and interesting ways modern graphics engineers are eking every bit of performance out of modern hardware. Is it as clever or innovative as Carmack's fast inverse square root? I don't know. I'm not sure how to compare those things. But there is still plenty of room for that flavor of work for those that are interested.
> "Where is todays Jon Carmack?" - he was famous for squeezing everything out of the hardware,
Spinning that another way, there's Bill Gates (not sure of the authenticity though) saying something along the lines of why would he pay to spend that kind of time when CPUs/RAM/HDDs are getting faster/cheaper; users can just upgrade. If we determine which method is more successful based on their worth...
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.
Any insights? If not traditional Computer Graphics due to change, where might be the good to spend your attention within the field. Or is OP saying to stay away?
You can still read a bunch of papers and be first to market using exotic tech. The main issue right now is that games are so incredibly high budget and the bar is so high that you really need to stand out in many ways.
We see folks posting photo real, Gaussian splat FPS maps here every now and then but without also innovating on gameplay its just a tech demo. Those don't cut it these days.
I think the people that go into this field today (and for a while now) probably do it for the love of it, not the pay or widespread fame of doing something extraordinary in the field. Not that you can't have it all, but not being some legend I, well, I think that's a strange reason for someone already interested in game dev not to step into the field?
Old 3D engine guy here. I highly encourage folks to make a 3D engine for fun and learning. Shipping a game with it would be a cherry on top. Come join us in r/graphicsprograming, r/gameenginedevs and the graphics programming discord.
It's also a great way to not become the next "graphics programming legend" --I think a fast-moving field with lots of new developments is actually an exciting place to be a pro.
Where is the "John Carmack" of ML? Where is the John Carmack of physics? This hero worship crap needs to be left in the past. There isn't a singular active researcher you can point to and say "this person has made the field what it is today". There are very influential papers, but they all have multiple contributors. Is that really a valid reason to not engage in a particular area of research or engineering?
And who cares anyway? No matter what you choose to do with your time, chances are that you will not have that much of an impact on your chosen discipline. You should choose how to spend your time based on whether an activity genuinely interests you, not on whether you think it would be easy to get recognition.
Physics is a weird one to bring up, because even compared to other fields, it's one where breakthroughs are frequently the result of relatively singular genius. Newton, Faraday, Planck, Einstein, their discoveries were generally not incremental progress along existing lines of inquiry like most physics research is, they made pretty radical changes to our understanding of the world writ large.
In comparison, Carmack is grossly overhyped. He's like the Feynman of CS: A significant contributor to relatively young field, and a pretty influential communicator, but their contributions were moreso being the first to make a certain type of incremental progress than a paradigm shift.
now, if you said "don't get into it because your primary employment prospects would be games or film industry, which are known to be less than stellar towards their workers" - that would be a different story.
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.
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.
Any 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.
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.
(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.
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.
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.
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!
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!
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.
I had some difficulties making sense of _color_ in context of graphics programming, especially transfer functions (sometimes misleadingly called tone mapping).
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:
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.
I 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.
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 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.
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.
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.
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.
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.
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).
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.
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.
Do 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.
The amount of otherwise decent games that run poorly due to Unity or UE is very unfortunate. I wish people would stop recommending this stuff. I do hope Godot and Bevy are better, but I'm not sure if they are.
To name some games with very bad perf issues that I've played in the last couple years: Core Keeper (Unity), WORMHOLE (Unity, mostly see the lag in endless mode), Crab Champions (UE4, have to use nonsense upscaling stuff that makes the game hideous just to maintain 60fps at 1920x1200).
Meanwhile Terraria, Necesse, and Barony use their own engines and run great, they have aged like wine.
Out of fairness, I'll say Tiny Rogues (Unity) usually ran pretty well from what I recall, though the dev is actually working to move off Unity in the future, so he has clearly found issues with it himself.
I know there is the argument of making a game vs making an engine, and actually getting a game done and shipping it, but when you put out garbage you aren't gonna have a very positive legacy. I think it would be better to take the long way and ensure some level of quality. Games are often played for decades after release and if they are buggy or laggy, people will continue to run into that forever.
> The amount of otherwise decent games that run poorly due to Unity or UE is very unfortunate. I wish people would stop recommending this stuff. I do hope Godot and Bevy are better, but I'm not sure if they are.
Games don't run poorly "because of unity or UE", those engines are highly optimized for the graphical fidelity they provide, It's super easy to find examples of games that run flawlessly with these engines (UE5: Arc Raiders, Unity: Arknights Endfield). Seriously, this narrative is ridiculous and needs to stop.
Some games with those engines run poorly because no matter the engine, if the developers don't take the time to optimize their games, the result will be an unoptimized mess. Is Unity engine responsible for the fact that Cities Skyline 2 devs decided to render the full polygons of every individual's teeth no matter the distance ? There are a ton of tools built in to handle level of details and they didn't use them...
I doubt those unoptimized games would do any better and in a shorter time if the studio had to build their own engines, or with any other available engine. Bevy is too barebones to be compared, and Godot is not as capable as Unity/UE.
1 reply →
> The amount of otherwise decent games that run poorly due to Unity or UE is very unfortunate
The amount is approximately zero. If someone write badly optimized code with Unity they have 200% chance to write badly optimized code with their own engine.
Today I discovered, fell in love with, and returned Tainted Grail because it is horribly, terribly optimized. Apparently the PS5 version is so bad that it’s an offense to nature. Which is sad because it’s apparently a phenomenal game.
Though maybe it wouldn’t have even existed if it wasn’t for Unity.
This is a really bad take, sorry.
1. Engine choice is only a factor in performance. If you build an unoptimised game it will run poorly. Doesn't matter if you do it in Unity or your own engine. 2. Terraria, etc did not succeed because they use their own engines. 3. Those bad performance games have bad performance and happen to use an engine, not the other way round. 4. The quality of your game has a lot more to do with effort, care, etc than the engine you choose to use. You can create a buggy piece of crap no matter how you make it 5. Performance alone is a bad reason to roll your own engine. "Existing engines are not performant so you should roll your own" is a very bad piece of advice. 6. Making a good engine is HARD and a lot of effort. There is no guarantee that you produce anything better because you chose that path.
4 replies →
I don’t agree necessarily that if you want to make games to use an existing engine in every case. For most cases it’s good advice.
But existing engines are so “general purpose” and full of assumptions about your game. Maybe your game requires different constraints?
Especially for 2D. For instance I’m building a game, powered by my custom game engine, that specifically focuses on performance and compression and no server or database in the loop.
My engine has very specific structure and assumptions about how my games must be structured, to reach pretty extreme performance and compression scenarios based on the constraints I set for myself and my game. (Hackernews post about it soon, I’m hoping next week)
I tried building my browser game so many times previously - first with unity, then godot, then react (lol!) - but having to learn the apis sucked, and the engines were not able to meet my extreme constraints (also attributed to me not being good with the engines). But looking back, I still don’t think what I’ve achieved internally would be possible without a custom ground up engine.
But I’ve learnt so much building my own engine and game.
Especially now with LLMs, I think it’s reasonable for experienced devs to try build their own custom game engines, it’s suddenly in reach for most developers.
> This is why most indy games now are 2D. That's do-able. Often in HTML/JavaScript.
Most indie games are definitely not in HTML/JavaScript unless you count vibe coded ones.
I can't speak to "most", but the incredible CrossCode displays the HTML5 shield on startup, so indie games on the web stack do exist and can be amazing.
> Pay is lousy, hours are lousy, jobs end when the project is completed, and, like Hollywood, there's an army of wannabees wanting in.
Well, in that case, I'm going to go into academia!
Agree 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.
AI 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.
2 replies →
While the sister comment is down voted, they are not necessarily wrong. AI absolutely makes custom 3d engines easier to make because the math is very well understood.
Most games do not need 90% of the features 3d engines have. A simple geometry batcher with a bog standard rendering equation and simple single directional shadow map will go a very long way. I can confirm AI has been able to one shot this for well over a year.
However, dont expect to churn out nanite overnight
1 reply →
I am not a fan of this take.
It's possible to not make an engine, or use a 3rd party engine. You just make a game. Use SDL or something. It's honestly easier and more fun. Definately don't use Rust.
It doesn't take two years.
The more you focus on making gameplay, and not making an engine the better. Which sounds like similar advice to "use an existing engine", but it's not, because using existing engines is also a pretty sad time. You can waste just as much time farting around in Unreal as you do making your own engine.
At the end of the day, most people are just not serious about making a game. Using someone elses engine, building from scratch, both will work if you are actually making a game and not just wasting time.
Yeah if someone wants to do 3D engine programming they should consider reviving rend3 [0] instead of starting their own project.
[0] https://github.com/John-Nagle/rend3-hp
Isn't that GP's own 3d engine?
Two years? Why does it take two years?
Because 90% of the work on an engine goes into the tooling (DCC tool exporters, asset pipelines, editor tools, ...), e.g. the "actual" engine runtime is just a small (and frangkly: quite trivial) thing dangling off the end of the asset pipeline. And game engine tools development is a never ending rabbit hole that's never quite finished (UI tools development got much easier though thanks to Dear ImGui).
IME two years sounds about right starting from scratch until getting everything into a state that can be called a basic game engine (if a bit optimistic). You can start earlier building a game on the in-progress-engine of course and tbh that's the only way to not develop an entirely useless engine. But that way you'll also end up with an engine that's mostly only useful for that one game, and progress on the game will be atricious in the first year or so. And of course developing both side by side means spreading the butter even thinner.
In the end though I have seen at least as many game projects fail using an off-the-shelf engine (in that case: Unity) compared to using an inhouse engine. The decision to use inhouse tech versus off-the-shelf engine doesn't make or break a game, in the end the failure always lurk within the team (but the engine is usually blamed first when things went south heh).
Two if you're lucky, and work full time on it. More like 5+ plus if you are inexperienced/part time.
Unless you’ve written one before, it’s the natural learning curve.
You can always generate one using LLM if you don’t care about how it actually works.
2 replies →
I want to do something different. I want to make desktop applications that utilize 2d and 3d graphics. These aren't games, and so while game engines can work, they are a heavyweight fit. And this is certainly not game engine programming, although there may need to be a way to program a 2d system rather than relying on the litany of 2d graphics libraries that all have major limitations.
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
I really dislike people that got into a thing and then try to discourage others. “Don’t be like me! I wasted my entire life” which is bullshit from a jaded person that lost passion. Telling people to stay away from graphics programming is not how to entice tomorrow’s John Carmack.
So here’s another perspective. If all you have done is web apps and Kubernetes, for example, do get into graphics programming. The feedback cycle is exhilarating, and you get to appreciate how mind boggingly fast your average computer is. You’ll get to optimize things that are ultimately unimportant because you have never learned how quick things are at the low level. There are a ton of resources and the maths is not too bad. You might find that 3D modeling is a creative outlet you didn’t know you needed. Even if completely inapplicable to your day job, you’ll find new ways to appreciate the art of programming computers, and might just decide to never touch Kubernetes again and spend the next 5 years writing your own game engine in your spare time. There are a lot of crazy people like that, and the community of hobbyists that are not ground down by life and game dev as a career is larger than you’d think. The Graphics Programming discord is a welcoming place if you want to check it out.
Go for it!
Is it so wrong to be doubtful of whether the field is still lucrative? We live in times of great change, it's only natural to be less assured when recommending a career path to others.
> Don’t be like me! I wasted my entire life
That's not the argument being made here. The field is changing. I had a good career in graphics, my life wasn't wasted at all. That doesn't mean a college student would have the same experience starting today.
15 replies →
Yeah, like I imagine they mean that as a career it is competitive and demanding while having few openings so you shouldn’t stake your education and future on it, but I’m with you. This is something I really want to learn well enough to contribute the world.
Another staple of HN I abhor is “don’t bother learning this cool thing unless an official IQ test says you are over 150.”
1 reply →
Chill down. It's just someone who has a lot of experience in the field making an analysis of the current landscape of the career, using their own as an example.
> Telling people to stay away from graphics programming is not how to entice tomorrow’s John Carmack.
John Carmack was one of the _first_ graphics programmer to ever exist. The next John Carmack can't be in the same field. The same way we can't expect the next Beatles to be playing rock music. :)
Isn't it mostly shaders programming nowadays?
1 reply →
That sounds nice, but we need to make money and there aren't alot of opportunities. I'd love to get away from web and infra nonsense but,in The right domain id even do it for a pay cut. Hobby work won't get you a job
"These annoying, jaded horse-drawn cart builders, cautioning youngsters from getting into the field in 1908."
1 reply →
> I really dislike people that got into a thing and then try to discourage others. “Don’t be like me! I wasted my entire life” which is bullshit from a jaded person that lost passion. Telling people to stay away from graphics programming is not how to entice tomorrow’s John Carmack.
Given that almost everyone who wants to be a "graphics programmer" is also somehow gaming industry adjacent, it is extremely fair to ward them off from the folly. I do the same for anyone wishing to do "VLSI hardware engineering." If you have the skill to do either of those, you almost CERTAINLY have the skill to do something else that is almost as interesting and not saddled by garbage employers.
The primary problem with being a "graphics programmer" beyond a tyro is that the biggest consumer of graphics programmers is the game industry which is a notoriously shitty and wretched industry. Every ... single ... employer. So, from the point of view of future potential, "graphics programmer" has very little upside over pretty much ANY other type of programmers.
Second, "learning graphics programming" is like "learning phone programming", you spend more time fighting godawful software infrastructure more than you do actual programming. AI actually kind of helps this, but it doesn't completely remove the fact that 80% of your knowledge has a half-life of 18-24 months.
Finally, saying "I want to learn graphics programming" is like saying "I want to learn engineering." What "graphics programmer" means is vastly underspecified. 3D game rendering and 3D/2D CAD rendering and 2D vector rendering are completely different skillsets. GPUs are great at the first and kinda okay at the second and kinda lousy at the third. Which kind of "graphics programmer" are you even going to be?
7 replies →
Computer graphics is intrinsically interesting and rewarding. It sits at the intersection of several important fields, from computer science to mathematics to theoretical physics to low-level programming.
Maybe steering away from it is good advice for someone who's looking for a career transition but doesn't care about what they're actually doing. But that's not a good way to go through life; my advice to such a person would be to follow what they find interesting and valuable, and constantly challenge themselves to learn new things. Then deciding whether or not to learn computer graphics is relatively straightforward and it will be a net positive for the right kind of person. Even if they don't make it a career, the skills transfer well to many other areas.
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.
I don't really see this with modern graphics programming, but I was highly amused that my 1980s-1990s graphics skills (in particular, coordinate transform math) were very useful when I started working in robotics in the 2010s-2020s (because forward and inverse kinematics are exactly the same thing as 2d/3d projections.)
The trick there is that they both have related physical analogs, and machine learning math doesn't really (in that while you can visualize them spatially, it doesn't seem to help solve any problems in that space.)
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.
25 replies →
How about people like Inigo Quilez? I'd say they're still quite high profile in today's landscape. And the main thing is I think there's just way more people in the field overall today too, not everyone can be famous! It's totally fine to not be as high profile as literally one of the most well known people in a field, it's fine to just do it because you enjoy it! The math and art of graphics (and games in general) programming is beautiful in and of itself.
> "Where is todays Jon Carmack?"
Where are today's games with sufficient insight on their technical aspects, to the level we got with Commander Keen, Wolfenstein and Doom?
Dwarf Fortress solved some outstanding lag issues involving tracking owned objects. But if you ask a random person HOW, we don't actually have a serious clue.
Think of well known instances of big developers having their code exposed and we have... I dunno, Valve's TF2 leak and their incredibly rare Dota 2 between the lanes posts?
There is no John Carmack now. You're saying its because there's no large space to improve on like how early people had to. I say it's not because the struggles and unique problems disappeared, but because there isn't a benefit to that type of transparency anymore.
Right. Most of the clever stuff that Carmack is famous for moved from software into hardware.
By argument about not getting into graphics programming is different -- are 3D engines, with their vertices and textures, going to even exist a few years from now? Or will everything be rendered directly by an AI world model? How much code will a game contain, or will it simply exist in a series of cleverly-worded prompts?
Couldn't disagree more. I've only recently started digging into graphics programming and I've found it incredibly rewarding. It's the _one_ area of expertise that I don't yet have that has been preventing me from solo-developing a 3D game engine.
It takes five minutes of trawling through the videos on the GDC Vault to see all of the clever and interesting ways modern graphics engineers are eking every bit of performance out of modern hardware. Is it as clever or innovative as Carmack's fast inverse square root? I don't know. I'm not sure how to compare those things. But there is still plenty of room for that flavor of work for those that are interested.
Well, then: "merry Christmas" so to say: https://flipcode.com/archives/
1 reply →
Very interesting insights, thanks for this.
Indeed "be a graphics programmer" nowadays sounds like "be an assembly programmer".
A kind of time waster for a nerd with too much time in their hands.
> "Where is todays Jon Carmack?" - he was famous for squeezing everything out of the hardware,
Spinning that another way, there's Bill Gates (not sure of the authenticity though) saying something along the lines of why would he pay to spend that kind of time when CPUs/RAM/HDDs are getting faster/cheaper; users can just upgrade. If we determine which method is more successful based on their worth...
> users can just upgrade
That used to work, but not anymore. Not because of hardware prices, but because of small gains that upgrading gets us nowadays.
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.
Any insights? If not traditional Computer Graphics due to change, where might be the good to spend your attention within the field. Or is OP saying to stay away?
There is more to graphics than AAA games or blockbuster movies.
You can still read a bunch of papers and be first to market using exotic tech. The main issue right now is that games are so incredibly high budget and the bar is so high that you really need to stand out in many ways.
We see folks posting photo real, Gaussian splat FPS maps here every now and then but without also innovating on gameplay its just a tech demo. Those don't cut it these days.
I think the people that go into this field today (and for a while now) probably do it for the love of it, not the pay or widespread fame of doing something extraordinary in the field. Not that you can't have it all, but not being some legend I, well, I think that's a strange reason for someone already interested in game dev not to step into the field?
What if I just want to program some rendering engine for a game that looks like DOOM 3 and its predecessors? I think that’s still quite doable?
Old 3D engine guy here. I highly encourage folks to make a 3D engine for fun and learning. Shipping a game with it would be a cherry on top. Come join us in r/graphicsprograming, r/gameenginedevs and the graphics programming discord.
4 replies →
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?
It's also a great way to not become the next "graphics programming legend" --I think a fast-moving field with lots of new developments is actually an exciting place to be a pro.
The moment you realize most people's thinking is no better than a hallucinating LLM :)
Ridiculous justification.
"Where is todays Jon Carmack?"
Where is the "John Carmack" of ML? Where is the John Carmack of physics? This hero worship crap needs to be left in the past. There isn't a singular active researcher you can point to and say "this person has made the field what it is today". There are very influential papers, but they all have multiple contributors. Is that really a valid reason to not engage in a particular area of research or engineering?
And who cares anyway? No matter what you choose to do with your time, chances are that you will not have that much of an impact on your chosen discipline. You should choose how to spend your time based on whether an activity genuinely interests you, not on whether you think it would be easy to get recognition.
Physics is a weird one to bring up, because even compared to other fields, it's one where breakthroughs are frequently the result of relatively singular genius. Newton, Faraday, Planck, Einstein, their discoveries were generally not incremental progress along existing lines of inquiry like most physics research is, they made pretty radical changes to our understanding of the world writ large.
In comparison, Carmack is grossly overhyped. He's like the Feynman of CS: A significant contributor to relatively young field, and a pretty influential communicator, but their contributions were moreso being the first to make a certain type of incremental progress than a paradigm shift.
1 reply →
now, if you said "don't get into it because your primary employment prospects would be games or film industry, which are known to be less than stellar towards their workers" - that would be a different story.
Boooooooo
Keep learning yung ones
Fabrice Bellard.
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
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
That is extraordinarily beautiful aesthetically! It's always a shame when beautiful mathematics is presented with bad typography and ugly spacing.
Good Books :)
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.
Any 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.
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.
Is this a viable field for employment?or did it collapse like alot of other digital art?
1 reply →
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
2 replies →
(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.
>Inigo Quilez
I came across this guy's channel the other day and it was an immediate subscribe.
I see this all the time with audio too. The amount of bits you need to reserve a
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.
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.
Thanks so much! Really happy to hear. It makes all sweat, blood and tears of open source maintenance worth it.
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.
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!
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.
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...
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 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.
I 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.
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
And this person: https://www.khanacademy.org/profile/kaid_9428127706426004539...
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).
[0]: https://thebookofshaders.com/
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 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.
Yeah 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.
2 replies →
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.
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.
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
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.
For some reason, graphics is one of most popular topics for recreational programming.
Because it’s fun as hell and a super deep rabbit hole?
And you get feedback almost instantly.
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.
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).
[flagged]
[flagged]
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.
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.
Claude Code
Immutability. Semantics.