A method for ray casting implicit surfaces, defined with procedural noise functions, is presented. The method is robust in that it is able to guarantee correct intersections at all image pixels. This robustness comes from the use of an affine arithmetic representation for the quantity that expresses the variation of the implicit function along a ray. Affine arithmetic provides a bounding interval estimate which is tighter than the interval estimates returned by conventional interval arithmetic. Our ray casting method is also efficient due to a previously proposed modification in the data structure used to hold affine arithmetic quantities. This modified data structure ultimately leads to a reduced affine arithmetic model. We show that such a reduced affine arithmetic model is able to retain all the tight estimation capabilities of standard affine arithmetic, in the context of ray casting implicit procedural noise functions, while being faster to compute and more efficient to store. We also show that, without this reduced model, affine arithmetic would not have any advantage over the more conventional interval arithmetic for ray casting the class of implicit procedural surfaces that we are interested in visualising.
This paper was initially written as a technical report CS-05-04 for the Department of Computer Science, The University of Sheffield. The paper underwent a major rewrite to increase its clarity and has been accepted for publication in The Visual Computer. The final paper is available at www.springerlink.com. A draft version of the paper is available below. Important Notice: An error was made in Section 4.2 of the paper. Thanks go to Aaron Knoll for finding this out. The correction has been inserted in the draft paper made available here.
PDF format (218 K) (raycastvisual.pdf)
Here are the animations of the three basic procedural noise functions that are mentioned in the paper. All animations use three layers of the same noise superimposed over a spherical seed surface. The animations can be visualised as an infinite cycle by turning on looping in the movie viewer.
A Perlin gradient noise using quintic hermite polynomial interpolants. | |
A sparse convolution noise with two sparse nodes per cubic lattice cell and using for the kernel function the same quintic hermite polynomial as the previous example. | |
A cellular noise generated from the distance function F1 to the nearest node. The nodes obey a Poisson distribution with an average of two nodes per cubic lattice cell. |