Jump to content
  • Advertisement
thmfrnk

DX11 Tiled Shading - Cone Culling

Recommended Posts

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

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites

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..

Share this post


Link to post
Share on other sites

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. 

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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!

 

Edited by thmfrnk

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!