I'm going to begin actually implementing this technique now and I'll continue to provide updates on each step with some of my code. All coding is done in Directx11 with C++.
I'll start off by voxelizing my simple scene which consists of a plane for a floor, 3 walls and several spheres and cubes. There are only 3 models loaded into a single vertex buffer (cube, sphere, plane) with instances of the cube and sphere in the scene.
I'm pretty much going to follow the GPU Pro 3 example "Practical Binary Surface and Solid Voxelization with Direct3D 11" and I will use conservative surface voxelization as used in Crassin's OpenGL Insights chapter.
At the moment I will use three 3D Textures to store position (with the scene transformed to voxel space [0...1]), color (with opacity stored in the alpha float) and normals of each voxel. These will be format R8G8B8A8_UNORM, but I will work out later a more compact way of storing my voxels. I'm leaving out texture coordinates for the meanwhile and am going to just assign direct material colors to each instance to be voxelized.
I am going to use the compute shader to voxelize, because for some reason, I can't seem to get omsetrendertargetsandunorderedaccessviews to write to any buffer objects in the pixel shader.
For now, my lowest octree level will be 512x512x512 nodes - each pointing to bricks of 3x3x3 voxels. So there will be 513x513x513 voxels in a full grid - but since this is a sparse structure I think the 3d Textures that I will use will be 513x513x3.
Edited by gboxentertainment, 01 September 2012 - 07:05 AM.