Building an Orthonormal Basis, Revisited

Tom Duff, James Burgess, Per Christensen, Christophe Hery, Andrew Kensler, Max Liani, and Ryusuke Villemin

Abstract: Frisvad [2012b] describes a widely-used computational method for efficiently augmenting a given single unit vector with two other vectors to produce an orthonormal frame in three dimensions, a useful operation for any physically based renderer. However, the implementation has a precision problem: as the z component of the input vector approaches -1, floating point cancellation causes the frame to lose all precision. This paper introduces a solution to the precision problem and shows how to implement the resulting function in C++ with performance comparable to the original.

Published in: Journal of Computer Graphics Techniques, volume 6, number 1, 2017.

One-line summary: Efficient method to generate a highly accurate orthonormal basis from a given unit vector.

Download paper here: paper.pdf.


Back to Per's publication page.