I've seen this question on SO, but here i want it to focus on GFX.

So in your opinion what applications/features should every aspiring GFX programmer write/change to get better?

Community wiki since there is no "right answer".

LE: Not referring to actual games, but to graphical features for example changing something in an engine (e.g how it loads objects), making a compositor, so on and so forth.


My answer is always the same: if you haven't written one before, write a raytracer.

You'll have to deal with optimization structures, numerical precision, and all sorts of other issues, but you'll also work directly with the mathematics of light in a way that you rarely do when dealing with all the hacks and approximations that make up a production real-time renderer.

Strip away all the edifice of loading systems, buzzwords-of-the-week, deferred-this or forward-that, and you're left, finally, with light traveling through a medium. In the end, that's all there is to graphics.

  • \$\begingroup\$ Interesting, I was contemplating suggesting a raytracer as well, a very nice math exercise. I do disagree with deferred being a buzzword of the week, it's, like raytracing, a fairly big shift in how you approach your rendering, which, for a graphics programmer seems to be something you should be aware of. \$\endgroup\$ – Kaj Aug 6 '10 at 18:29
  • \$\begingroup\$ I would say that optimization are not as important as dealing with arbitrary meshes, which is a step a lot of people never get to with raytracers. \$\endgroup\$ – Jonathan Fischoff Aug 6 '10 at 18:31
  • \$\begingroup\$ I'd second (third?) this suggestion, with the caveat that (as mentioned) it needs to support meshes, and not just stop at shiny-spheres-on-a-chequerboard. Bonus points for any attempt at global illumination. Even if you don't heavily optimise it into something actually useable, you should strive to understand which bits are slow and why. \$\endgroup\$ – JasonD Aug 6 '10 at 18:55
  • \$\begingroup\$ And one caveat with this suggestion - while light traveling trough a medium is all there is to graphics, it will give you very little training in what you need in actual (current) production environments. \$\endgroup\$ – Kaj Aug 6 '10 at 19:49
  • 1
    \$\begingroup\$ +1 writing a ray tracer was the most useful thing I learned in my college graphic's class \$\endgroup\$ – Bryan Denny Aug 7 '10 at 17:09

It may be of little practical use these days, but writing at a software renderer, at least a basic one (maybe just some spinning textured cubes), is a worthwhile exercise.

Understanding how to transform, project, clip, depth-sort, rasterize, and texture map polygons yourself will give you a much better understanding of what 3D hardware and rendering APIs are doing

  • \$\begingroup\$ pretty much this. barring this, a sprite blitter with alpha support. ..or at least something, ANYTHING, where you manipulate pixels by their bit values. \$\endgroup\$ – Lassi Kinnunen Jun 7 '17 at 5:54

While not rendering code, I think writing a BSP compiler and accompanying traversal code is a nice exercise in vector maths.
Secondly, a deferred renderer. Not because it's the end-all answer to rendering, but it'll give you insight in another approach to rendering.


Learn the mechanics and skills of writing good shaders. While not 100% necessary in all cases, it's a valuable skill to know.

  • \$\begingroup\$ I agree with your answer however it's too broad and some resources and links to them wouldn't hurt for a complete answer :). \$\endgroup\$ – lukas.pukenis Jun 30 '14 at 13:50

Not the answer you're looking for? Browse other questions tagged or ask your own question.