In summery, I developed the following features to reach the look we were after.
- Look development on all environments.
- Tuning textures, assets, postfx, FX, anything needed to achieve the final look.
- Tonemapping shader.
- Atmospheric Scattering shader that could change dynamically based on time of day.
- A wide variety of surface shaders (rimlighting, dust shading, dust storm, skin shader, threshold-based blend shader, particle lighting shader, and more)
- Developed postFX shaders including Dual tint, vignette, depth LUT and Aparture Flare.
- Dynamic weather particle effects (sandstorm rolling in)
In addition I worked with another rendering engineer to implement/improve the following:
- changed the UDK to render to a FP 16 render buffer, completely linear rendering pipeline.
- Improved exposure controls in the UDK by using the linear result.
- Added primary and secondary bounce intensity features to the UDK so the artist could control the bounce energy.
- Improved the bloom functionality so it used the linear result for the cutoff thresholds, also added anamorphic distortion to bloom.
Screenshot before I started working on the level:
Screenshots after my look development pass.
Sandstorms and Atmospheric Scattering.
The images below demonstrate different stages of a sandstorm that can dynamically change based on the angle of the sun and density of the atmosphere. Another requirement was to have a minimal impact on overdraw and fill. I used a method similar to Rayleigh scattering. My approach was to use 2 shaders, a screen space post-effect, and a surface shader for the skybox. The shader was based on these papers:
http://http.developer.nvidia.com/GPUGems3/gpugems3_ch13.html
http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter16.html
To sell the drifts of sand along the ground, another postfx was utilized that essentially modulated a heightfog with noise texture. Lastly, a blowing sand effect was created in Cascade which was optimized to minimize overdraw.
I set up a some kismet and matinee that allowed time varying parameters (sun angle and atmosphere density) to drive everything.
The image below demonstrate different stages of the sandstorm. Visit my demoreel page to watch it in motion.
Texture blending.
I developed a texture blending shader that allows for a lot of detail without using high resolution blend textures. The blend texture is a 128x128 greyscale map (optionally you can also use vertex color). With this technique the brick transitions to the plaster naturally and with a lot more detail.
Gamma correction and Filmic Tone Mapping.
I implemented my own flavor of tone mapping based on work done by John Hable ( http://filmicgames.com/ ) and HP Duiker ( http://duikerresearch.com/ ) . Below is an example of the effects of tone mapping on the same scene.
Before
After