This was a project that I worked on for my internship. For my internship, I went to Valenciennes, France and joined the Masters Degree students (year 5s) in Supinfogame, Rubika for their final year projects. Their final year projects involved them creating games as teams consisting of designers, artists, and programmers. When I went for this internship, the team I joined was well into mid-production already, and most of the programming had already been finished. Thus, my tasks involved mainly optimization. I joined a team of 7, consisting of 3 game designers (1 of which who could also program), 3 artists and 1 programmer and my stay lasted two-and-a-half months. I joined in as their extra programmer. This game was developed using Unity.
Since my main task was optimizing the game, I spent quite a while getting familiar with the current version of the game and Unity, as I hadn’t used Unity much before I went there. After discussing with the group’s main programmer, we decided that I should try to do a “Streaming System” since the game had a huge environment.
A Streaming System is something like a Level-of-Detail system in which the game will check if there is a need for this area to be loaded or not based on the player’s position. Thankfully, Unity has its own implementation of occlusion culling so my job was lightened, especially since implementing occlusion culling would take quite a while. Since the game was broken into multiple scenes, my final Streaming System works like this:
- Each scene has a bounding box that encapsulates the entire scene
- The system will check the distance between the player and these bounding boxes and if the player is close enough (a specific distance can be set), the game will load up the scene in the background, and when the player gets even closer, the scene will be fully loaded. This double distance check is to ensure that the scenes-to-be-loaded would not pop up out of nowhere. This also ensures that there would not be a “lag spike” when a level is to be loaded.
Another one of my duties for this game – since I had relatively more time than the others in my group – was to help out with the game’s level design, in the form of creating hitboxes for the levels. My group’s game designers needed help and so I helped them out in providing hitboxes for the game’s objects, terrain, etc. This was also kind of an optimization task as I had to ensure that I didn’t use too many hitboxes as that would only worsen the performance of the game.
A project that I contributed optimization for for my internship.
Date March 2016 – May 2016