-
Notifications
You must be signed in to change notification settings - Fork 1
Description
Hello again.
I have been getting back into my volume based rendering in rust and wanted to discuss some of the research with you.
Bakers
I have been looking at other surfacing algorithms and some of which I think we can implement into the bakers.
- Marching Tetrahedra
- Similar to marching cubes but meshes are always manifold
- Uses about 4x the number of verticies
- Transvoxel
- This generates smooth meshes with LOD so that further aways vertices are further apart
- This might be nice to add for non-block like terrain
- Dual marching cubes
- Like marching cubes but creates fewer vertices on the planes then at the corners
Links:
- voxel tools go code for a similar project to this (includes transvoxel)
- smooth terrain blog blog post on making smooth terrain from volume data (includes comparison of different surfacing methods)
- voxel gfx Page that explains how to implement dual marching cubes as well as other aspects like trilinear shaders and octtrees for the LOD
Chunk Trees
With regards to a tree structure to hold chunks the most interesting one I've seen is this one by voxel gfx it holds the chunks in an octtree where each level represents higher detail. This has the nice benefit of allowing LODS to page in and out
On a more general structure I think we could use a method like dual grid to help work out the neighbors in a chunk tree
Density
Currently the chunks are all integer values on a grid. But it might be more useful to represent them as densities on a grid. There are a few benefits to this:
- Early exit
- A density map is meshed by finding the surface of an isovalue, if the density at a voxel is very far away from this isovalue we could assume that neighboring voxels are also likely to be far away from the isosurface and can be skipped.
- Interpolation
- We can interpolate values off of the grid points, this could be useful for working out arbitary LOD levels from the same source data
- Gradients
- We can work out gradients. This can be used for the normal calculations and can be used for more complex meshing algorithms like Dual Contours that require gradients.