## 3 Method  
Another way to speed up the triangularization process is to apply a variant of ray marching called sphere tracing (described by [PERSON] (1965); [PERSON] (1965)). Note that sphere tracing is originally a 3D rendering scheme. However, we repurpose it here for polygonization. The basic idea is to define a ray and move along its direction until we find the intersection with the shape or exit the rendering volume. In sphere tracing, the marching step is set to be equal to the (estimated) distance of the current point to the shape. This approach greatly speeds up the process of finding the intersection. However, unlike in the ray marching-based rendering of images, we do not stop the marching process at the surface. The marching along the ray in continued (starting at the next cell along the direction of the ray) until the end of the polygonization volume is reached. Let us call this method **gridhopping**. This process enables us to efficiently isolate the \(O(N^{2})\) cells that contain the surface of the shape: we present theoretical and experimental evidence that this method extracts a triangle mesh from a signed distance bound in \(O(N^{2}\log N)\) steps for a grid with \(N^{3}\) cells. Note that this is a significant speed improvement over the basic approach that analyzes each of the \(N^{3}\) cells, leading to \(O(N^{3})\) complexity. Without loss of generality, we assume that our polygonization volume is a unit cube centered at the origin. The grid resolution is specified by \(N\): there are \(N^{3}\) cubic cells in the grid, each with a volume equal to \(\frac{1}{N^{3}}\). Each cell is assigned a triplet of integers \((i,j,k)\), with \(i,j,k\in\{0,1,2,\ldots,N-1\}\). The centroids of the cells are computed according to the following rules:  
\[ \begin{split} x_{i}&=-\frac{1}{2}+\frac{1}{2N}+ \frac{i}{N}\\ y_{j}&=-\frac{1}{2}+\frac{1}{2N}+\frac{j}{N}\\ z_{k}&=-\frac{1}{2}+\frac{1}{2N}+\frac{k}{N}\end{split}  \tag{1}\]  
A total of \(N^{2}\) rays are cast in the \(+z\) direction from the plane \(z=-0.5+\frac{1}{2N}\). Such rays have the following vector parameterization for \(\lambda\geq 0\):  
\[R_{ij}\ \ \ldots\ \ \mathbf{r}=\mathbf{o}_{ij}+\lambda\mathbf{d} \tag{2}\]  
where \(\mathbf{o}_{ij}=(x_{i},y_{j},-0.5+\frac{1}{2N})^{T}\) is the origin of ray \(R_{ij}\) and \(\mathbf{d}=(0,0,1)^{T}\) is its direction. The \((x_{i},y_{j})\) pairs (\(N^{2}\) of them) are computed according to Equation (1). We move along each ray using the ray marching (sphere tracing) [PERSON] (1965); [PERSON] (1965) method. If the polygonization volume contains a shape \(S\) described by its signed distance bound \(f_{S}\), the following iteration describes this process:  
\[\mathbf{r}_{n+1}=\mathbf{r}_{n}+|f_{S}(\mathbf{r}_{n})|\mathbf{d} \tag{3}\]The iteration starts at \(\mathbf{r}_{0}=\mathbf{o}_{ij}\) and continues until \(|f_{S}(\mathbf{r}_{n})|\) is sufficiently small (indicating we are very close to the surface of \(S\), by definition of \(f_{S}\)). In our case, we are only interested in moving close enough to the surface to determine the \((i,j,k)\) triplet determining the cell. Simple algebra shows that a cell possibly intersects the surface of \(S\), and we have to call it a polygonization routine if the distance \(|f_{S}|\) is less than or equal to  
\[\sqrt{\left(\frac{1}{2N}\right)^{2}+\left(\frac{1}{2N}\right)^{2}+\left(\frac{ 1}{N}\right)^{2}}=\frac{\sqrt{6}}{2N} \tag{4}\]  
The pseudocode in Algorithm 1 contains the details, and Figure 1 provides a visual summary/illustration.