The format for homework is a bit different this quarter. Instead of having approximately one assignment per week, we have 1 big assignment, due at the end of the quarter. I'm not sure I like or dislike this yet, honestly. While it does give me a chance to really drill down on a specific problem and gives me lots of chance to refactor the things I don't like about my current design, it also gives me lots of rope to hang myself with. I think I'm going to have guard very vigilantly against complacency this quarter - if I slack off in the beginning, I'll be overloaded at the end.
The assignment is to basically pick 2 things off the list below and make a demo that uses them. For me, this essentially means making my library do some of the things I've been putting off due to time constraints. Some of these I've already thought about and have architected so that implementing them would be easier. Some of them I've only been learning enough about recently to understand what they require. The main question I'm debating at this point is whether to take the easy road and implement things that I know will be easier for my current codebase (i.e. less time-consuming) or to try and pick something relatively new to me (and spend more time doing them).
So far, my philosophy in this course has been to learn everything possible, whether its taught in class or not. This has served me well, but it's been at the expense of a lot of time. For the last six months I've basically had no life except coding. My friends are surprised when they see me come out of my hole anymore (as I did last weekend at Norwescon for a day or so). I haven't been home much either and my family is starting to actually get used to that.
This has been a conscious choice and I've had the full support of my family and friends in doing so. I've also been really enjoying the chance to really spread my wings a bit, code up a storm, and regain my passion for programming. I also know that this is somewhat temporary and my current schedule has a specific end - when class ends.
But its a bit harder this time around to jump down the rabbit hole. In all my spare moments lately, I've been thinking about the coding of my engine and what I want to start working on. And yet, I feel this knot inside when I actually sit down and think about doing the code. I know that once I start coding again, I'll bury myself, just like the last two quarters. I'm looking forward to it and dreading it all at the same time.
In addition, work has been getting much more demanding lately. I'm being put on a new project that is pretty critical and lots of people are counting on me to do miracles. I'm looking forward to the work, in fact, and think that not only will I be perfectly capable, but I'll have fun doing it. Unlike the last two quarters, though, I can't slack off at work any more. I have a strong suspicion that I'll be battling myself a lot on what to work on. I don't have a good history of being able to multitask on different projects very well. I suppose I'd better get better at it, though, because I don't think I have much choice at this point.
Anyway, here is the list of topics I have to choose from.
- Shadow Maps
- Stencil Shadows / Shadow Volumes
- Precomputed Radiance Transfer (PRT)
- Ambient Occlusion
- Skinned Character
- Hierarchical Animation
- Transparency Sort
- Depth Peeling
- BSP Trees
- Height Field Terrain
- Particle Systems
- Normal Maps
- Light Maps
- High Dynamic Range Textures (HDR) and Tone Mapping
I'm currently leaning toward Height Field Terrain (which has been a hobby of mine for years and something I'm highly interested in anyway) and Particle Systems for my projects. I have some infrastructure set up to deal with terrain rendering already thanks to my original inspirational materials. I don't have a lot of experience with Particle Systems yet, but I do want to learn them well. If I do things right, though, I have enough infrastructure set up that it may be easy to also implement Shadows (either method), Skinned Characters, Hierarchical Animation, Transparency Sorting, Normal Maps, Light Maps, and Instancing as well since those are all things that I've been planning on adding eventually anyway and have set up the architecture to support them.
If, after implementing all those, I still have time, I'm definitely interested in doing PRT, Ambient Occlusion, and a number of other advanced lighting models. I suspect I won't have time, though.
Oh decisions, decisions! Heh, just thinking about this has given me a pretty strong nudge to go code =)