Post news RSS Fursan al-Aqsa Dev Blog #12 - Performance Optimization for Consoles

In this article I explain the new changes I made to my custom UDK/Unreal Engine 3 to fix textures streaming on consoles and make the game run and render as intended on both PS3 and Xbox360.

Posted by on

User Posted Image

Hello guys (and girls)!

After one intense week of work, headaches, distress, and almost throwing everything (my PC and my consoles) out the window :), I finnaly got that last map, Camp Filon, running smoothly on consoles, the way it was intended to run, as you can see in this video below:

Until now, all the gameplay features I implemented on my game, like Knife Kills, UI, Pause Menu, Game Over Screen, HeadShots Counter, and so on, if you see, I tested them on debug maps, empty maps, merely blocks, without texture, particles, or any effect. I mean, these scenarios did not represent how the final game will run.

So, whenever I compiled the last map, Camp Filon, to run on PS3 and Xbox360, I discovered another bug, which I did not observe before. All the textures on the map were terrible blurry, I mean, indeed blurry to such extent that the visuals became horrible!!!

I know that consoles have much limited RAM memory than PC, and specifically PS3 and Xbox360, in rough terms, they have 256MB and 512MB of RAM, respectively.

What was driving me nuts is the fact that the game run fine on PC, just on consoles the textures got extremelly blurry. After searching on legacy UDK Engine forums (https://forums.epicgames.com/udk) and on UDN Network (https://docs.unrealengine.com/udk/Three/WebHome.html), I began to learn more deep about Unreal Engine 3 on Consoles. The good of developing a game alone, is that it can be a true classroom for anyone. I myself, learned a LOT on this project. Specially, whenever I began developing this game, I did not know too much about Unreal Script Programming. Now, I learned a LOT, and I am able to do many things I could not do before.

Coming back to my journey, I discovered about Texture Pool in Unreal Engine 3, which, in rough terms, is kinda fixed memory space used for loading (streaming) textures to the screen. From what I understood (I may be wrong, but what matters here is that now it is working), Unreal Engine 3 throws all the textures currently loaded (which can be seen by the player view camera) inside this texture pool, and then it loads the mipmap of these textures as it is needed. The mipmaps here are kinda different versions of the same texture in different resolutions, to be loaded according the camera view distance, like, the closer the player view camera is to a texture, it will load a higher resolution of the texture, the further, it will load a lower resolution version of the texture. This is essential for performance.

So what was happening? The texture pool was filled up in consoles, so it was only loading the lowest resolution of each texture (16x16). The default Texture Pool Size in UE3 is 140MB, so I increased it to 200MB and voila! Problem solved! Not yet...

Again I compiled the map and did run on PS3 and Xbox360. It run beautifully and smoothly, with the textures on it`s full resolution, and the mipmaps loading correctly. However, another problem happenned, whenever I added the enemies on the map, it simply crashed the game on consoles with the error OUT_OF_MEMORY.

I was already entering into despair because this problem, however, my last try, was to compress all the TGA textures of this map in photoshop using the RLE algorithm. I created a small photoshop action script to batch compress all the 465 TGA textures (diffuse, normal and specular), and was able to reduce by almost half the total size of the textures. Before compression they were 576MB, and after they turned 278MB!!!

So this compression of textures compensated the increased texture pool size, allowing the game run, without crash, and with the mipmaps working flawlessly, as you could see on the above video.

Finnaly, I can use this new map as a template whenever building my other maps, as I know now that I need to optimize the maps as much as I can, and keep the maps size small, just like this, for the sake of performance, and gameplay.

Cheers and until next update.

Comments
kev.kev
kev.kev

amazing youre putting this on consoles!! MY MANNNN HAHA! wish you the best with this

Reply Good karma Bad karma+1 vote
udkultimate Author
udkultimate

Yeah brother, it's a loooooooooooong history. Just search on google for UDK Ultimate Engine and you will understand. Cheers!

Reply Good karma+1 vote
Post a comment
Sign in or join with:

Only registered members can share their thoughts. So come on! Join the community today (totally free - or sign in with your social account on the right) and join in the conversation.