Optimising 3D Assets
We had a talk from Rachel Dixon about how to approach asset creation for games. The main difference between animation and games, is that we need to consider low loading times and good performance, when characters move in the game it should be responsive and quick but still have good quality. We want game play to be immersive, this means it should have efficient loading times, reduced risk of crashing and be able to run on a range of operating systems. We plan for this optimisation early on so we can troubleshoot if needed as the development progresses.
One of the most important ways of modelling environments is to use reusable assets and think of Modular Modelling. To do this we need to establish a universal scale that everything should be made to, this means that everything can be easily scaled and compared in sizes to one another, making it easier to build different environments from the same assets, as well as having everyone on the team understand and be consistent with sizing. Creating tile-able assets using a standardized sizing, with a grid system will allow for quick linking together and creations of buildings, and the use of Grey boxing/Rough Blocking and iterative designs will make constructing the environment easier between the art teams.
Looking at examples of this was really interesting to me, playing the games and seeing the final results I had never taken the step back to think about how they were made. It is very cool to see the construction and development of the iterative design. For this assignment I would largely be focussing on developing characters, but I still found learning about environments pretty interesting for future projects,
Full Process of Creating Environments- Valorant


Then when it comes to assets, there are a couple ways to designing these efficiently. First you can group the assets into necessary level of detail, things interacted with by the character, or up close to the camera will need more detail than those that wont this goes for (Polycount and Texture size). Once we know how elements will be laid out on screen, you can delete any faces that wont be needed/those hidden by environment which will keep low polys and free up space on the UVs. Depending on the type of game, you can also implement LoDs (Level of Detail), using multiple versions of one asset that swap out depending on the camera distance (lower when far away, higher when closer up), which saves the processing power for the foreground elements.

When it comes to setting up assets for full environments, we can develop a modular model kit in order to be able to create multiple houses/other environments with the same assets. These all follow that standardised sizing to be able to link together, and feature lots of reusable props. When done correctly the player shouldn’t be able to notice the reused assets unless they are strictly looking for them.
Example of Optimisation in Games- Reusable Assets

Practicing Optimisation
So we practiced setting up some of our own assets/Modular kits. Starting with developing some wooden planks and seeing how u can use repeatedly use a couple to create stairs or even a bridge. Rachel took us through how to add some variety and simple details to these, and then we just had to use the array modifier to place them equidistant.

Then we picked a reference of an interior hallway and looked at how to break this up into reusable chunks. I started by using colours to block out the assets that I saw, before bringing this into Blender to quickly build these up. I learnt that progressively building on the detail at different levels will keep each assets feeling consistent. I used the standardized sizing of 2x2m for this practice, and then placed them together using the array modifier to make sure they were tile able assets. This was pretty cool to do, and see how progressively we can add detail and built up a whole room with just a couple of planes.

Trim Sheets
Next we learnt how to optimise UVs and texture space for games. Loading models takes processing power, but so does loading materials in engine, so we need to think about how to approach textures differently than the freedom of UDIMS and individual textures that we used before.
Something particular to games is something called a Draw Call, this is something basically explaining the meshes and textures that load as the player explores the environment, they are pulled and loaded in real time. Every draw from every mesh and every texture takes processing power, and if it calls too much it means it can slow down run time, lag and even crash. This means, we need to plan ahead and look to reduce the amount of pulls needed, combine materials and avoiding small meshes in favour of larger ones if possible. The following website helped explain it a bit to me, seeing it from the more technical/programmer side was interesting to see as well, as obviously I focus mainly on an artistic understanding.
So now we now why we need to know how and one way of doing this is by using TRIM SHEETS. This is something that I had heard and seen before but never understood, this is basically putting a lot of different, tile-able textures on one sheet so that instead of loading, say 5 individual materials, 5 different textures can be pulled from one material depending on the UV placement, (this also means that we can increase the resolution of that one material so that we don’t sacrifice any quality). This greatly reduces the Draw Call, and thus makes for quicker load times and a more optimised game. We can still use individual textures for things like hero props, those which the character will have up close/interact with, thought for my particular game, we won’t have anything too close to the camera due to the camera angle.
I found this particular layout really helpful to supplement what I learnt from Rachel, as it breaks down the process, from how to plan out the trim sheet, as well as how to adjust and use them. For Trim sheets we can create an albedo, a normal as well as another roughness/metallic, etc they can house all types of materials. First we need to create each of the sections of our trim, for baking normals we need to make sure that depth can be read, that means making sure we inset and bevel out faces, even slightly, so that the extrusion can be read and thus baked, we can also sculpt to create texture, just like with creating characters (avoid perpendicular/parallel lines). To bake the albedo we need to apply materials to the high poly trim sheet, this is best done using a material library/procedural texturing, allowing everyone in the team to pull from this library means that anyone can help in creating these sheets and is nice to start building a reusable asset library.

Practicing Trim Sheets
Rachel took us through creating a Japanese style partial trim sheet in class, and this was pretty fun to do. She taught us how to think smarter, not harder and use the array modifier to quickly reproduce patterns. It was a bit tricky to initially wrap my head around but once I had set up two sections of the trim I think I got into the flow of making it, it was pretty fun to figure out and experiment with each section. Then Rachel let us use her material library and I applied these to my high poly trim, adjusting the tiling/mapping of the wood to fit better. Then I just applied all my modifiers and joined the partial trim sheet together to bake out my Normal and Albedo, and it worked pretty well! This went from about 600k faces to a single plane.

I then went and used my trim sheet to create a quick wall. I used what I learnt from the modular modelling exercise and created quick walls, screen doors, beams and floor and then manually adjusted the UVs of these (which was simple as I was mainly using planes) and was able to put my trim to use! This was pretty cool to see and gave me a better understanding of how games environments are made, I can see how you can easily optimise full environments and texture work for easy loading times.
