Graphical Optimisation, from a visual perspective pt. 1
October 9, 2012 § Leave a comment
(No, I didn’t post anything yesterday, but it was a public holiday, so I didn’t feel like it. Hey, shut up, I don’t make up the rules, I just enforce them. Wait, no, I do make them up, so HA, you’re not my real mum)
When it comes to optimising a piece of code, there are two main facets to look at, the underlying code, and its actual implementation. The former is a relatively simple process, where you go through what’s written, and make it as easy to read as possible, and minimise or fix any points where the code is causing slow down. The implementation side though, will often require a lot of lateral thinking, and repeated tests to ensure that what you’re doing is actually optimising. For a visual example, think of a graphical effect, such as Screen Space Ambient Occlusion. When you go to implement it, you’re left with a few options, pertaining to graphical quality vs. computational power. Theoretically, the best quality option would be to have the most complex processing system, which takes into account as many light bounces as possible, and to render it at the full screen resolution(or its upscaled anti-aliased form, depending on what you’re dealing with). Simple optimisations here are to use a simpler light bounce calculation, thus reducing the amount of processing power for each pixel calculated, and to render it at a lower resolution than your screen, with some form of upscaling. You could run into problems if your upscaling required more power than it would take to render the whole screen, and you’re more likely to get odd artifacts from within the effect, but overall, so long as it’s implemented well, the difference to visuals should be negligible, while the performance would be greatly improved.
For a significantly more optimised form, we could look at what Sucker Punch Productions did for Infamous 2. Given a normal pre-baked light occlusion system is efficient, but lacks good detail, and a normal real time one is inefficient, and often will fail at the “big picture” they decided to combine the two. As such, they pre-calculated occlusion maps for objects, and then used a function to calculate when the maps should be shown. This allows for great clarity within the occlusion, while also allowing it to be very accurate, and most importantly, optomised. It has a relatively light-weight piece of code running on screen, and it would increase the amount of RAM required, by increasing the number of “textures” in use, it would also slightly increase developmental computing budget, but to a point that should be unnoticable in terms of a full retail game. This system however was designed to complement the existing AO, rather than replace it, in particular its uses were for medium distance, static objects, due to limitations of the pre calculation system(Compared to the long distance, static for pre-baked, and short distant,dynamic of SSAO). However, in theory, the work that went into making it a complementary system, could be significantly refined to allow it to replace any form of real time occlusion calculation, or at least to significantly reduce the amount of calculation required for a normal visual appearance. Regardless of its implementation, such optimisation is an important logical step.
But I want to go a little further with optimisation, that is, to put it into the truly visual spectrum. For this, it’s important to look at another piece of visual work that takes a lot of time to create. That is, cartoons. More specifically, I was looking at anime, which takes many of the tradtional cartoon systems, and further refines them, and it occurred to me that certain changes to how video game graphics are shown could be made, which may help reduce the amount of time spent making them, and the amount of time it takes to render them. Obviously, this is not a be-all-end-all solution. There will always be space for hyper “realistic” games, and their greys and browns, but this train of thought would work best with anything from the “Uncharted 2” level of stylisation, right down to El Shaddai: Ascension of the Metatron(As is stands, Uncharted 2 is an almost perfect example of what I’m suggesting. Obviously, my ideas aren’t new, but I wanted to clarify them on paper).
Tune in at some point in the future, where I get into better detail, and am hopefully less tired, and so I write better.