FANDOM


Cathode is an engine built by the Creative Assembly in partnership with AMD for the 2014 video game Alien: Isolation. It is a highly modified version of the engine created for an earlier title, Viking: Battle for Asgard. The trademark for Cathode's name was filed by SEGA on August 26th 2013, and eventually granted February 20th 2014.

The Cathode engine was built around a custom node based level specific scripting system which was created entirely for Alien: Isolation - named after the engine, Cathode Scripting. This system was live edit, running inside of the Creative Assembly Game Editor (CAGE) in a what-you-see-is-what-you-get (WYSIWYG) style. It allowed for the use of prefabs to quickly build upon existing scripts. The Cathode Scripting system covered: particles, lighting, props, AI scripts, audio, zoning and character setup.

Clive Gratton (lead developer of Alien: Isolation) explained that initial development on the game was difficult, as when the Cathode Scripting system was implemented to the engine a large portion of already completed work had to be restarted. There was a period of around 6 months of work that was effectively lost as a result. Prior to the engine's CAGE implementation, a 3DSMax plugin was used to edit scripts for the game which was not ideal as the license was expensive, and not all of the team could have access to it.

The initial greenlight demo for Alien: Isolation was built upon an early version of Cathode when work began to convert it from the Viking engine. While early public demo and press builds of the game included a splashscreen for Cathode, references to it were removed in the final shipped game. The engine name was later added to store descriptions.

Lighting

Cathode was built to use deferred rendering, allowing for good performance with a large number of lights in an environment and high-poly geometry. This meant that the game was able to re-create the Alien look without being too taxing on the system it runs on. Typically deferred rendering engines have issues with alpha objects, however this was handled through a separate "alphalight" system. Developers Thomas Stachowiak and Jose Bonet detailed the way that Cathode handles its deferred rendering in a talk at the Develop 2012 conference during the development of Alien: Isolation.

CATHODE Realtime Radiosity

CATHODE Realtime Radiosity

An example of the realtime radiosity being demonstrated in CAGE with CATHODE with the Sponza Atrium demo.

As well as deferred rendering, Cathode calculates light bounces at runtime (a system known as "realtime radiosity"), allowing for dynamic light sources to produce realistic environmental effects. Light bounces are not only calculated from light entities, but any emissive surfaces. Probes are placed throughout levels and baked to a "radiosity instance map" coupled with a "radiosity runtime" binary. This information is then used at runtime to produce lightmaps which are applied to static and dynamic objects. A configuration file is found in the shipped files of Alien: Isolation allowing for customisation of this system. This caused disruption internally, as the feature was added mid-production causing extra work for the art department on maps that had already completed late stage art passes.

Ai radiosity2

LEFT: The radiosity lightmaps, RIGHT: The world lit only with lightmap data.

It was noted that the Creative Assembly hired some lighting technicians from the film industry rather than the games industry due to their lighting system being live edit, meaning that they could easily modify environment lighting without much technical knowledge.

Engine Development

Cathode HighRes1

A screenshot of the CATHODE script editor in action.

The Cathode engine is a highly modified version of an engine created by The Creative Assembly for a previous title, Viking: Battle for Asgard. A number of old dependencies from Viking can be found in Alien: Isolation - for example, in the console build, many unused Viking config files are left over: UI scripts, weapon scripts and attack data. Early Alien: Isolation character configuration files also share a large number of attributes from Viking's characters where they have been ported to the Cathode XML/BML format. It was noted by developers that these character configuration files have survived from early EA sports games that the Creative Assembly have produced, and although it is not an ideal system, it works well which is why it has still carried across. Other older dependencies can be found, such as the engine's level load function forcing a level type of "STD_LEVEL", which was previously read from a file in Viking.

Cathode performance suite hq

An example of realtime CATHODE performance metrics.

The updates to Viking: Battle for Asgard's engine were detailed in a talk by Clive Gratton, Alien: Isolation's lead programmer, where he explained how Viking's engine was reworked to become Cathode. Aside from the new features added to the engine such as the largely publicised deferred rendering, behind-the-scenes a number of new tools were created to use with the engine, the main tool being the Cathode Scripting system for the Creative Assembly Game Editor (CAGE). This editor was similar to the blueprint system found in Unreal Engine 4 and allowed programmers to easily script elements of the game through a custom set of nodes.
CATHODE EDITOR

