I've accepted an offer with Day 1 Studios, near Baltimore. My understanding is that I'll be a junior developer on their next gen core tech. Sounds pretty awesome, and they're cool guys. I'm also getting a car, now that I have money and a job. Thank god. I've been waiting for months, desperately wanting a vehicle. I can't afford anything that good, but I think the final selection is quite nice. I am a car enthusiast, after all; I wasn't about to settle for a five year old Civic. Exactly what it is will be secret till I bring it home.
What I'm Currently Studying
Since I have a job now, I have a lot to catch up on. I believe that I am anywhere from one to two years out of date when it comes to graphics programming techniques, particularly shader techniques. I need to bring myself back up to date if I'm going to be doing next gen work. I'm also moving back to C++ outright. A little annoying perhaps, but necessary even for my hobby work. (Amongst other things, I need a new demo should job searching come up again.) This journal post is just to give an overview of what I'm going to be looking at over the coming months. It should serve as a useful guide for those of you who are interested in taking a similar job.
First, I wrote an article some time back discussing how to handle shader constants in an automatic way, using .NET 2.0. If you haven't seen it already, I recommend it; it's one of the best bits of work I've ever done. Now, I originally meant to do research on adding lazy evaluation and referenced (rather than locally contained) data to the implementation. With my change in focus, however, I currently have a new bit of work to do. You see, I believe that I can replicate this system in C++, with nearly identical usage for people using the code to handle shader constants. Not only that, the implementation will be mostly platform independent; all it will take to port is modifying two or three extremely small functions and probably looking up your platform docs for the bytecode to a NOP. The implementation will not share the elegant brilliance of the .NET version. In fact, it will be certifiable voodoo. However, it will work, and it will accomplish the same exact goals with similar maintenance effort once it's done. It will also be accessible to a much wider audience, notably the professional audience. I'm looking forward to that.
Second, I have some books to buy. Day 1 will reimburse half the price of any book I buy that is related to my work. With that in mind, I am going to buy all of the books in the Shader X and GPU Gems series, as well as a few other misc books in the same vein. (Game Programming Gems and AI Game Programming Wisdom are likely.) Over the coming months, my goal is to internalize all of the information contained in these books. Shouldn't be too hard; I figure a month per book is a good relaxed pace, and quicker on the older books and the Game Programming and AI series. By this time next year, I can easily be completely up to date at that point with everything that an experienced game/graphics programmer should know.
Third, there's lots of extra reading to do. I need to become comfortable with everything Tom Forsyth has written, ever. I'm also planning to take an extended trip into shadow mapping technology. My current estimate is that the shadow stuff is about 20 papers to read, most of which are useless techniques and therefore can be skimmed and ditched quickly. I also need to catch up on about 3 years of GDC and SIGGRAPH papers that are relevant to me, along with anything else ATI or NVIDIA have published in about the same timespan. I'm especially interested in ambient occlusion, spherical harmonics, and subsurface scattering.
Lastly -- and this is the daunting one -- I need to study GPU based RTRT and (conceptual?) integration with a traditional raster pipeline. And before you all get excited, no, I don't think real time ray tracing has any kind of future as a replacement for rasterization. That idea is absurd, although I'll reserve extended discussion of that matter for another time. However, a number of effects are very akward to rasterize, and I've been curious recently if we can borrow techniques or tricks from the RTRT community in order to solve certain problems. This is not a first; parallax mapping is a fairly good example of the whole idea, although it's a little different. I'm not sure where this will lead, or if it will lead anywhere at all. In any case, my value as a developer has always been the sheer breadth and diversity of my knowledge, and I've managed to use that to great effect in the past. I do honestly believe that I can make some progress here.
It should come as no surprise that I want to buy an E-ink PDF reader as soon as I can justify the expense and a model less silly than the Sony Reader appears. (Does it need 4 sets of controls to turn the page on it? Does it really?) There's lots to do, and all that while I'm doing actual next gen work. I don't mind, though. For one thing, I really enjoy this sort of thing. Second, right now I'm a junior developer at a game company, and that's just not good enough. It's passable for the moment, but I'm aiming much bigger than that. I'm 20 years old now, and have a year left in my degree which I'm deferring. The goal is to make tech director and buy a Vette by 25. Seems like a reasonable target to me.
I'm particularly interested in this, and can't wait to read the end results. I also have a similar reading list, so I'm interested in hearing about what you found useful and what you thought was a waste of time.