Gradient town
seen from Sweden
seen from United States
seen from Netherlands
seen from United States

seen from Türkiye
seen from Türkiye
seen from United States
seen from Ukraine
seen from Ukraine
seen from United States
seen from China
seen from Guatemala
seen from United States

seen from China

seen from Malaysia
seen from Australia
seen from China

seen from Germany

seen from Malaysia
seen from United States
Gradient town
Testing the performance of different octree variants😄
New variants will be included in the next update of Gimme DOTS Geometry (update already scheduled)
A multiresolution octree has several interrelated advantages over a uniform voxel grid when it comes to drawing isosurfaces. These two images (of the same model) show a situation that becomes much easier to render with a multiresolution framework: a case where you have an object with a relatively small geometric detail.
“View Dependent Octree Refinement”
Testing stage during BTC’s development: Bézier curves set subdivision based on input RGB & depth sequences.
Testing stage during BTC’s development: octree structural subdivision + binding Bézier curves set subdivision + Free roam camera.
Testing stage during BTC’s development: octree structural displacement.
No more Positions, and a few more Chunks
I'm going to go ahead and start this post exactly like I started my previous one.
Since my previous post, I've been working on:
Scaling down the overall memory usage of a voxel by removing the position, and replacing it with a function in the octree currently holding said voxel. This obviously meant that I had to rewrite a lot of my code, in order to manipulate voxels in any way. Among the changes lies a getPosition(index) function in the octree used to store the voxels. It looks something like this: x = (index%size%(size*size)); y = (index - x)/size%size; z = (index - x - size*y)/(size*size);
Finding new and exciting ways to divide the map =). Not really... Chunks are just convenient since they allow us to look at a set of voxels (at the moment 64*64*64), without having to worry about the rest of the map. They also allow us to easily send a certain set of voxels over the network. Basically, I moved the voxel octrees from the map object, to the chunk object, and created a vector of chunks within the map object. It's essentially just another layer of division. The most significant difference between a voxel octree, and a chunk is how a chunk stores it's position. It's just like a voxel in that regard. With an index, and a getPosition(index) function.
Bug fixing and optimizing(?)......... As expected, the mesher didn't like all of these changes, and I noticed a few bugs while I made said changes, and rewrote the mesher. Also, The division and distribution of voxels across child-trees is now faster, thanks to the lack of a position, since I had to figure out how to correctly distribute the voxels without checking for AABB-AABB intersection. By the way... Don't ever check for AABB-AABB intersection if you're going to populate an octree. Instead, iterate through all of the voxels for each eighth, and add them to their corresponding child-tree. for (x = 0, y = 0, z = 0; x < size/2; ++x) for (y = 0, z = 0; y < size/2; ++y) for (z = 0; z < size/2; ++z) children[0]->voxels.push_back(getVoxel(x, y, z));
An image showing off the chunks: