This is a list of my pub­li­ca­tions and talks.

Accelerated Stencil Shadow Extrusion via Vertex Blending
2003, FlipCode

This arti­cle describes how the ver­tex-blend­ing stage of the hard­ware T&L can be abused to extrude shad­ow vol­umes. Short­ly after­wards, NVIDIA silent­ly removed the ver­tex-blend­ing exten­sion from their OpenGL drivers—such is life!

Fast Environmental Reverb based on Feedback Delay Networks
2004, Game Programming Gems 5

This arti­cle is a sum-up of my expe­ri­ence try­ing to roll my own sound rever­ber­a­tion, based on the FDN algo­rithm (you can learn more about FDNs in gen­er­al here and here). In the end, this work became the foun­da­tion for my AriesVerb VST plu­g­in.

Eliminate Surface Acne with Gradient Shadow Mapping
2005, ShaderX4

  • Slides based on this arti­cle at SlideShare (not done by me)

The orig­i­nal aim of this arti­cle is to com­bat erro­neous self-shad­ow­ing, aka. sur­face acne, but in hind­sight, the most impor­tant con­tri­bu­tion made is the intro­duc­tion of a band of uncer­tain­ty behind the first occlud­er, which nat­u­ral­ly leads the way to VSM and oth­er prob­a­bilis­tic shad­ow map tech­niques. How­ev­er, I was so pre­oc­cu­pied with the self-shad­ow­ing that it didn’t occur to me that with the right choice of dis­tri­b­u­tion, the shad­ow maps could be made pre-fil­ter­able. An addi­tion­al aspect demon­strat­ed by this arti­cle is the fact that sur­face acne is not a pre­ci­sion prob­lem (it would hap­pen even if there was infi­nite pre­ci­sion in the shad­ow map).

Multisampling Extension for Gradient Shadow Maps
2006, ShaderX

  • Slides based on this arti­cle at SlideShare (not done by me)

After the ShaderX4 arti­cle was pub­lished I was asked how the tech­nique could be com­bined with PCF fil­ter­ing. It turns out that this is non-triv­ial, because a large PCF ker­nel inter­sects with the recon­struct­ed occlud­er sur­face. This arti­cle shows how one can esti­mate the local tan­gent plane via a lin­ear regres­sion and adjust the depth bias of indi­vid­ual PCF sam­ples to do this cor­rect­ly. A sim­i­lar approach is described by Isidoro, buried deep inside his GDC talk, esti­mat­ing the local tan­gent plane from a screen-space Jaco­bian. And again, the same con­cept was re-invent­ed recent­ly as part of Wyman’s Adap­tive Depth Bias.

Normal Mapping without Precomputed Tangents
2006, ShaderX5

  • Slides based on this arti­cle at SlideShare (not done by me)
  • Fol­lowup arti­cle here on my blog

This arti­cle describes how local tan­gent frames can be com­put­ed on the fly in the pix­el shad­er with­out the need for tan­gent and/or bi-tan­gent ver­tex attrib­ut­es. This may be use­ful for

  • pro­ce­dur­al geom­e­try (when the tan­gent frame can’t be pre-com­put­ed)
  • reduc­tion of band­width and inter­po­la­tor pres­sure (no need to pass tan­gents as ver­tex attrib­ut­es down to the pix­el shad­er)
  • reduc­tion in asset pipeline com­plex­i­ty (with every DCC has it’s own idea of what tan­gents are), or just plain work around bug­gy exporters.

The tech­nique was a lit­tle ahead of its time when it was ini­tial­ly pub­lished, due to being math-heavy. But as of 2018, this is no longer a prob­lem. The algo­rithm was employed suc­cess­ful­ly to add nor­mal maps to a game that orig­i­nal­ly shipped with­out them. It can also be back-port­ed to the CPU to yield an alter­na­tive way of pre-com­put­ing tan­gent frames. It has been adopt­ed in the Direc­tX­TK and many oth­er projects around the globe.

An Efficient and Physically Plausible Real Time Shading Model
2009, ShaderX7

  • Some fol­lowup dis­cus­sion here on my blog
  • Orig­i­nal Vel­vet Assas­sin shaders here on my blog

This arti­cle describes an aggres­sive­ly opti­mized Cook-Tor­rance-looka­like shad­ing mod­el based on phys­i­cal assump­tions, that can han­dle a great vari­ety of mate­ri­als, both metal­lic and non-metal­lic, on a sin­gle tex­ture atlas. This is most­ly the mod­el that shipped with Vel­vet Assas­sin, but due to rea­sons of scope, the arti­cle didn’t cov­er all aspects. The arti­cle also con­tains a lit­tle back­ground infor­ma­tion on phys­i­cal­ly based shad­ing in gen­er­al; the impor­tance of lin­ear light­ing cal­cu­la­tions and dis­play gam­ma; advice for tex­ture inputs with a small table of refrac­tive indices and war-sto­ries about the sep­a­ra­tion of the ambi­ent term into dif­fuse and spec­u­lar con­tri­bu­tions.
While this shad­ing mod­el was orig­i­nal­ly designed for the XBox 360 and con­tem­po­rary PCs as tar­get plat­forms, as of 2016 it enjoys con­tin­ued ser­vice as the PBS shad­ing mod­el for low-end mobile devices in the Uni­ty Engine.

Building a Dynamic Lighting Engine for Velvet Assassin
2009, Conference lecture at GDC Europe

This talk is about the les­sions learned of build­ing an engine with 100% dynam­ic light­ing, where light­ing is a part of the game­play. It’s about the orga­ni­za­tion of the spa­tial data­base from an object- and poly­gon soup, man­u­al por­tal­iza­tion, the dif­fer­ent queries that need to be done for pri­ma­ry vs. sec­ondary lights, and how this all adds up in the course of a sin­gle frame (and for the XBOX 360, how the load was bal­anced between threads). As a bonus, I explain how I did fog envi­ron­ment zones (the engine allowed for dif­fer­ent fog set­tings in adja­cent por­tal cells, where you could walk through seam­less­ly).

An Approximation to the Chapman Grazing-Incidence Function for Atmospheric Scattering
2012, GPU Pro 3

This arti­cle devel­ops an approx­i­ma­tion to the Chap­man func­tion. This is the den­si­ty inte­gral along a ray in a spher­i­cal­ly sym­met­ric, expo­nen­tial­ly decreas­ing atmos­phere. Algo­rithms for atmos­pher­ic scat­ter­ing most­ly focus on the effi­cient eval­u­a­tion or tab­u­la­tion of this func­tion. The pro­posed approx­i­ma­tion is O(1), yet accu­rate enough for shad­ing. This allows atmos­pher­ic scat­ter­ing in real-time for a gen­er­al view posi­tion (and vari­able atmos­pher­ic prop­er­ties) with­out any pre-com­pu­ta­tion (nei­ther look-up tables nor func­tion fits are nec­es­sary in advance).

Physically Based Shading in Real Time Rendering
2013, Conference lecture at FMX

I gave an invit­ed speech at the FMX con­fer­ence as part of the real time ren­der­ing day. This pre­sen­ta­tion is rich in pic­tures and low in for­mu­lae. I tried to explain the most impor­tant con­cepts of phys­i­cal­ly based shad­ing (RGB non­lin­ear­i­ty, ener­gy con­ser­va­tion and glossi­ness, met­als vs dielectrics, Fres­nel reflectance and con­nec­tion with ‘spec­u­lar col­or’) to an artist dom­i­nat­ed audi­ence.

Leave a Reply

Your email address will not be published.