some months, mostly optimization
Jun 13 2011 05:08 PM
ok ok, quite a catchy name. what you actually see is my culling lib, supporting
you see a cube consisting of 135k objects, slightly over one billion polys made of 3 mesh types
-utah teapot, about 500poly, mostly contributing to drawcalls
-stanford bunny, 15k poly, simulating nowadays game models
-tetrahedron, highly tessellated, simulating micro polygons (which are quite challenging for software rasterizers)
some benchmarks, without/with the lib
- 135k object, 1Billion polys -> 0.3fps/5-6fps
- 13k objects, 100MPoly -> 3fps/30fps
-1.3k objects, 10MPoly -> 30fps, 65fps
-130 objects, 1MPoly -> 111fps/105fps (about 3-5objects get culled, kinda useless lib in this case, creating just overhead)
there are just a few occlusion libs, I wanted to create an alternative that have some quality goals:
- handling high object counts, that's usually the limiting factor on PC games using D3D nowadays
- drop in solution, handling all culling you need, without much coding or level setup. supporting ogl/d3d (you can just call glget.. to get matrices and pass them to the lib)
- handling low poly (boxes) to Million poly meshes, with a win if culling is possible, but without performance penalty if it's impossible.
- simple c interface, few functions, supporting "scenes" and "cameras" with shared meshes, but instanced objects. so you can make one cam, one scene, thousands objects games, but also split screen games with shared cams, you can use the cams for occlusion culling of shadows, or in some rare cases also simulate separate scenes.
the scene from the screenshot is quite a worst case for the culling lib, high poly and extreme drawcall counts, low pixel cost (opengl phong shading), and it still is a win or at least not a big hit. Common in nowadays games are rather high pixel cost with 1000-5000 drawcalls, which makes this tech very beneficial for real world scenarios.
if you have any interest to integrate this lib into your existing project, drop me a pm please
SSE(1/2/4) was the most important "tool"
it's written internally in c++, using visual studio on win, xcode on mac and vi+make on linux.