Optimization in Games

Started by
13 comments, last by Lactose 10 years, 1 month ago

One of my favorite sub-subjects of a Calculus course I took once was "Optimization."

What it basically means is to "use the least amount of resources to get the largest outcome."

Ever since, I have learned how to do things the hard way to gain experience, and then I optimize. In other words, I break things down to the most basic components and then I optimize from there.

Here is my philosophy on drawing shapes:

"A square is a circle with 4 sides. An equilateral triangle is a circle with 3 sides. An octagon is a circle with 8 sides."

Some of my favorite shapes are the tetrahedron, the icosahedron and the octahedron. I love Geodesic domes.

I see a lot of optimization in games. Modelers optimize their models, and programmers optimize their code. Producers optimize their resources. The financial team optimizes their spending.

It is in our nature to optimize, because we live in a world where resources can be scarce.

Question: What are some techniques you use to optimize, whether it be your models or your code or your game budget? I could use some tips in all areas.

The reason I posted this in game design, because I am talking about the design of the game from programming to modeling. For instance, you don't make a sphere that has a million polygons, you make an octahedron, subdivide it once and adjust the smoothing groups.

They call me the Tutorial Doctor.

Advertisement

Most important thing when doing optimisation is to take the time to measure accurately. Makes me so annoyed when people optimise without measuring first, so they have no idea if the optimisation has a real world effect.

I'm coming from an engineering perspective, but the same would apply to any other form of optimisation. Harder perhaps with game design, and although analytics help, you have to be particularly careful when interpreting your measurements.

Optimisation is one of those things that you have to be careful with, what do you mean by optimisation?

Taking an existing algorithm and spending months optimising is usually a waste of time.

More often than not changing the algorithm ends up with a much bigger effect on the overall efficiency.

On some hardware you find that just throwing vast numbers of triangles at it is faster than using a load of clever triangle reduction techniques.

It's the split between the speed of the cpu and the speed of the gpu.

Sadly no body can just say "this technique is the fastest", what people can say is "this is the fastest way of doing X when you are running on Y with a Z gpu"

Having said that, things like view frustum culling are generally "a good thing"


What are some techniques you use to optimize, whether it be your models or your code or your game budget? I could use some tips in all areas.
The reason I posted this in game design, because I am talking about the design of the game from programming to modeling. For instance, you don't make a sphere that has a million polygons, you make an octahedron, subdivide it once and adjust the smoothing groups.

Optimization of models is an art question (not a game design question).

Optimization of code is a programming question (not a game design question).

Optimization of budget is a business question (not a game design question).

It sounds like you're mainly interested in optimizing models.

-- Tom Sloper -- sloperama.com

I'm not sure if this is the right place for this thread, but anyway...

I try to balance between two perspectives:

  • Don't optimise too early, you just make complex code that may have bugs and not improve performance.
  • Don't do things the stupidest way possible just to fulfil the above.

So for example, I will tend to use standard techniques like object pooling by default because it usually yields a benefit, but I keep in mind that on the odd occasion it could hurt performance by using too much memory on low performance devices.


Here is my philosophy on drawing shapes:

"A square is a circle with 4 sides. An equilateral triangle is a circle with 3 sides. An octagon is a circle with 8 sides."

I see your line of thought, but that doesn't really seem like a useful philosophy; it essentially reduces all symmetrical 2d polygons to "a circle with n sides", whilst leaving you still needing to know the more traditional descriptions to actually draw any shapes. What benefit is there to thinking about an octagon as a circle with 8 sides?


What are some techniques you use to optimize, whether it be your models or your code or your game budget? I could use some tips in all areas.

You would probably get better responses by investigating these things separately rather than trying to get everything at once. Whilst these do all fall under the same general topic of "optimisation" they're questions for completely different disciplines, and at times may even have conflicting responses based on the goals of each discipline.

I do have some generally applicable thoughts though:

  • Optimisations should be specific, and take into account the needs of a particular project. A AAA console game will have very different goals to an indie PC title, and both of those will have different needs to mobile titles. Optimisations are often a trade-off, so you need to know what is important for the project you're working on and which areas can safely be compromised to improve those critical areas.
  • If you already know that one approach should be more optimal than another and is applicable to the situation you should take it up front, but otherwise the first priority should be making things correct, and then optimising (whilst maintaining correctness) if necessary.
  • Optimisations should be based on real measurements, not guesswork or superstition. Experimentation is fine if needed, but you should always measure the results to the best of your ability, and never just make assumptions about performance.

