Skip to main content

Ghostbusters: Rise of The Ghost Lord

nDreams Graphics Unreal Engine C++
Project Info
Company
nDreams
Software
Unreal Engine 4
Unreal Insights
Render Doc
Languages
C++
Role
Graphics Programmer

Overview
#

I joined nDreams just after the release of Ghostbusters: Rise of The Ghost Lord working on the additional post-launch updates for the game including:

  • Heist and Seek
  • Infestation
  • Slimer Hunt
  • Frozen Empire

Coming from a Unity background I spent some time getting to grips with Unreal Engine 4 and familiarizing myself with the rendering backend. I was responsible for:

  • PSO Caching for each update to ensure a first-time hitch-free experience for players.
  • Implementing UI to effectively communicate PSO pre-compilation to the user.
  • Profiling to identify performance hotspots/hitches within levels.
  • Various gameplay bug and crash fixes.

PSO
#

Before every update including content additions or changes, I was tasked with playing through the game to accumulate a PSO cache that could be shipped to players.

An automatic PSO caching map was created to help speed up the process of PSO caching by rendering every vfx, mesh material + mesh permutation in the asset database. But, there were still missed PSOs that needed to be collected by manually playing through the game. Additionally, later in development of the post-launch content, several graphical enhancements were made to the Quest 3 version the game, thereby requiring two separate PSO caches (one for Quest 2 & one for Quest 3).

As the game grew with subsequent updates, the number of PSO permutations that needed to be captured exploded in size. Therefore I was given the responsibility of guiding a small group to assist me in the manual PSO caching process. With this group plus the automatic PSO caching map, the game was able to achieve a smooth 90 fps with minimal hitching (using Application Space Warp).

UI
#

Due to the large number of PSO permutations, the final PSO cache was fairly large. We were receiving reports from players of long initial load times after every update. My solution for this was to create a “Shader Compiling” screen which would communicate to the player the progress remaining on the PSO pre-compilation. Along with this, I temporarily boosted CPU clock speeds during this compilation period.

Profiling
#

Another part of my responsibilities was to crawl through the game to find potential performance issues that could lead to motion sickness for the player. I did this mainly using Unreal Insights. Render Doc was not used as much due to the majority of the performance issues with the game residing in the CPU domain.

Crash/Bug Fixes
#

When I had run out of graphics related tasks to do, I took the initiative and helped the gameplay team with bug fixes and crashes that were either already documented on our Jira space, or more obscure ones caught by our Sentry instance running on live builds.