Practical, Dynamic Visibility for Games

This is a companion discussion topic for the original entry at

hmm, source code not visible...

As both of these solutions were developed on company time, there were limits as to how much code we could publish. All the same, I would have liked to have provided a demo for the HZB method, but just writing the chapter was enough extra work in addition to my day job!

You're in luck though, since Daniel Rákos and Nick Darnell have also written on the subject of HZB occlusion testing and both of them provide standalone demos. The course notes for the Froblins talk also has code, but they fail to account for distortion of the object's bounding sphere due to perspective projection (Nick's code does though).

I'll see if I can go into more details about exactly what we did there at a later date, but it's not really as interesting as the topic of occlusion testing itself.

Great article! The Conviction solution looks really smart and promising, wish I had time to give it a try.

Thanks! Expect to see more of this GPU-CPU interoperability in the future! :)

I am trying to realize gpu-driven hiz using depth in last frame which is very similar to the OQ case。I notice that this article says the poping artifacts can be reduced by extruding object bounding volumes。Can i use this method to deal with the poping artifacts in gpu-driven hiz? How much should i extrude? accrording to camera speed?

There’s a better solution to reusing the depth from the previous frame that avoids popping entirely, which is covered in the “GPU-Driven Rendering Pipelines” presentation:
(bottom of the page).

In particular, see the slides on “Two-Phase Occlusion Culling”.

Yes,i have already tried recheck method in this article and the result is good。But on mobile device, we usually can’t use api like multidraw, therefore recheck pass will cause many useless drawcalls :frowning_face: