top of page
Top of Page

Apex Legends

Feb 2017 - July 2017
Respawn Entertainment

Source Engine
Platforms: PC, Xbox, PS4

Particle Optimizations

Particle Optimizations

Programming

The first project I worked on during early Apex development focused on optimizing Apex's particle system in order to support more particles in game for things like explosions, fire, smoke, sparks, and other effects.

My contribution involved "Vectorizing" the particle code using SIMD instructions so that updating particle data (velocity, position, rotation, scale) used fewer CPU instructions each frame. This allowed for a near 2x speed up in performance, allowing artists to author effects with higher particle counts and visual detail.

Screen-Space Reflections

Screen-Space Reflections

Programming

My second project during early development involved adding Screen-Space Reflections to Apex.  This gave level environments dynamic indirect lighting to support reflections from both static and moving objects. In real life, lit surfaces reflect four lighting components:

Light From Surface = Direct Diffuse + Direct Specular + Indirect Diffuse + Indirect Specular

The lighting from Titan Fall 2 (the team's previous project) lacked high detail from Indirect Specular causing smooth, shiny surfaces to seem overly rough and unrealistic at times.

Screen-Space Reflections captured the missing lighting term allowing lighting artists to add high detail Indirect Specular to scenes so that reflections from smooth surfaces looked more natural.

My implementation was based on work from Doom 2016 and Killing Floor 2  ⁽¹ ² ³⁾.

Early in the frame, the scene's depth, normal, and specular buffers were captured.  Then later in the frame, before tone-mapping, the buffers were used as inputs into the reflection pass.  Pixels with low specular values were skipped, and all other pixels were processed for reflections.  The previous frame color (before tone-mapping) was used as the reflection look-up color and added to each pixel as indirect specular.

Static Cubemap Reflections

Unfortunately the decision was made to not ship with Screen-Space Reflections due to strict performance budgets necessary to support 64 players simultaneously in-game.  The team decided to fall back to baked cube map reflections, used in Titan Fall 2, that capture only static level geometry for reflections, freeing up rendering resources during gameplay.

References:

  1. Adrian Courrèges, "DOOM (2016) - Graphics Study", https://www.adriancourreges.com/blog/2016/09/09/doom-2016-graphics-study/#screen-space-reflections, 2016

  2. Yasin Uludag, "Hi-Z Screen-Space Cone-Traced Reflections", GPU Pro 5, pp.149-192, CRC Press, 2014

  3. Sakib Saikia, "Screen Space Reflections in Killing Floor 2", https://sakibsaikia.github.io/graphics/2016/12/26/Screen-Space-Reflection-in-Killing-Floor-2.html, 2016

bottom of page