Another shot of the CATHODE script editor.

Clive spoke of issues faced in early development, particularly with developers creating elements of the game before the script editor was finished, which meant those elements then had to be remade when the editor was ready. This slowed development and meant a lot of early work was wasted. This could have later been why the game's story was majorly rewritten around a year before release, causing a lot of story elements to be scrapped. It could also have potentially occurred at the same time that the game switched from third to first person, dropping the name Alien Year Zero.

AI Behaviours

Alien behave compressed

The Xenomorph behaviour tree.

AI behaviours in Cathode were controlled by a series of behaviour trees, the goal of which was to allow designers to tweak behaviours easily when they wished to add new characters or pull specific character reactions to certain triggers. This dream ultimately didn't come true however as the behaviour trees for Alien: Isolation were incredibly complex and only the AI programmers were able to easily understand them.

The behaviour trees for Cathode were created within Brainiac Designer, an open source tool that utilised a plugin known internally as "LegendPlugin" (Legend being carried over in the toolchain from the internal codename for Viking). A recreation of LegendPlugin is publicly available which allows access to view and modify all of the behaviour trees within Alien: Isolation. There are around 14 main behaviour trees within the game files, spanning across 86 separate files. These behaviour trees link to characters through their configuration files, which also define other parameters such as locomotion modulation, capsule height, and peeking distance.

As well as the engine's behaviour tree system which formed the local behaviours of the AI, there was also a primary "stage manager" implemented for Alien: Isolation's Xenomorph. The stage manager fed information between the behaviour tree controlled characters, and a script-controlled "director" AI. This director, similar to that of Left 4 Dead, would monitor the player and alien at all times. Metrics were kept (known as gauges) which would monitor the amount of time that the player had spent in an encounter with the enemy (the Xenomorph). This director AI would make sure that encounters remained tense through something known specifically as the "menace gauge". If the menace gauge filled to maximum, the AI director would force the Xenomorph to go "backstage" (into the vents). Scripted searches were also implemented to the game to force NPCs to search around the player when in hiding for a set radius.

Particles/VFX and Collision

Ai gbuffer

TOP LEFT: Albedo, TOP RIGHT: Normal mapping, LOWER LEFT: Shininess, LOWER RIGHT: Fully-lit scene!

Cathode features two separate systems for handling particles and VFX. The engine's particle system ran as a separate render pass, working in screen space to calculate 2D collisions with level geometry. This allowed particles to appear as if they reacted with the meshes in an environment without calculating full 3D high-poly collision. VFX was handled differently however, having access to a full high-poly collision map of the entire environment through Havok. VFX could then interact with the environment through this 3D collision map, allowing for electric bolts and other effects to bounce from wall to wall in a realistic way.

Collision for characters is also provided through Havok, however this operates on a lower poly collision mesh which is created over the higher poly baked collision and separated into a separate collision group. This allows character collision to be a cheaper calculation than handing every mesh in the environment. A character can only walk on a surface that is covered by the engine's navmesh (including the player), with the collision map being used to place their feet correctly.

Level Streaming

Cathode utilises asset streaming to allow for a low memory overhead when loading assets for a level. Each level in the engine is split into a series of zones, blocked by either visibility or a door. When reaching a door, the engine will pull in assets for the upcoming zone and push them to the renderer (shown in Alien: Isolation by a flashing door lock light).
Cathode Artist Profiler HQ

An example of the realtime artist profiler.

This was made possible by the engine's custom PAK/BIN format used for models and textures, in which all asset names and sizes are provided in a small manifest BIN file loaded at the start of the level, and all asset content is provided in a separate PAK archive at offsets specified through the BIN. Assets were organised in each PAK to be close to each-other relating to their zone and position in the level for faster loading from disk. For this reason, every level in Cathode requires a copy of its contained models and textures, bloating the final install size of any game.

As some streaming is done by view distance, on older platforms (notably the Xbox 360) it is possible in certain sections of Alien: Isolation to physically out-run the engine's load function. This error was rarely spotted due to the threat of running.

