Adjoint Nonlinear Ray Tracing
Arjun TehMatthew O'TooleIoannis Gkioulekas
ACM Trans. Graph. (2022)
teaser

Reconstructing and designing media with continuously-varying refractive index fields remains a challenging problem in computer graphics. A core difficulty in trying to tackle this inverse problem is that light travels inside such media along curves, rather than straight lines. Existing techniques for this problem make strong assumptions on the shape of the ray inside the medium, and thus limit themselves to media where the ray deflection is relatively small. More recently, differentiable rendering techniques have relaxed this limitation, by making it possible to differentiably simulate curved light paths. However, the automatic differentiation algorithms underlying these techniques use large amounts of memory, restricting existing differentiable rendering techniques to relatively small media and low spatial resolutions. We present a method for optimizing refractive index fields that both accounts for curved light paths and has a small, constant memory footprint. We use the adjoint state method to derive a set of equations for computing derivatives with respect to the refractive index field of optimization objectives that are subject to nonlinear ray tracing constraints. We additionally introduce discretization schemes to numerically evaluate these equations, without the need to store nonlinear ray trajectories in memory, significantly reducing the memory requirements of our algorithm. We use our technique to optimize high-resolution refractive index fields for a variety of applications, including creating different types of displays (multiview, lightfield, caustic), designing gradient-index optics, and reconstructing gas flows.

Arjun Teh, Matthew O'Toole, Ioannis Gkioulekas (2022). Adjoint Nonlinear Ray Tracing. ACM Trans. Graph..

@article{Teh:2022:ANRT,
author = {Arjun Teh and Matthew O'Toole and Ioannis Gkioulekas},
title = {Adjoint Nonlinear Ray Tracing},
journal = {ACM Trans. Graph.},
year = {2022},
publisher = {ACM},
address = {New York, NY, USA},
}