Culling

Started by
0 comments, last by mnett 13 years, 3 months ago
What are the current best practise culling methods used by most 3D engines these days?

Do occlusion culling methods such as (http://http.developer.nvidia.com/GPUGems/gpugems_ch29.html) still suffice or are there better techniques out?

Cheers
Advertisement

What are the current best practise culling methods used by most 3D engines these days?

Do occlusion culling methods such as (http://http.develope...ugems_ch29.html) still suffice or are there better techniques out?

Cheers



Hi,

I don't know about most 3D engines, but I'm currently working on a strategy game. Lots of the displayed models are large structures like buildings or other landmarks. Everything i built on a grid (pretty SimCity-like) and the camera is fixed in a position that makes things look isometric (although the rotation, azimuth and distance from the scene can be changed within certain bounds). This makes culling especially easy as we just intersect the ground with the camera's frustum (while accounting for the height of buildings though) and we then have complete information about which ground-cells (including the objects constructed on top of them) have to be drawn.

Another tweak is that the 3D models have a memory-arrangement that allows us to, for example, only draw the 'west side of a building'. Using the camera's direction we can easily find out which two sides we need to render.

I remember the article that you refer to, but I cannot tell you whether this is up to date as I'm not that involved into game creation. However (although my knowledge of the industry and theory is limited) I don't think there's a better way to do it. You can either use math/logic to predetermine (offline or before each frame) what can safely be excluded from rendering, or you can use a more precise way via occlusion queries on the hardware.

- Michael.
It totally depends on the amount of geometry that you want to throw at the user, as well as other factors such as what rendering pipeline you use. For example, in a forward renderer, culling is yet a lot more important than in a deferred renderer, since every model is getting drawn (more or less) once per light.

In many cases, some coarse frustum culling is totally sufficient, the z-buffer will sort out the rest. Occlusion queries may in some cases even make things slower, as they require synchronisation between client and server and involve a latency (though conditional rendering can somewhat compensate that sometimes).

On the other hand, if you plan for some hundred thousand or million instances in your scene, then some more sophisticated culling method such as described here and here may be necessary.

This topic is closed to new replies.

Advertisement