So I'm about 3 years into a career doing businessy programming, and I'm considering jumping tracks into games. I've heard all the usual advice about better pay / more job security / less hours / etc in non-game fields, but so much of a good software engineer's job seems to be learning, understanding and adapting to domain-specific business requirements that I really want to work in a domain that's inherently interesting to me. What I'm doing now is rather uninspiring.
I was thinking about specializing in graphics programming, since low-level optimization and algorithm-heavy work gives me warm fuzzies. There seems to be a decent amount of resources out there for learning, so I'm reasonably confident I can learn whateve is needed given enough effort. But before I get going I wanted to get some insight into the overall industry so that I have a clearer idea of what specifically I should be learning.
My #1 question is, for anyone who's working in the industry, how much demand do you foresee for custom graphics work in the future? Given the budget busting nature of AAA games and the widespread availability of (from what I can tell) solid middleware, are studios likely to just use existing game engines instead of doing their own in-house rendering work? I guess I don't have a clear sense of what a graphics specialist would do in a studio that licenses an existing engine, or if one is needed at all. I imagine if everybody starts using 3 or 4 big game engines, there's not going to be enough work at the middleware companies for all the talented graphics guys out there, much less newcomers like me. (Please correct me if I'm wrong about that though!)
Assuming that there will still be need for graphics guys going forward, what do you guys think is the quickest path to becoming able to make useful contributions to a game? Should I try and see what I can contribute to an open source game engine? Make a software rasterizer from scratch to learn all the fundamentals? This field seems to move really quickly, so I don't want to spend a lot of time learning all kinds of overly specific stuff that's actually been obsolete in industry practice for several years. How do I avoid that?
Also, if there's a better place to ask this question, please let me know. Thanks in advance for your help