Bringing Linearly Transformed Cosines to Anisotropic GGX

Aakash KT1, Eric Heitz2, Jonathan Dupuy2 and P. J. Narayanan1
1CVIT, KCIS, IIIT Hyderabad
2 Unity Technologies

ACM SIGGRAPH Symposium on Interactive 3D Graphics and Games (I3D) 2022


Linearly Transformed Cosines (LTCs) are a family of distributions that are used for real-time area-light shading thanks to their analytic integration properties. Modern game engines use an LTC approximation of the ubiquitous GGX model, but currently this approximation only exists for isotropic GGX and thus anisotropic GGX is not supported. While the higher dimensionality presents a challenge in itself, we show that several additional problems arise when fitting, post-processing, storing, and interpolating LTCs in the anisotropic case. Each of these operations must be done carefully to avoid rendering artifacts. We find robust solutions for each operation by introducing and exploiting invariance properties of LTCs. As a result, we obtain a small 84 look-up table that provides a plausible and artifact-free LTC approximation to anisotropic GGX and brings it to real-time area-light shading.

[PDF] [Supp] [Code] [Slides]

Look up tables (LUTs)

Below you can find 8x8x8x8 look up tables for two different parameterizations.

Parameterization Numpy C++ float array
αx , αy , θ , φ LUT.npy LUT.cpp
α , λ , θ , φ LUT.npy LUT.cpp

Storing LUTs in a texture

Use with hardware and software interpolation. Three sets of 8x8x64 textures.

Fetching LTC matrices

Pseudocode for fetching LTC matrices for both LUT parameterizations is given below.

Parameterization: αx , αy , θ , φ

Parameterization: α , λ , θ , φ

Thanks to Thomas Deliot for making a prototype in the Unity engine and to Stephen Hill for his feedback.
Aakash KT was funded by the "Kohli Fellowhip" of KCIS.