Alongside requiring all models/textures per level, the engine also includes all scripts and shaders used by the level in each. Support for streaming scripts was in the pipeline for the engine, but not completed before launch.

Sounds

CathodeAudioEngine

A screenshot of the Cathode audio scripter for the ENG_TowPlatform map - M33_Pt01_DIALOGUE.

Cathode used Wwise for sounds, and a custom complex multilayered sound system which mixed sound effects in real time during play to react to the current state of the environment around the player. This was primarily done by utilising six audio channels for each ambient soundtrack, being two channels each (left+right) for low, medium, and high tension. These channels would then be faded between at runtime to dynamically increase tension dependant on the game's state, while keeping the pace of the previous tension layer.
Wwise-Layer-Splitter

A graph showing Wwise mixing between the layers in the 6-channel audio file.

The Sound mixer would also create tension by lowering and raising the volume of different audio sets (such as player foley) to make players feel more vulnerable in certain situations. The idea was to mirror the player's focus to subconsciously draw attention to the threats without you noticing. In Alien: Isolation, the Alien's frontstage "AreaSweep" utilises the six channel method mentioned previously, and also produced the soundtrack on-the-fly from sets of audio stingers and premade sections, enhancing the tension of Alien encounters. Each map had a set of "flowgraphs" for mission sections and specific events within CAGE's audio editor.

Other Features

Emitters ReactorCore2

A screenshot in the level editor, showing sound nodes in Alien: Isolation's ENG_ReactorCore.

The Cathode Engine has a heavy use of a custom file format with the extension of PAK. While some PAK files are simply compiled source files with padding between (such as UI.PAK), others are more complex and require other manifest-type files to unpack them (see "Level Streaming"). Another common format is "BML" a compiled XML format which is used throughout the game to configure things such as weapon parameters, difficulty settings, character configurations, and more. A number of third party libraries are utilised for bug reporting, and also for engine functions such as physics. Havok provides collision and physics maps, with a custom dynamic blocker implementation added. Navmeshes are provided by an open source tool named Detour, with a custom wrapper.

The scripting system used within Cathode builds scripts to a level-specific "COMMANDS.PAK" file, which is a custom compiled script file utilised by the engine to populate levels with characters, animations, dialogue, and other mission related scripts. The file contains an archive of compiled scripts, along with common data from each packaged into array-like structures. This information is parsed by the engine at runtime and interpreted to call the required scripts per-entity in the game world.

Higher poly geometry is faked in the engine through a tessellation system which increases geometric complexity in the player's screen space. This works well on objects such as ribbed pipes which can be modelled as a cylinder but rendered as a high complexity object.

The engine has a "cover and traversal" system that is seemingly unused in the final version of Alien: Isolation, which was built for the early third person version of the game. This system has a set of rules for object heights and sizes to calculate if it can be traversed (climbed) or used as cover (the third person version of the game was very reliant on using sticky cover controls to hide from the Alien).

RAD Telemetry was utilised within the engine to allow for performance debugging. Telemetry is a performance monitoring suite that shows detailed thread process data with little overhead. The static libraries for the performance monitoring were left in the press copies of Alien: Isolation, however later removed in a post-launch update. As well as Telemetry to monitor performance, the engine utilised its own crash reporter to track crash issues in builds. Crash data was collected and sent back to a LevelDB database, with the open source JavaScript library "flotr2" being used to display graphs of debug JSON data that Cathode could produce.
CathodeGameIntro

The animated logo which originally played when booting Alien: Isolation.

Trivia

  • The PAK2 format created for Viking: Battle for Asgard was carried over to Cathode, meaning mod tools are compatible for some PAK files between the games.
  • Although being trademarked by SEGA, Cathode was never licensed out.
  • The renderer found within Cathode was upgraded to DX12 and repurposed for Halo Wars 2.
  • The deferred rendering that was added to Viking's engine for Isolation was first previewed at the 2012 "Develop Conference".
  • The initial greenlight demo of Alien: Isolation ran in-engine on an early version of Cathode.
  • The original main menu for Alien: Isolation (for pre-release demos) included a boot logo for Cathode, but this was cut from the retail version of the game. The boot logo can be seen at the top of this article.

Further Information

Further information about the engine can be found at the following links:

Community content is available under CC-BY-SA unless otherwise noted.