Hope that helps. smile.png

- Jason Astle-Adams


What benefit is there to thinking about an octagon as a circle with 8 sides?

It matters more when thinking about optimization. If I wanted to give something the appearance of a sphere, but the sphere were somewhere in the background, and I really didn't need it to be high-poly, I could take an octahedron and subdivide it once and change the smoothing groups. This saves memory when rendering. There are a lot of things one could do in post-processing as well.

I see a lot of optimization in level design. I think GTA is the best example of optimization in ever aspect of the design of the game. I have also seen optimization in the programming of the game assets.

I think both the programming and artistic side both go into the design of the game, so that is why I posted here. The programmers are trying to keep things running smoothly and quickly, but if they are trying to make up memory lost because someone wanted to put a million-poly sphere in the background that is hardly noticeable, then that would be a bad thing.

Say for instance the level designer keeps subdividing a sphere over and over til the point that when you run the game, it crashes automatically from the high poly count. So first one might assume there is a problem in the code, but further investigation would reveal that high poly sphere. I think the design of the code should match the design of the game.

I have to see both sides at the same time, because right now, I am doing the modeling, UV-unwrapping, texturing, rigging, animation, programming, etc myself. My code style will change based on what I am creating. So optimization and a speedy workflow are important to me, and at least for me, they go hand in hand.

BTW, good advice, and it does help! Thanks.

They call me the Tutorial Doctor.


Say for instance the level designer keeps subdividing a sphere over and over til the point that when you run the game, it crashes automatically from the high poly count. So first one might assume there is a problem in the code, but further investigation would reveal that high poly sphere

This is rather divorced from reality. Artists are normally given budgets of polycounts and this would be inspected long before the resource was imported into the game. Also a professional game isn't going to mysteriously crash because a model has too many polys. Its going to stop with an error.

This question is so vague and full of buzzwords that lack context that it is impossible to answer meaningfully.

An attempt in what seems to be the context though: programmers can get an idea of what their budget is for polys rendered per scene. They feed that information to artists who try to work within the bounds set by the guys who understand the engine. If assets come out with too high complexity they are simplified.

I see a lot of optimization in level design. I think GTA is the best example of optimization in ever aspect of the design of the game. I have also seen optimization in the programming of the game assets.


You keep using that word....

It reminds me of a friend of mine who is convinced SEO is the be-all of getting traffic to her site, rather than things like actual content. She talks on and on about search engine optimization, she is a retired journalist with decades of experience, and keeps exhausting her old contacts asking them how they get more search engine hits, how they can rank higher, is convinced other sites are against her, and is willing to do everything except create content.

This sounds like what you are saying. Optimization is everything in games. Optimize your stuff because it is good for the environment, improves your vision, and women find it attractive---even if you are a woman.

GTA is the best example of optimization in ever aspect of the design of the game
....
I have also seen optimization in the programming of the game assets.
...
if they are trying to make up memory lost because someone wanted to put a million-poly sphere in the background that is hardly noticeable, then that would be a bad thing.
...
Say for instance the level designer keeps subdividing a sphere over and over til the point that when you run the game, it crashes automatically from the high poly count.
...
So optimization and a speedy workflow are important to me, and at least for me, they go hand in hand.

As a professional developer who has been responsible for performance concerns (aka "optimization") for multiple shipped titles, I read those lines and cannot fathom what you are talking about.

Usually developers (programmers, artists, or anyone else) start with an actual concern. Typically that concern is performance. So you use tools to properly measure what is going on. Based on those actual measurements you come up with a plan to improve the performance. Maybe that plan is to reduce the polygon count. Maybe that plan is to reduce memory usage. Maybe that plan is to restructure memory layouts for cache benefits. Maybe that plan is to eliminate redundancies. Maybe that plan is to reduce the frequency of work, or to partition the work into smaller sections and work on them over time, or do something else entirely. Then when you make the changes, you measure again to ensure the plan was successful.

Your use of optimize, well, it reminds me of the 1990's TV ad "tighten up the graphics on level 3," as the players have game controllers in their hands playing the game. They are real words and understandable statements, but they make no sense.

This topic is closed to new replies.

Advertisement