my home page
fractals.3d.classic.software




I think I have implemented the algorithm as described in algorithm in all the raytracers I have implemented (see here or here), as well as in the voxel engines (like thes ones) and in pixel shader based volumetric viewers. For the case of raytracers it's quite easy to quickly have your fractals affected by nive shaders as global illumination or othes techniques because once you encapsulate the algorithm into a primitive, the raytracing engine just can operate on them as with any other primitive (as triangles or spheres).

Recently I also made experiments on quickly traversing the bounding box of the fractal based no in the potential, as I was, but in the distance estimation as described in the paper for Siggraph'89, with quite moderate speed improvements.

Another technique to speed up the rendering with a factor of 3 is to use SIMD instructions available in most moder processors to calculate for intersections at a time. If a raytracer supports casting packets of rays (2x2 for example), as mines do, the code for intersections and shading can easily be modified to handle for intersections a the same time. However the 4 rays do interesect in diferent points of the fractal, and this requere different amount of iterations. Thus, special code is needed to mask in and out results, what makes the overall performance not to be four times better than in the traditional implementation, but three times (what is not bad anyway). The idea can be used also for the 2D case, of course (as shown here).

With all these optimizations together, interactive framerates can be achieved in a raytracer runing into a dual core CPU at low resolutions (512x384). Good news is that since no acceleration structure is used for speed up (kd-tree and similars), the julia set can be morpher in realtime into another one for example.

Recently interactive rates have been also achieved by mapping all the algorithm into GPU with pixel shaders, but this is limited right now to images with the look and feel of the early 80's, with phong shading and shadows (as my first images where), cause there is no complete and versatile raytracer working only on CPU (specially because the small amount of memory on graphics boards - 512 Mbytes). However, other paradigms could be used making use of the GPU.

By the time I write this I allready started to move the algorithm into hardware (an FPGA), but I'm still not sure of the performance I will get.







iņigo quilez 2001-2005