GPU Voxelization

Started by
1 comment, last by JoeJ 5 years, 11 months ago
Hi
I'm currently reading up on GPU Voxelization as presented in the Voxel Cone Tracing paper & have a hard time understanding it. I feel like there's so much information missing. They talk about fixed-sized voxel grids all the time (e.g. 512^3) & how this voxel grid is supposed to cover the whole scene. What I can't seem to find in those papers is how this voxel grid is actually created ? The paper states that the voxel grid is implemented using an octree, and every child is 1/8th in size of the parent. So, how do they generate this octree big enough to cover the whole scene geometry ? How do I determine the origin of this octree ? Is a single voxel of a fixed size (e.g. 1x1x1) if the voxel grid has a fixed resolution like 512^3 ?
 
As far as I have understood it, the resolution of the voxel grid is a measure of detail, not of the actual size of the scene. Otherwise, there would be no guarantee that the whole scene is covered.
 
Am I misunderstanding the concept & all they really do is, is to create (basically) a 512^3 voxel grid around the camera & only the geometry inside of this volume is voxelized ?
Advertisement

There are 3 possibilities:

Use a single grid, e.g. 256^3, and live with the limitation it covers only the scene near the camera. Other stuff can blend with baked GI or no GI at all or whatever.

Use nested grids, e.g. 256^3 * 4, each having twice the resolution. Similar to mipmaps or terrain clip maps. The grids can move with the camera, largest one may large enough to cover the entire scene so no need to move. Larger levels could also represent only the static parts of the scene, so only the part of the volume scrolling in has to be generated per frame.

Using an Octree. In Crassins paper he uses 3x3x3 bricks which allows hardware filtering of a 2x2x2 blocks. Requires less memory but is (much) more expensive to build and trace. I don't think there is a game out that uses octree, but i would not reject the idea. Larger brick sizes could eventually make sense.

Generation on GPU: https://developer.nvidia.com/content/basics-gpu-voxelization

Nice thread with details about performance (see profiler numbers in screenshots): https://www.gamedev.net/forums/topic/696476-implement-and-understand-voxel-cone-tracing/?page=3

 

 

 

This topic is closed to new replies.

Advertisement