Occlusion culling in 3D engines

Abstract

In the following diploma thesis I have researched the problem of hidden surface determination in 3D engines and implemented four methods of culling. Engines in modern 3D games use more and more powerful graphics cards for rendering, which can now help with occlusion culling as well, for example by providing mechanism called occlusion queries. The bottleneck in communication between CPU and GPU most often lies in sending large numbers of graphics primitives. That is why it is vital to cull away as much geometry as possible on the CPU side. In a rendered image millions of polygons may be visible each frame, but usually even more are occluded by other polygons or are invisible because they lie outside of the view frustum or are facing towards the viewer with their back sides. The methods which I have implemented cull away invisible polygons (those outside the view frustum and those facing away from the viewer) as well as occluded ones. For this purpose I implemented raycasting method and two simplified versions of a method, that use occlusion queries for culling. I have also performed various experiments and analyzed efficiency of different implementations. It turns out that we can achieve highest speedups by precomputing visibility, which however turns out to be computationally a very difficult problem.