Volume rendering with Voxels, Splats, Marching cubes and points

Hey guys, so over the last few weeks I have been working on some volume rendering techniques in UE4.

In here I will discuss the differences in performance and quality that I was able to achieve with different rendering techniques.

Also to note, the game I will primarily be using the volume rendering in is an MMO and ultimately the technique I decide to use the most will need to be very bandwidth/data efficient.

The reason I started looking into volume rendering: As my game world is infinite* in size, I needed a way to procedural generate content. So for creating planetary terrain, because I wanted caves and overhangs, I needed a volumetric surface.

I will try to post some new media here everyday and report my progress. For now I will list my progress with each technique.

Marching Cubes and it’s varients (DMC, CMS):
This one is almost a no brainer for terrain, I have a couple very basic implementations of this.
Resources I found very useful:

https://github.com/azarus/TerrainGenerator

,

http://ngildea.blogspot.com/

Point rendering(Sprites and instancing):
This one is in its early stages, needs more work.

Surface splatting:
This one works the best in terms of performance right now for detailed rendering.

Voxels(Octree):
This one was the easiest and it is also the one I’ve been spending the most time optimizing the last few days.
This is also the one I will probably post the most about.

Alright I’ll edit this later to make it cleaner and post some vids, I’m in programming mode right now.

Oh one more thing, here is a picture of some splatting. The mesh is incomplete because of a failed conversion from the sample mesh, it’s easy to fix but I wont be doing that for a few days.

very cool, keep us updated!

So I took a couple days off, so no pictures today :(. However I have made an update today with the data size of the voxels.

I went from 400mb uncomressed for 10million voxels down to 9mb uncompressed. This is my first time working with volume rendering, so I’m catching silly mistakes and making huge improvements. Now I’m able to edit large grids of voxels in real time with negligible impact on frame rate. I expect I can still make quite a few improvements to the voxel technique.

Anyway, I’ll upload some vids ASAP.

Edit: And now I have 10 million voxels compressed into 4kb… Space and bandwidth issues resolved. Now I will continue working on rendering optimizations. Already I’m seeing speeds of over 120 fps working with relatively large data sets. Hopefully tomorrow I can show a video of this in action.

Sooooo currently I cannot render over 3 million voxels on my 960m with a reasonable frame rate. While it may work great for a minecraft clone, it wont work in its current state for high resolution volumes. I’ve tried CPU ray casting and instancing so far, I will give GPU raycasting a go first before I give up on voxels for detailed volumes.

I think I’ve settled on splats for the more detailed volumes. Hopefully I’ll have a comparison soon. For now a video showing a digging of a cave(some lighting and collision) on a 1 million filled voxel grid. The video quality sucks, not sure what happened there… anyway the FPS does not drop below 120fps.
- YouTube Video is really messed up :frowning:

Any updates on your progress splatting? I’ve been looking into it for some kinect visualization stuff, but don’t really know where to begin.

Sorry for the delay, I have been away for a couple months. I’ve made some minor improvements with splatting but nothing big yet, for now this is on hold as I’m working on something else at the moment, but I’ll come back to this I’m sure.

Good luck with your project, I recommend you check out Potree’s Splatting techniques, you would have to do some googling for it.