Proceduray is a novel engine with native support for procedural primitive ray tracing, designed to be a fair compromise between flexibility and productivity. Another objective of this work is to expand the discussion about host code in the RTX architecture.
Procedural Geometries in RTX
RTX also supports procedural geometry. This feature includes control of the intersection behavior, which directly impacts how much expressive a ray type can be. An immediate consequence is another level of flexibility available to applications. Additionally, procedural geometry imposes little resource maintenance in comparison with triangles. Device code is directly responsible for defining geometry, instead of just receiving it to process.
Finding authorial tools to work with procedural geometry in this con- text is not possible, however. Working directly with the RTX runtime is not a very productive option, since it lacks high-level abstractions, usually available in engines. A challenge that emerges from this discussion is how to deal with procedural geometry inherent flexibility and be productive at the same time.
Our engine is capable of rendering complex procedural geometries in real-time such as fractals. Examples of fractals that can be visualized in 3D include Julia sets and Mandelbulb.
Mandelbulb is a 3D fractal, constructed recently by Daniel White and Paul Nylander. They considered the geometrical properties of the complex numbers (multiplication is related to rotation and addition becomes a movement in a particular direction) to define a kind of “product” of elements in the 3D space. Using this “multiplication” (in 3D) in the polynomial formula f(z)=zn+c leads us to the Mandelbulb fractal.
We are using unbounding spheres to render the Mandelbulb, so we can control the iteration used to approximate the intersection of the given rays with the fractal. Video [mandelbulb_iterations] provides an animation of the Mandelbulb given by varying this parameter.
Julia Set 3D
An interesting class of Julia sets comes from exploring the convergence of the system given by the iterations of the quadratic function f(z)=z2+c. Specifically, a (filled-in) Julia set consists of the set of points z0 in the complexes/quaternions, where the sequence fn(z0) has a finite limit. Changing the constant c produces different Julia sets.
Inspired by the work and implementations of Quilez, we used the Proceduray flexibility to produce visualizations of the 3D Julia set. We generate visualizations based on cutting the 3D Julia set using a plane and varying the coefficient c in the function f(z)=z2+c.
Three dimensional scene composed of different objects.