0/n) How to learn graphics programming (but not in a hurry): self-study edition! This thread is highly opinionated, and not what I went through (technology changes), but what I would recommend today. You don't need all of the following to get a job...
Conversation
Replying to
but just start the path and continue learning and learning. Interview earlier than you think you're qualified and listen to feedback. Learning on a job is a lot easier than learning on the side.
2
1
19
1/n) Don't use any commercial engine or framework to start. There's far too much "magic" involved that will prevent you from understanding what's going on. You can always reference them or use them later.
2
2
33
2/n) Expect to have ~3 projects going at once (I'll describe them shortly). When you get bored of one, hop to the other, and keep cycling between them for the rest of your career.
3
1
31
3/n) Have a prototyping engine. Pick an API (preferably Vulkan as I believe the spec is clearer for beginners than the D3D12 doc). Don't bother wrapping anything, don't make it pretty, just make it work. This is where the majority of your experiments will happen.
3
2
31
4/n) Have a path-tracer (software rasterizer). Follow Matt Pharr's book on physically based ray tracing more or less to the letter, start to finish.
2
2
37
5/n) Have a "production engine" which you'd release to the wild if you so chose. Use, to the best of your ability, good abstractions to abstract out platform and API differences. Attempt to chase throughput with multithreading and graph-based abstractions.
1
21
6/n) Study and know linear algebra, projective geometry, geometric algebra/quaternions/dual quats, multivariate calculus, signal theory, fourier/harmonic analysis, and discrete math.
3
3
37
7/n) Study and know data structures, particularly acceleration structures but also understand the importance of I/D-cache utilization, effects of branching, and have a feeling for the latencies involved
1
2
26
8/n) Start reading papers and try to implement one to start. I'd recommend the Unreal BRDF paper. Understand the derivations and try to reproduce the results.
1
1
26
9/n) Learn about compression and aliasing. Write a BCn codec. Read about how video codecs work (the techniques are transferable). Research and/or experiment with the various AA techniques out there (MSAA, MLAA, FXAA, TXAA, etc)
1
22
10/n) Study other engines, preferably specialized engines as opposed to general-purpose engines. Check out talks from or for example. The talk from on Bungie's engine is a good primer to how modern engines are roughly structured
2
25
11/n) Learn to use the tools at your disposal. Core dumps, GPU dumps, frame dumps, visualizers, etc. Write your own tools when needed. is especially useful when getting acquainted with the graphics pipeline for the first time.
1
1
22
12/n) Ask tons of questions. Graphics is really broad, and no matter how much I learn about any given topic, there's always someone that knows more than I do. Experts are usually really gracious about helping out and giving advice.
1
15
13/n) When you're in the industry, try to shadow an artist work from time to time (lighting, texture, modeler, vfx, technical, etc). Seeing their workflow helps you understand how the content pipeline pieces together. You also get ideas on how to improve things.
1
17
14/n) Don't spend too much time being intimidated. Take techniques/methods/algorithms one at a time. Slow and consistent improvement is much better than trying to cram it all in at once.
3
3
34
15/n) Be quick to admit when you don't know something (especially to yourself!) or you'll cheat yourself of a learning opportunity. Embrace the fact that you get to work in a field that has so much to explore and learn and do.
1
1
25
16/n) At the same time, don't accept what you read online as gospel-truth either. Sometimes, things change (hardware, drivers, apis, but also our own understanding of the best way to do things).
1
11
17/n) Don't get caught up in debates on A technique vs B technique (e.g. forward vs deferred, forward+ vs tiled deferred, etc). Learn what the techniques are and what the tradeoffs are. Implementation complexity also counts as a tradeoff.
1
20
I'm sure there are many things/points I'm forgetting, so if the twitter-verse would like to chime in, I'm sure future readers might appreciate it!
2
1
13
