Flintlock Marmoset Render B

Interior view of the Piper PA-18 Super Cub.

Flintlock Marmoset Render B

Interior view of the Piper PA-28 Cherokee.

Flintlock Marmoset Render B

Interior view of the Piper PA-28 Cherokee.

Flintlock Marmoset Render B

Interior view of the Piper PA-28 Cherokee.

Flintlock Marmoset Render B

Interior view of the Piper PA-28 Cherokee.

Flintlock Marmoset Render B

Exterior view of the Piper PA-28 Cherokee.

Flintlock Marmoset Render B

Exterior view of the Piper PA-28 Cherokee.

Flintlock Marmoset Render B

Exterior view of the Piper PA-28 Cherokee.

Flintlock Marmoset Render B

Interior view of the Piper PA-28 Cherokee.

Flintlock Marmoset Render B

Interior view of the Piper PA-28 Cherokee.

Flintlock Marmoset Render B

Exterior view of the Piper PA-28 Cherokee.

Flintlock Marmoset Render B

Interior view of the Piper PA-28 Cherokee.

Flintlock Marmoset Render B

Interior view of the Piper PA-28 Cherokee.

Flintlock Marmoset Render B

Interior view of the Piper PA-28 Cherokee.

Flintlock Marmoset Render B

Interior view of the Piper PA-18 Super Cub.

↓ View Description

Professional Work (Dovetail Games)
Engine: In-house Technology
Platform: PC, DX11
In 2014, Dovetail Games acquired the rights to develop and publish new titles using Microsoft’s flight simulation technology. Since then, Dovetail Games has been redeveloping the technology into its own proprietary engine by embedding many next-gen mechanics into the codebase. The first of the changes was to upgrade the engine to use DirectX 11 and run in 64-bit mode.

My contributions to this project were very varied, spanning right across the art production spectrum. This page will focus purely on rendering, and omit many of my other contributions such as managing outsourcers and developing art production tools.

I was the sole technical artist, and spent much time collaborating with both in-house and third-party programmers, working to achieve the simulator’s final aesthetic. I focused extensively on implementing many advanced rendering mechanisms into our proprietary technology, including the following:

  • Atmospheric Light Scattering (Rayleigh & Mie scattering)
  • Screen-space Ambient Occlusion
  • Physically-based Rendering
  • Image-based Lighting
  • Normal-mapped Terrain
  • High Dynamic Range Lighting & Adaptive Luminance
  • Bloom
  • Omni Lighting
Atmospheric Light Scattering
This turned out to be a real beast to tame. Before getting started, I read several ACM SIGGRAPH papers and theses on Light Scattering theory and implementation.

The formulae involved in approximating real-life Rayleigh and Mie Scattering are complex and very sensitive to a range of factors. Due to the complexity of the algorithm, most of the calculations are performed in vertex shader functions, which are then passed into a pixel shader for Gouraud Interpolation.

To avoid floating-point imprecision issues, Flight School has no concept of camera position in world-space. Instead of the camera moving, it is Planet Earth that moves. Nuances such as this produced a significant challenge in getting the light scattering to operate correctly. I was responsible for solving these problems.

Physically-based Rendering & Image-based Lighting
Part of the reason Dovetail Games was so keen to hire me was due to my extensive knowledge of Physically-Based Rendering (PBR) shaders. It should be no surprise therefore that I contributed heavily to this area.

I developed all the HLSL code used in Flight School while working closely with a rendering engineer. The engineer focused on getting the C++ codebase ready for PBR implementation and our efforts met somewhere in the middle.

The model used for PBR was the Cook-Torrance Bidirectional Reflectance Distribution Function (BRDF) with some modifications made here and there to integrate Image-Based Lighting.

I found it necessary to add an alternative to the standard base reflectivity calculation. Often, either a texture or a uniform floating-point value is supplied to represent the specularity of a material using a metalness map. The albedo function’s returned colour is then dampened if necessary such that the total reflected energy obeys the First Law of Thermodynamics (conservation of energy within an isolated system).

I instead opted to derive the base reflectivity from the albedo function’s returned colour. The shader assumes the total reflected energy is equal to that received, and will effectively ‘balance the books’ by producing a base reflectivity consistent with the First Law of Thermodynamics. This allows the artists to have a reasonable degree of control over an asset’s material characteristics while saving the GPU from having to store and access an additional map (per material).

High Dynamic Range Lighting & Adaptive Luminance
The original tonemapper function we received from an outsourced developer did not achieve the results we wanted. Everything appeared washed-out and lacked contrast.

I redeveloped the tonemapper based upon a modified version of the Hable filimic algorithm.

I also impacted how the Adaptive Luminance (AL) worked by improving its results across a wider range of lighting scenarios. The AL system produces a camera exposure value by calculating an average luminance value in a compute shader. The original AL value derived from the mean average of all pixels on screen meshed with some human colour perception biasing. I developed a more context-sensitive approach, producing more consistent results across various lighting conditions.