Wednesday, 2 April 2014

Curtain Call

So this is the last blog for the class, 10/10 (probably wouldn't read again), the big finale...I know that in the past I've generally tried to talk about stuff that I find really interesting like Finite State Machines or Valve's water shader but I'm not going to take that approach with this blog...Nor will I play it safe and talk about some topic we were taught in class and just repeat everything that was said with maybe a few additions. Instead I plan to do two things in one today: I'm going to do a review of my own and talk about myself!...By that I mean I'm going to talk about what I've learned, what I plan to do/learn and if I feel I have the time then talk about why I plan to do it.

What I learned in class
So let's talk about the fun things that I've learned from this class as well as from what I've learned doing research because of the class. To start things off, FBOs are a fantastic concept to me. They can let you do so much and can lead to some pretty interesting stuff. The flexibility for things like Bloom, Thresholding and Tone-mapping are fine examples of what you can do with FBOs and reasons for why I'm quite glad to have learned them!

Another topic is Normal Mapping. The fact that they allow you to get much more out of lower-resolution models is fantastic as it gives you a similar quality of visual without putting as much strain as on the GPU and you can load in models much faster! The idea behind normal mapping also gave way to a few other ideas early on in the term so it had the nice side-effect of sowing the seeds for some of my other ideas.

Next up is reflection, this is pretty easy as it's just rendering the scene from a different point of view but it can allow for quite a bit of flexibility (i.e. Mirrors and water surfaces among other things).

Then there's also Fluid Dynamics, Implicit Surfaces, Shadow Mapping and Deferred Rendering which are all interesting topics that I've only had the time to read up on but not actually apply sadly...Though that will hopefully change within the next 12 months.

What I plan to do and learn
So some of this stuff has already been alluded to in previous blogs but I'm going to reiterate anyway. Within the next year I plan to apply most of the stuff that I have yet to apply, primarily Shadow Mapping and Deferred Rendering. I also hope to perform Mesh Skinning with Dual Quaternions as it seems to be the most efficient method at this point in time as well as having the least amount of artifacts. I also hope to learn Inverse Kinematics as it can provide a lot of useful features as evidenced by its use in Uncharted as we learned last year. I also hope to apply a few other techniques which we learned in class like Depth of Field and SSAO...Long story short, I want to be able to say that I completed every single question we were given for homework, even the insane upgrades.

On top of all of this I have two major goals: Getting my style of programming up to a more professional level where I can better manage memory and have it well optimized (ideally able to use DOD where it should be used) and I want to have started work on my engine without it looking like I stopped the moment school started up...Ideally in a years time I'd be past my lowest goal of a quarter into the development.

Why am I doing this? (Warning: Some of this stuff may get weird)
I'm sure this is a question that has been asked about me many times as I often seem to take harder paths than most (i.e. I set out with the intention of writing blog posts about everything BUT what we covered in class and last term I made a point of doing harder things like skeletal animation before we even got close to touching the concepts) and I've also shown a tendency for taking on more than I can chew. So why would I do all of this? Well, it goes back to two very simple questions, ones that I've seen quite a few students ask and be asked at one point or another: "Why are you here?" and "Why do you want to make games?" They're innocent enough questions and everyone should definitely be asked them at one point or another because it really makes you reevaluate yourself and your goals in life.

So what're my answers to that question? Well you see: Video games as a whole have done a lot for me in the past. They've picked me up when I was down and they've given me the strength of will to get past the obstacles in my life. They've also brought me close to a lot of people, many of whom have become like close family members despite the distances between us. They've done so much for my life and, knowing that, I can safely say that I want to do that for someone else. I could probably go on to talk about a lot more but there's a time and place for everything and any further statements may look like I'm trying to get some special treatment.

So why am I saying this? Well, in this current situation I feel that it's best to voice my personal motivations as it adds a layer of perspective to all questions that I ask regarding programming and game design. Suddenly all my questions about engines and such as well as choosing to look into topics that go beyond the class material goes from idle curiosity to goal-driven research that can help me out when I try to start my own company.

I hope you've enjoyed reading this long, dragged out post that's really just me ranting incoherently because I have sincerely enjoyed this class! In the end it has brought me one step closer to my end goals, given me a lot of wonderful information and experiences to draw on in the future and has really helped me improve drastically as a developer. Thank you for a wonderful term!

Until next term, cheers!
Cameron Nicoll

P.S. Managed to get this in 7 minutes before April 3rd, totally didn't make my closing statements from my last blog look like a lie!

Tuesday, 1 April 2014

Flowing Fluids

THE PENULTIMATE BLOG!

Yeah, I just needed to get that off my chest. I mean, how often do you get to use the word penultimate? So for this penultimate blog I was trying to think of unique and fun topics to discuss. One certain professor recommended Implicit Surfaces and I won't lie, they made very little sense to me. I have yet to develop the necessary skills for working through the usual jargon you find in academic papers. So instead I'm going to talk about another topic: Fluid Dynamics!

So I had looked into Fluid Dynamics before, namely because when you have your prof saying that you shouldn't do something from scratch that's either a warning or a challenge...I chose to see it as a challenge (which I, regrettably, could not meet). So I've only really looked at some of the basics of Fluid Dynamics and as such my description won't exactly be up the level you would expect from something like, say, an academic paper. So to begin with, a simple way of looking at Fluid Dynamics is by looking at it in terms of a grid. Each block on the grid is a particle that is a part of the fluid and contains information such as colour, direction and magnitude. As the simulation runs through its updates, we can use the information in each particle to figure out what each particle should look like (i.e. should the colour become more vivid because more force is accumulating or is the particle untouched and so it should have no colour).

One way of sort of simplifying fluid dynamics is to think about it in terms of a scalar field (Field A) and a vector field (Field B). Field A is used to denote what colour each point in the simulation should be and then we can use bicubic interpolation between each one to figure out the colour on a per-pixel basis during the render process. This will result in a smoother colour blend for things such as smoke. Field B is then used purely for calculations and is ignored during the render step. In order to figure out how each particle changes we need some way of remembering the direction that the particle is travelling in as well as the force behind it in order to calculate the colour. This is important for things such as diminishing colour as the particle 'moves'.

This more or less my understanding of the very basics of fluid dynamics. There is the option to use more equations to create more realistic dynamics such as the navier-stokes equation which takes into account other factors such as pressure. Unfortunately, I will not be going into these at this point in time as I feel that I've still got quite a bit to learn in that area.

So yeah, that's more or less my understanding of Fluid Dynamics summed up in what seems to be one of my shorter blogs. I was kind of hoping that this one would come across as bigger and more interesting but I guess I didn't maintain the momentum from the last one. Oh well, they can't all be winners.

You can expect to see my final blog probably tomorrow/later today or tomorrow-tomorrow (as in April 3) but cheers for now!