top of page

Remanence

Logo_Remanence.png

ROLE

Quality Director

SDET

DESCRIPTION

Remanence is a 3 Semester, First-Person combat game created with Unreal Engine 5.2 currently being polished for release by a cross-discipline team of 21.

I implemented Functional Testing for gameplay features

and wrote automated performance testing to track optimization progress

YEAR

2024

GENRE

Melee Combat

LANGUAGE

C++

C# 

Python 

Blueprints

Batch

TOOLS

Jenkins CI/CD

UE 5.2

Unreal Automation

Visual Studio

​Batch

PLATFORM

Windows

Functional Testing

Gameplay Tests

Core gameplay functionality is trivial to test but time consuming if a human has a long list of cases to check off.

Automating these tests gives back to the team in two ways.

  • Less time testing, more time implementing

  • More frequent verification of functionality.

2024-11-0422-02-21-ezgif.com-cut (1).gif

In-Editor Example pf Player Movement and Checkpoint tests

Performance Testing

Coming into this project I was aware of significant performance issues. This semester of the project is intended for polish. Adding more art and lighting to the level impacts performance further. Monitoring performance gives the whole team data to use while:

  • Set dressing

  • Optimizing poly-counts

  • Lighting

  • Multi-Enemy Encounters

  • Implementing VFX

I implemented per-room performance tests that capture performance metrics. This gives our data resolution and shows use where work needs to be done.​

Performance testing is run by my Jenkins Server. Testing on one PC keeps data consistent. Along with capturing framerate, I run Unreal's Profiler to get more data points on what is taking extra time each frame.

image.png

Performance data output by per-room tests

image.png

Unreal Insights trace of performance testing

Automation

Automated Build Jobs

Nightly Build

While mostly archival, it is helpful in other ways:

  • Daily change log from source-control

  • Archival for playtesting

  • Testing of Shipping Build

  • Bug Tracking

  • Installer Building

Automated Testing

Test automation is the most impactful job that the server does on this project, here is what it does:

  • Runs every 2 hours if work has been committed

  • Functional Gameplay tests

  • Performance Testing

  • Profiling

Debug Build

The Debug job is for exactly it's name. It is setup with parameters to be customizable:

  • Source Control Revision

  • Build Mode, Development | Shipping

  • Tests Groups

  • Installer Compilation

This job is mainly used when a bug is only appearing in a packaged build or installed build. A Source Control Revision parameter lets us make a spread of builds to close in on a commit that caused a bug.

Build Artifacts

An important part of automation is the artifacts. Artifacts get archived in the build result to assist with debugging and data analysis.
Test Output

Performance data and output generated automatically by Unreal is translated to a format readable by Jenkins using a Python script

Unreal Insights Trace

The trace file is artifacted for analysis or comparing traces between revisions

Build Result

The packaged build itself is archived and also deployed to a team-accessible folder

Development Support

Lightmap Render Farm

Render Farm Screenshot

~50 cores from 5 PCs at work building light maps for our lighting artist

Jenkins API Emulator

For about a week during the project I was stuck off-site. This meant I had no access to the Jenkins Server. Since I was currently working on a script that accessed Jenkins' REST API, I needed a way to test my code.

That where Emulation comes in. I created a simple webserver in Python that serves the the two pieces of data I needed to access.

​When I was able to return on-site all I needed to deploy the script was change the server URL the script referenced.

bottom of page