Mittwoch, 30. April 2014

Polygon Rendering vs. Voxel Raycasting

Since I started the project I have always wondered if it wouldnt be better to use polygons/triangles rather than voxels. To verify this decision, I created a reasonably complex test scene from multiple instances of the same block, and rendered the scene once with triangles using Display Lists & LOD and second using voxel raycasting (LOD inherently). The triangle block is created by exporting the voxels as polygon mesh, and then using Meshlab to reduce the triangles and create multiple LOD levels.

It turns out that triangles are much faster for a small to a medium number of instances (its about equal for 10x10x10 = 1000 instances) - but when having a large amount of 8000 instances (32 Million Triangles), 40x5x40 blocks, voxel raycasting is significantly faster ( 40 vs 13 fps ).

For triangles, I havent used any sophisticated occlusion culling. It would therefore be interesting to see how much more performance could be achieved using the voxel based umbra or the software based rasterization presented by intel.

For the ones of you that would like to experiment with occlusion culling, the source & data of the polygon benchmark can be downloaded [here].

Raycasting Outside
Raycasting inside

Triangles Outside
Triangles inside


  1. Yeah I've been wondering which is better myself. I use the triangle approach in my project. The biggest issue is probably the "tiny triangle" issue, since the GPU shades triangles in 2x2 blocks since it assumes you want derivatives for texture mapping(even if you don't..). I use software occlusion culling, it cuts out many extra draw culls.

    *random: your blog is in English but the "post" feature is in some other language, not a big deal, just abit odd

  2. Do you use the software depthbuffer rasterization method ? If you like to test the speedup for the above scene with your culling method, I would be interested in the results. I made the triangle version available for download therefore.

    For the language I will check. Usually Google should automatically switch the language to your preferences I believe.