“I need your help, Prometheus,” says the titan in Godfire: Rise of Prometheus, sending our hero into a world of hideous, mythical beasts and gruesome monsters to steal the Godfire Spark. And if you had Unreal Engine and a Snapdragon 805 commercial device with Adreno™ 420 GPU in your arsenal, you’d step in right alongside of him.

Vivid Games has released an updated version of its acclaimed title, enhanced for Snapdragon 805 and now available on Google Play. The enhanced update, developed in Unreal Engine, showcases hardware tessellation capabilities in the Adreno 420 GPU on top of the standard OpenGL ES 3.1 pipeline.

Comparison showcasing the tessellation with displacement mapping turned on (left-hand side) and off (right-hand side), visible on the ground.

Vivid modified Unreal Engine source code to implement several advanced graphics features specifically for the most powerful Snapdragon processors used in commercial devices like the Nexus 6. Here’s a look under the hood.

Graphics worth stealing fire for

Vivid is a prominent, independent European development studio in Poland. Since its founding in 2006, Vivid has built relationships in mobile and digital game markets and with animation studios such as Platige Image, with whom they collaborated on Godfire. The opportunity to work with Qualcomm Technologies Inc. (QTI) on the newly commercial Adreno 420 GPU allowed Vivid to implement several features of Open GL ES 3.1 and Android Extension Pack within Unreal Engine on mobile:

Tessellation with displacement mapping (GL_EXT_tessellation_shader) – Vivid added displacement maps for terrain and other inorganic props such as boulders and columns, with hard edges and relatively flat faces.

Geometry shader (GL_EXT_geometry_shader) – Vivid added this shader to compensate for the lack of wireframe render mode in Open GL ES.

Sub-pixel Morphological Antialiasing (SMAA) – This filter detects edges in a rendered image and classifies edge crossings into various shapes, using a precomputed table with a coverage value for each shape.

Depth of field, bloom, radial blur and distortion – The extra processing power of the Adreno 420 GPU allowed Vivid to use these Unreal Engine effects simultaneously.

Load-time optimizations – The Adreno 420 supports the GL_OES_get_program_binary extension, so Vivid implemented caching of binaries after a shader variation is compiled for the first time. This shortened the time it takes Unreal Engine to load all shader variations from ~95 seconds to ~18 seconds.

Unreal Engine is the go-to development environment for graphics this intensive, but some of these features were not yet available for mobile when Vivid first began working on the enhanced version of the game for Snapdragon 805. Vivid implemented them from the console branch of Unreal Engine to the mobile branch and enabled them on Snapdragon.

Graphics tools for development

Besides working in Unreal Engine, Vivid used several tools from QTI to get the most out of the Adreno 420’s DX11.2 programmable pipeline in this OpenGL ES application. Below are some that could also be useful for you:

The Adreno SDK contains all the tools, libraries, samples, documentation and tutorials for taking advantage of the Adreno GPU.

Adreno Profiler is a graphics profiling tool. It gave Vivid’s engineers real-time information on GPU operations while they were developing Godfire. It allowed them to dynamically analyze pieces of rendered frames and send shader changes to the test device in real time, shortening the development cycle.

Snapdragon Debugger for Visual Studio is an Android NDK Debugger designed to help ease the transition for developers like Vivid who are coming from console and PC game development into the world of building games for mobile. Working entirely in Visual Studio, the engineers are able to debug native C code in real time on an Android device connected to their PC.

These tools facilitate graphics development on devices powered by Snapdragon.