Tiled Shading - Cone Culling

Started by
6 comments, last by B-Real 6 years, 6 months ago

Hey,

I found a very interesting blog post here: https://bartwronski.com/2017/04/13/cull-that-cone/

However, I didn't really got how to use his "TestConeVsSphere" test in 3D (last piece of code on his post). I have the frustumCorners of a 2D Tile cell in ViewSpace and my 3D Cone Origin and Direction, so where to place the "testSphere"? I thought about to also move the Cone into viewspace and put the sphere to the Center of the Cell with the radius of half-cellsize, however what about depth? A sphere does not have inf depth?

I am missing anything? Any Ideas?

Thx, Thomas

Advertisement

If you have the corners of your frustum slice, then you should be able to fit a bounding sphere to those points using any of the common sphere-from-points algorithms. Depending on what projection matrix you use and how you're generating your sub-frusta you may be able to make some assumptions that you can use to quickly compute your sphere, but you have to careful with that. In the typical case of projection matrices, the sub-frusta will be non-symmetrical (they will appear skewed towards the corners of the screen), and the points on the rear plane will be more spread out than the points on the front plane.

While I am using Tiled Based Shading I don't have any tile slices because its only 2D.. Sure in case of clustered shading it would make sense to place a sphere in a cell, because the cells are placed in depth too. In my case I only have 2D grid cells where I need to check if a cone will be visible on that tile..

Actually I tried some complex Ray/Cone test where I shot rays from the corners+center of a cell. That works, but because I only check 5 points, there are still cases where the test fails.. and also its not very fast..

I think the solution is easier as it looks.. While my tiles are only 2D also the cone should be also converted in  a 2D triangle.. I only need to find a way to test a 2D rectangle/triangle for intersection plus the case when the camera is within the cone..

There are many variants of "tile based shading", so you'll have to adapt your culling based on your particular approach. If you're only using a single Z partition that isn't fit to the depth buffer, then your sub-frustum will extend all the way from the camera's near clipping plane to the far clipping plane. In such a case your sub-frusta will typically by very long and skinny, in which case a bounding sphere can be a poor fit:

59c821c7eceb2_Sub-FrustumBoundingSphere.png.7b6b3608e75d3c0a7509d2e7bd82a563.png

A 3D cone is not a triangle under perspective projection, so your 2D approach wouldn't work. 

 

Yes you are right, a sphere-test does not make sense in that case.  You are sure about the 2D approach? Finally any cone I would draw in 3D will appear as a triangle on screen (apart from the cam-in-cone situation).. ?  So if I could calculate that Triangle, it should be only a tri<>rect or tri<>circle test

Just go ahead and look at an image of a cone under projection, like this one: 3d_cone.png

It's very clearly not a triangle in 2D. You could possibly fit a triangle to the cone, but I don't know if there's a (cheap) algorithm for doing that.

Hey,

triangles.png.b1da692ac76cdb7fcab8efde886a7932.png

not sure how to call it but I think its called "Infinite Cone"? Yes there should be still cases where this will fail, like when looking mostly in same direction as the cone, so you wouln't get the roundings on the end but in my case this would'nt be a problem.

BTW: like your blog a lot! nice work!

 

This topic is closed to new replies.

Advertisement