Little Nightmares 3

I did my internship in the 4th year at Engine Software porting Little Nightmares 3.

I was an Engine programmer and mainly worked on porting the game in development to Switch, PS4, and Xbox One. The game has multiplayer functionality which I had to get working for all the mentioned platforms.

Details:

4th-year internship project

Team: 2 people

Time: 40 weeks

Engine: Unreal Engine 4


Team Composition:

PR: 2

My contributions

The biggest contribution is optimizing the game to run smoothly on the Switch, PS4, and Xbox One. The second biggest contribution is getting the multiplayer to work for all the mentioned platforms. What I did for this is as well is get crossplatform play to work for the Xbox One with the PC and Xbox Series X/S along with the PS4 with the PS5.


Some other things I learned and used are:

How to use the profiler in Unreal Engine,

Optimize the navmesh runtime generation,

Use graphics debuggers mainly those for Switch and Xbox One

Navmesh

The game was using a dynamic navmesh which runs fine on most PC's the Switch has a lot of issues updating the navmesh. To fix this I had to optimize it to run properly. The first thing that had an impact without changing the runtime generation was the region partitioning. Region partitiong is how the engine will look at the area it is regenerating and how it will build the navmesh inside the given area(a tile). The types of partitioning can be seen in the image below and for the best speed in our project I had to set it to Chunky Monotone but this was not enough.

Afterwards I tried reducing the amount of tiles the navmesh updates. The setting that helped quite a bit is "Do Fully Async Navdata Gathering" as for Unreal 4.27 it means it will now only update 1 tile at a time instead of however many the hardware would allow. Even with this it was too heavy beacuse a single tile update would cause the game to visibly lag so we had to change it to Dynamic Modifiers Only. This would require project wide changes which were than relayed to the rest of the team along with those making the original game.