Earth Curvature Tool ― This is a tool I created to deform airports according to the Earth's spheroidal curvature. This example is exaggerated for effect.
In 2014, Dovetail Games acquired the rights to develop and publish new titles using Microsoft’s flight simulation technology. Since then, Dovetail Games has redeveloped the technology into its own proprietary engine by incorporating next-gen mechanics into the codebase and implementing art assets to a high visual standard. The first of the changes was to upgrade the engine to use DirectX 11 and run in 64-bit mode. The first generation of improvements manifested in a product called Flight School.
Flight School was a project preceding Dovetail Games’ more comprehensive product, Flight Sim World.
My contributions to Flight School were extensive and varied, spanning right across the art/graphics spectrum. I was responsible for all areas of technical art, spending much time developing art production tools in addition to working with graphics programmers on shader code.
As the project’s sole technical artist, I spent much time collaborating with 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
- Omni Lighting
Atmospheric Light Scattering
This turned out to be a real beast to tame. To prepare for this task, I studied relevant ACM SIGGRAPH publications 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 had no concept of camera position in world-space. Instead of the camera moving, it was Planet Earth that moved. These nuances added to the challenge in getting the light scattering to operate correctly. I was responsible for solving these problems.
Physically-based Rendering & Image-based Lighting
Dovetail Games originally approached me because of my strong knowledge of Physically-Based Rendering (PBR) shaders.
I developed all the HLSL code used in Flight School while working closely with a rendering engineer who modified the C++ codebase.
The model used for PBR was the Cook-Torrance Bidirectional Reflectance Distribution Function (BRDF) with modifications made to integrate Image-Based Lighting.
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 Filmic algorithm.
I also modified the approach to Adaptive Luminance (AL) to improve its performance 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, which produced more consistent results across various lighting conditions.
Flight Sim World
Flight Sim World is powered by a new generation of Dovetail Games’ engine, following on from Flight School. While Flight School provides instruction and simulation built around general aviation and light aircraft, Flight Sim World supports an extensive range of air vessels, including rotorcraft, jet aircraft, propeller aircraft, and turboprop aircraft of general, military, and commercial classes. The engine comes with an SDK, allowing third-party companies to develop content. It has been afforded many new visual features such as an advanced weather engine consisting of both in-house and third-party solutions.
For Flight Sim World, I took on the official title of Lead Artist. This was supplemental to my role of Technical Artist. Instead of directly implementing graphical code as I had for Flight School, I transitioned to more of an intermediary role in this respect, exploring ideas/systems with programmers prior to (and during) implementation.
Again, my responsibilities for this project were extensive and varied.
I oversee the general art direction of Flight Sim World. This has involved cultivating a team of highly skilled artists and guiding them through the complex world of flight simulation; defining visual goals and project needs; managing in-house artists and remote contractors in addition to working alongside outsourcing partners; creating benchmark artwork to showcase Flight Sim World’s abilities; developing new art workflows.
I have led the development of eight aircraft to date.
SDK Art Tools
I wrote several art tools for Flight Sim World’s SDK using a combination of Python (computation) and MAXScript (front-end).
The Earth Curvature Tool is an example of this. Its job is to translate an airport’s vertices (in Euclidean world-space) such that they follow the Earth’s approximate curvature. This same approximation is used by the engine to generate procedural terrain. Consequently, my tool helps to achieve topographical consistency between airports and terrain. As the Earth is spheroidal rather than spherical, the tool will produce different results according to the latitude, longitude, and altitude of the airport.
Curved scenery and terrain is necessary to create a realistic representation of the world at height, but is useful for a less obvious reason also: without a curved world, artefacts would appear on the horizon where orthogonal lines converge.
In addition to the tools work, I authored the majority of Flight Sim World’s SDK documentation on art topics. This includes extensive coverage of PBR theory and implementation.
Advanced Weather Features
trueSKY is a volumetric cloud middleware solution offered by Simul and used as a base for Flight Sim World’s advanced weather engine. It was originally designed with first-person shooter style games in mind. Consequently, clouds looked great from below, but were sub-optimal for a flight simulator. I worked with a team of in-house graphics programmers alongside Simul for several months to create a weather engine that met our simulator’s needs. Bearing in mind that we could not achieve perfection because of performance limitations, the end result is visually stunning nonetheless.
One of the in-house contributions to the advanced weather engine, is the realtime raindrop effect. It works by treating raindrops as cells in a grid, which is generated by a compute shader. The grid is the compute shader’s main input and output, and is called recursively. In each cycle, a number of raindrops are created, deleted, or translated to neighbouring cells based upon physical forces and other simulation parameters. It is similar to Conway’s Game of Life. Further down the pipeline, the grid is used to generate a normal map whose X/Y axes describe a pixel offset from the frame-buffer (i.e. screen-space refraction). This normal map is projected onto an aircraft’s windshield to create refractive, moving water droplets. The compute shader also takes a world-space normal map as input; this is to know the direction the windshield faces for a given texel and infer the direction of physical forces (such as gravity or wind).
I provided artistic and design input to the graphics programmers throughout the development of the advanced weather engine from its inception through to implementation and testing.
This is one of several new features I suggested for the engine, and worked alongside a graphics programmer to implement it. The feature exploits some of the realtime raindrops’ code by generalising the screen-space refraction module. I authored a shattered glass texture set to simulate a bird strike event, and help test-out this new feature.
In the future, this effect can be used for many other phenomena including heat shimmer on jet engines.