This is a list of my publications and talks.

# Accelerated Stencil Shadow Extrusion via Vertex Blending

2003, FlipCode

- This article at FlipCode

This article describes how the vertex-blending stage of the hardware T&L can be abused to extrude shadow volumes. Shortly afterwards, NVIDIA silently removed the vertex-blending extension from their OpenGL drivers—such is life!

# Fast Environmental Reverb based on Feedback Delay Networks

2004, Game Programming Gems 5

- This article at GemsDB

This article is a sum-up of my experience trying to roll my own sound reverberation, based on the FDN algorithm (you can learn more about FDNs in general here and here). In the end, this work became the foundation for my AriesVerb VST plugin.

# Eliminate Surface Acne with Gradient Shadow Mapping

2005, ShaderX^{4}

- Slides based on this article at SlideShare (not done by me)

The original aim of this article is to combat erroneous self-shadowing, aka. surface acne, but in hindsight, the most important contribution made is the introduction of a *band of uncertainty* behind the first occluder, which naturally leads the way to VSM and other probabilistic shadow map techniques. However, I was so preoccupied with the self-shadowing that it didn’t occur to me that with the right choice of distribution, the shadow maps could be made pre-filterable. An additional aspect demonstrated by this article is the fact that surface acne is not a precision problem (it would happen even if there was infinite precision in the shadow map).

# Multisampling Extension for Gradient Shadow Maps

2006, ShaderX^{5 }

- Slides based on this article at SlideShare (not done by me)

After the ShaderX^{4} article was published I was asked how the technique could be combined with PCF filtering. It turns out that this is non-trivial, because a large PCF kernel intersects with the reconstructed occluder surface. This article shows how one can estimate the local tangent plane via a linear regression and adjust the depth bias of individual PCF samples to do this correctly. A similar approach is described by Isidoro, buried deep inside his GDC talk, estimating the local tangent plane from a screen-space Jacobian. And again, the same concept was re-invented recently as part of Wyman’s Adaptive Depth Bias.

# Normal Mapping without Precomputed Tangents

2006, ShaderX^{5}

- Slides based on this article at SlideShare (not done by me)
- Followup article here on my blog

This article describes how local tangent frames can be computed on the fly in the pixel shader without the need for tangent and/or bi-tangent vertex attributes. This may be useful for

- procedural geometry (when the tangent frame can’t be pre-computed)
- reduction of bandwidth and interpolator pressure (no need to pass tangents as vertex attributes down to the pixel shader)
- reduction in asset pipeline complexity (with every DCC has it’s own idea of what tangents are)

The technique was a little ahead of its time when it was initially published, due to being math-heavy. But as of 2018, this is no longer a problem. The algorithm was employed successfully to add normal maps to a game that originally shipped without them. It can also be back-ported to the CPU to yield an alternative way of pre-computing tangent frames. It has been adopted in the DirectXTK and many other projects around the globe.

# An Efficient and Physically Plausible Real Time Shading Model

2009, ShaderX^{7}

- Some followup discussion here on my blog
- Original Velvet Assassin shaders here on my blog

This article describes an aggressively optimized Cook-Torrance-lookalike shading model based on physical assumptions, that can handle a great variety of materials, both metallic and non-metallic, on a single texture atlas. This is mostly the model that shipped with Velvet Assassin, but due to reasons of scope, the article didn’t cover all aspects. The article also contains a little background information on physically based shading in general; the importance of linear lighting calculations and display gamma; advice for texture inputs with a small table of refractive indices and war-stories about the separation of the ambient term into diffuse and specular contributions.

While this shading model was originally designed for the XBox 360 and contemporary PCs as target platforms, as of 2016 it enjoys continued service as the PBS shading model for low-end mobile devices in the Unity Engine.

# Building a Dynamic Lighting Engine for Velvet Assassin

2009, Conference lecture at GDC Europe

- This presentation at GDC Vault

This talk is about the lessions learned of building an engine with 100% dynamic lighting, where lighting is a part of the gameplay. It’s about the organization of the spatial database from an object- and polygon soup, manual portalization, the different queries that need to be done for primary vs. secondary lights, and how this all adds up in the course of a single frame (and for the XBOX 360, how the load was balanced between threads). As a bonus, I explain how I did fog environment zones (the engine allowed for different fog settings in adjacent portal cells, where you could walk through seamlessly).

# An Approximation to the Chapman Grazing-Incidence Function for Atmospheric Scattering

2012, GPU Pro 3

This article develops an approximation to the Chapman function. This is the density integral along a ray in a spherically symmetric, exponentially decreasing atmosphere. Algorithms for atmospheric scattering mostly focus on the efficient evaluation or tabulation of this function. The proposed approximation is O(1), yet accurate enough for shading. This allows atmospheric scattering in real-time for a general view position (and variable atmospheric properties) without any pre-computation (neither look-up tables nor function fits are necessary in advance).

# Physically Based Shading in Real Time Rendering

2013, Conference lecture at FMX

- Slides here on site in this blog post

I gave an invited speech at the FMX conference as part of the real time rendering day. This presentation is rich in pictures and low in formulae. I tried to explain the most important concepts of physically based shading (RGB nonlinearity, energy conservation and glossiness, metals vs dielectrics, Fresnel reflectance and connection with ’specular color’) to an artist dominated audience.