MandelVR is a small toy project I have been working on over the last few months. It is a simple VR app which lets you move around a Mandelbrot set visualization. It is implemented as a Windows app running on SteamVR with (GPU-accelerated) Direct3D 12. One can use the VR controller’s pad to fly around and the A and B buttons to zoom in and out. It is quite a bit of fun to discover the Mandelbrot set in VR already, but it turns out there are a few things that could benefit from some more work to get them right:

  • MandelVR computes the height of the points on a regular grid. That is problematic because there a plenty of cliffs and ridges which do not align well with the grid. In those areas the 3D Mandelbrot mesh resembles a rocky up-and-down zig-zag landscape rather than the clean edge one usually can see in 2D visualizations. It is probably not too hard to fix this by having MandelVR compute the mesh on the peak points rather than strictly on the grid, but it would take a bit to get that right.
  • Direct3D and (and GPUs designed for 3D acceleration) use 32-bit floats as that is accurate enough for most realistic 3D sceneries. Of course the main thing one would want to do with a Mandelbrot set is to zoom in, so float32 arithemtic becomes too inaccuracte quickly. MandelVR uploads the whole mesh to the GPU’s VRAM in float32 accuracy, so the rendered visualization becomes wobbly and blurry at larger zoom levels. It is easy to avoid this problem by computing the original mesh with 64-bit floats, but one would need to put a bit of thought in how to dynamically update the float32 mesh for the GPU.
  • Finding the right level of detail is challenging as the number of vertices that need to be rendered differs quite a bit from location to location. Ideally, one would want to have something that adapts dynamically so one can achieve stable frame rates. That is again not too difficult to implement but one would probably need to test on a variety of GPUs to be sure it works well.

Anyways, I am planning to work on some of those issues over the next few months. The source code is available here. If you are interested in contributing or adding stuff, feel free to open an issue or drop me a line.