0

I implemented a data structure for material removal simulation based on a sparxe voxel octree (SVO). Now, I want to visualize the result. Therefore, I need to triangulate my sparse voxel octree.

How can I do that? Can you recommend any fast algorithms for that?

A standard voxel model can be triangulated by using marching cube (MC). But as far as I see, I cannot adapt this algorithm for an SVO. The MC algorithm is based on the 15 base patterns which are used to generate the triangles (with the help of a LUT for better performance). But these patterns doesn't work anymore for SVO voxels, because these voxels can have different sizes depending in the local resolution in the tree branch.

So, how do other people triangulate their SVO?

Gilad Pellaeon
  • 111
  • 1
  • 1
  • 11
  • This is absolutely too vague to answer. If a dense voxel field can be quite successfully meshed just by bruteforcing, an SVO should only be faster than that. You need to describe your particular situation better, what issues you found when you implemented the naive approach etc. – Bartek Banachewicz Feb 10 '21 at 09:26
  • @BartekBanachewicz As I wrote: the MC algorithm makes no sense for an SVO at all. It can't be adapted easily to an SVO structure. I also searched for research papers, but I found none which describes the triangulating of an SVO, only GPU-based solutions which relys on raycasting. What clarification do you need? I have an SVO implementations. A voxel consists of a center, a half length for the edges and 0..8 children. All is ordered in an octree starting with a root. I want to have a triangle mesh of the volumen surface. Creating triangles for every solid octant is possible, but really slow. – Gilad Pellaeon Feb 10 '21 at 11:28

1 Answers1

0

There's an algorithm called the "Transvoxel Algorithm" you can use with marching cubes. I won't post the details here but you can google it. It does some internal voxel tessellation. I have my own tessellation algorithm which is somewhat simplified in that it has far few cases, however both these only allow for a single level of resolution change at a time.

Your best bet may be to not use MC at all and go to surface nets. The main down side is that it can generate non-manifold geometry (if that's something you care about). There are several other variations of that such as "dual contouring" you might want to look into also. Dual contouring allows for sharp corners but requires Hermite data. I believe there is also a manifold version of dual contouring and/or surface nets at the cost of some added complexity.

In any case all this stuff will work with a voxel octree, but it does require some work.