Download

Frustum culling questions

Hi all,

Had some questions about camera frustum culling and best modeling/asset practices in UE4.

First, from what I’ve read, it sounds like frustum culling is automatic, in other words, there’s nothing special that has to be set up.
Is this correct?

If you were to build a terrain that was one huge piece, it would never cull, since it’s pretty much always seen.
So can you build the terrain in multiple sections, so that some will not be rendered, in the same way static meshes won’t be rendered when out outside the frustum?

I’ve read that UE4 is pretty good about rendering lots of polys, but it is not overly fond of lots of separate, individual meshes. That it’s a good idea when you can, to combine meshes into larger meshes. But if you do that, you’re also reducing the likelihood of meshes being culled, because they’re now much larger, and more likely to be seen by the camera.

Also, is there any way to view the culling taking place? Like being able to see from a bird’s eye view which meshes are being culled? Kind of like in this vid:
https://www.youtube.com/watch?v=Ap-GPO4vIRQ at :33, the view at bottom right.

If there are any good tutorials or videos specific to this that you could point me to, it would be appreciated. I’m trying to learn as much as I can about the various types of culling, and performance improvements in general.

Thanks!

It seams to be.

I believe that the terrain uses some kind of subdivision system(skirts, chucks, LOD’s, other).
So large terrains should not cause problems.

Non low level API’s don’t like lots of draw calls, But I am led to believe D3D11/OGL4 based renderers do not have to be limited by this much unless the interface works the same as GLES.
(Current) GPU’s like working with large amounts of data instead of lots of small bits and pieces.

HTH

So… ok, frustum culling just culls anything that’s not intersecting the camera frustum. That’s how simple that is, unless UE does something weird. What matters then, as far as frustum culling goes, is how large the bounding box of your object is. Not if it’s 1 mesh or a 100. As long as there’s no intersecting it will be culled.

Someone correct me if I’m wrong.

Now, 1 mesh vs 100, will matter in other regards, and according to the performance guidelines it’s recommended to split up large meshes.

Performance Guidelines: https://docs.unrealengine.com/latest/INT/Engine/Performance/Guidelines/index.html

  • Minimize number of elements per object
  • Combine models to have a reasonable amount of triangles per element (e.g. 300+ per element).
  • Very large meshes can be split for better culling. This is for view culling, as light culling is usually done at a finer granularity.
  • Adjust the draw distance on smaller objects to allow for better culling.
  • Good level design takes occlusion culling into account (add visibility blockers for better performance). Use r.VisualizeOccludedPrimitives to check this.

Thanks for the replies.

So the size of the bounding box is what specifies the cull from the camera…but if I select a bunch of buildings and combine them into one mesh, that would create a much larger bounding box, and would mean it wouldn’t get culled as often because it’s filling more of the view. So I’m trying to figure out what the best balance is between keeping the total number of meshes reduced by combining, and still having good culling. I think it’s just going to take more experimentation on my part.

I’m also not sure what the difference is between elements, objects, and models. Will read up on it more.

“add visibility blockers for better performance”…does that just mean adding large scene objects, or do we have the equivalent of viz blocker volumes?