I am an aspiring professional graphics programmer. Interestingly enough, despite being extremely close to finishing my undergraduate degree in Computer Science (with a concentration in graphics, mind you), most of the material I know has been self taught. Recently I bought

*Real-Time Rendering*and

*Physically Based Rendering*and my mind was blown on how much I still don't know. Even after nearly 10 years of hobby experience, I feel completely ignorant. I can definitely see why people need to get PhD's in the subject to actually get anywhere in the research realm.

As fascinated as I am in the subject, I feel like I have some serious gaps in my knowledge; things that I don't even realize I need to know. I guess I'd like to hear your opinion on what every graphics programmer should know. Here are some things that I can think of:

Linear Algebra - Unfortunately, I was never able to take linear algebra (long story--I transferred schools and planning classes has been a nightmare), but it's the most obvious math subject in graphics. You won't get far without a great understanding of vectors and matrices! I'm finding that the more heady parts of linear algebra are also a basic necessity as well, such as understanding eigenvalues (I still don't...). I just recently bought Gilbert Strang's book on Linear Algebra, so hopefully I will soon be a master of the subject.

Calculus - The deeper I delve into topics like radiosity and spherical harmonics, the more I realize I should have been a math major. I've had up through Calc II, and what I really need is Calc III/Differential Equations! I'm looking into fitting these classes into my schedule.

Computational Geometry - Things like voronoi diagrams and delaunay triangulations, convex hulls, line configurations, etc. I feel like I don't have an excuse not to know these.

Graph Theory - This is a new realization for me. I'm finding that I need to know my way around graphs...

**really**well.

Rasterization/Ray Tracing Experience - I feel like every graphics programmer needs to have written at least one ray tracer and one software rasterizer. I've done the latter, but not the former (yes, I'm lame). That's one reason I'm super excited to read

*Physically Based Rendering.*

The reason I ask is I want to graduate from the "I've messed around with DirectX and little math and stuff" stage to the "I'm a

**real**graphics programmer" stage. It seems like I basically should have been a math double major. Thankfully, it's never too late, but I'm having to scramble to learn all the math now.

What do you guys think, are there other things?