INTRODUCTION
In this chapter we will be going over the definition of what the meaning of optimization in games is, where the differences between animated and non-animated meshes lie and what it looks like. In the last section, we will also list a few in-game examples and see how it’s done on different platforms and how much it changed over the years.
LESSON OVERVIEW
1. Optimization Definition
Optimizing basically means being efficient with your model's geometry, texture space and texture map's size. It ensures that the memory usage isn’t reaching its limits and reduces the computing resources, so your RAM doesn’t have to work overtime. It helps with keeping your frame rates stable and provides for a smooth-running game. However, it’s also important to note “Optimization” doesn’t automatically mean that your tri-count or textures need to be as small as possible - it is dependent on what purpose it fulfills and where it will be used later (console/PC/portfolio?).
For example, do I need higher topology for “perfect” shading or can a texture-bake take care of that? Or do I need even topology since it will be animated and deformed?
2. Optimizing your Geometry
First, let’s go over the different types of topology-optimization and see what rules exist, when it’s good to follow them and the different approaches you can take.
Non-animated Meshes
If you have a “normal” static mesh which you know won’t be animated later on, optimization can be quite easy and just takes a bit of practice to do quickly. The main rule here is: Only keep edges that contribute to the asset’s silhouette or help with the shading. When it comes to uniquely baked assets, you don’t have to worry about the shading that much, since you’ll be creating a normal map and therefore you can just concentrate on having a lower tri-count {{"Baking I"}}. When it comes to meshes that you decimated to reduce geometry (e.g. rocks), going over the mesh to clean up small triangles and hidden faces, is a good practice as well.
If you have assets made with the mid-poly workflow, you will most likely go and spend a bit more polys as you won’t have a highpoly to bake a specific normal map from and therefore will give more attention to your shading {{"Midpoly Workflow"}}.
One exception to mention here is, it’s okay to have an edge specifically for cutting your UVs. Often there’s a perfectly optimized mesh with an edge in the middle. Most likely that is because the asset is either symmetrical and the modeler is mirroring one half of the mesh to have their UV shells overlap (and save space there) or they want to arrange the UV shells in a specific way.
A tip that makes the change more obvious, you can go to your modelling software and turn your viewport to its “lit” mode without having any lights in the scene. Rotate around to see how your mesh's silhouette is looking and switch between it whenever you’re unsure how much of a difference the edge you just deleted really made.
Animated Meshes
As mentioned earlier, optimization is done differently for meshes that will be animated. Most of the time that means the polycount will be higher, with even topology and more quads instead of tris (but not exclusively). That way, the skinning job for a Rigger will also be easier later on and the deformation or stretching of your asset can look natural.
But keep in mind, even if you know an asset will be animated, consider what type of movements it will be doing. If for example it is a stiff and rigid robot, it most likely will not need a lot of topology to perform convincible robot-movements. But if it’s the case of an organic mesh (like a bag on a character, cloth in general or a moving teddy bear) well planned geometry will be necessary, which might result in a higher tri-count.
In the {{"Sub Division Modelling"}} lesson under “Edge Flow - Terminating Edges”, you can see another another guide for how to dissolve or redirect edges on a flat surface where you know you don’t need that extra geometry but want to keep the remaining faces relatively even. I have also added some Youtube videos in the Resource section that go over the same subject.
( ⚠️IGNORE - I tried to delete this image but I notion won’t let me⚠️)
Go with the question: Do I need this geometry to do something for me? If it won’t be used in animation, doesn’t contribute to a form-defining silhouette and isn’t there to support better shading, it’s probably a “No”. And don’t be afraid to just try out and delete edges, if you see it makes too much of a difference, you can always revert it.
LODs
LOD stands for Level of Detail and is used instead of your original mesh when the camera is at a far distance. It is turned into a lower-poly version and it’s texture map size also decreases to save on performance. The reduction of textures is also referred to as “mip-mapping” and will be discussed in a section below.
Your finished optimized model is your LOD 0, or sometimes related to as your Base LOD. Everything after that will be counted as LOD 1, LOD 2, LOD 3,.. and will stay as close to the shape of your mesh as possible until, at some point, it might be turned into a “billboard”, which is a simple plane. As with everything, there’s no fixed rule at what distance your mesh changes into the next LOD - it depends on the size of your asset, where it is placed and how important it is. Typically the default amount of generated LODs is 5 but the “simpler” (as in geometry) or smaller your asset it, the less LODs will be needed.
One popular example is grass - I’m sure you have noticed it popping in and out of the image depending on a few steps your character takes or how the camera moves. To combat a harsh transition, a technique to make the fade into the next LOD look smoother, is using a dithering effect in your material setup.
Sometimes grass in games can be a complicated cluster of geometry to make it look extra three dimensional, at the next LOD it might just be a few polys and the next LOD might not even exist because the green grass texture of the floor is good enough.
Nowadays, we can call ourselves lucky because some engines already do our LOD creation for us during the import (e.g. Unreal) or sometimes, when a company has a house-engine, the technical artists create tools for the others to use and generate LODs as well. They might need a bit of tweaking but in general it is a fast process. If you want to know more about LODs, you can take a look at this lesson - {{"Level Of Detail"}}.
3. Optimizing your Textures
To optimize your textures, you need to know how to use your UV space efficiently, what kind of texture creation is smart and what resolution is appropriate. This is yet again decided by the importance and size of your asset.When it comes to hero props, you will most likely have a unique texture for it but if you got a collection of similar assets that still need to look unique in themselves, you can try and pack as many as you can into one texture space while maintaining the texel-density you’re aiming for. These are often called “texture atlas” as well can be used for various cases, like a collection of books or stickers. Derk Elshof has good examples on his Artwork here:
2:1 Textures
For the UV space, you pack your shells in a way where you scale down faces you know will hardly be seen or stack them with similar shells together. Another popular thing is to create 2:1 textures. Meaning, you only fill half of the UV space and them stretch them to double their size. You bake with 2:1 settings and export it like that as well. The Engine then should adjust the size of your map accordingly but you were able to safe some memory.
Tileable Textures and Trimsheets
Besides that, another way to optimize texture usage is using tileable textures or trimsheets. With those you don’t have to bake and can build all kinds of assets using only one already finished material. Of course, they might look a little “boring” in the beginning but that’s when vertex painting or decal sheets come in handy. Those do require you to add more geo (having more segments for your vertex painting or planes for your decals) so your tri-count becomes higher but you can be extremely versatile and quick with iterations in your asset creation. Also, here are the other articles about tileables and trims if you want to read more about it. {{"Tileable Materials I"}} {{"Tileable Textures I"}}
Mip-Mapping
As hinted at above, in combination with LOD creation, your textures play an important part here as well. As mentioned in the Unwrapping article {{"Unwrapping I"}}, having enough space - or padding - between your shells is necessary for your LOD creation because of the dilation that is being created to prevent bleeding. Not only is your models geometry being changed, but also your texture map is turned into a lower resolution the further away the player is. You can see the change in the following picture:
The lower the resolution, the fewer pixels are your texture map made out of and the space between your shells might be reduced from 8 pixels between them to only 4. And the lower it goes, the less clear will your texture be and your colors and such might start bleeding into each other. But with the right amount of padding, it counteracts how soon it might happen.
4. Closing
Now having shown you all different kinds of ways for prop optimization, it’s important to keep in mind that optimization for your portfolio can be looked at differently than in production. These are all things crucial to know when doing your job but in your portfolio it’s okay to go a bit over the top with your tri-count, as long as you keep the basics rules in mind (keeping form-defining edges, not going with a 4k texture for assets in the background,…).
But if you’d go ahead and do it just like it would be done in games, you’re not able to show your skill to its full potential. For example, if we take a simple rubrics-cube, even if it’s a super small asset it’s fine to bevel the edges and have the indents be apparent in your geometry because you know you will take close-up beautyshots of it to impress with your texturing skills. In a game on the other hand, that same cube might never be taking up a big amount of the screen space so bevels wouldn’t even be visible and therefore not necessary. Same goes for your textures, feel free to have a higher texel-density and use bigger texture maps. In your portfolio you want to show what you can do and it doesn’t need to be rendered in real-time.
5. Optimization In-Game Examples
Last but not least, we want to take a look at how some games handle their geometry and how contrasting it can be in different genres. Here are a few examples:
EXERCISES
Prop Optimisation I - Create your own Assets
Prop Optimisation I - Create your own Assets
OVERVIEW
1. try to optimize the asset’s geometry 2. layout the UVs in an appropriate way (keep texel-density in mind) optional: 3. apply simple texutures and export into an Engine 4. let it auto-create LODs and visualize them in the project
EXAMPLES
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.
PROGRAMS USED
Placeholder for programs text