Indoor (cave like) culling
Hi guys!
I'm moving forward in my (our) current project...we're developing a game that will contain parts inside caves environment, but also with open underground rooms.
I just ask you: what techniques are used nowadays for frustum and occlusion culling?
I know that Unreal Engine 1 and 2 used portal based-culling, but now they use Dynamic PVS (afaik), that I think is something of a summa of various techniques!
What do you use for occlusion culling of your indoor scenes?
I'm thinking about Image-Space Portal Culling, that seems really easy to me.
Thanks!
well i think portals + antiportals will rule for quite some time. maybe implementation details will change but general idea is so simple and efficient that even if you use some fancy occlusion query system it's still worth your time to implement it in some form.
Good...portals and antiportals: this is what I am thinking about!
Can you point me to some link in which the math around it is explained?
And...are you using it? Image-space or creating volume projection?
Thanks!
Can you point me to some link in which the math around it is explained?
And...are you using it? Image-space or creating volume projection?
Thanks!
I personally dislike the using of portals.
Automatic generation of portals is pretty inefficient, expecially with the big assets used nowadays. Artists would be forced to manually specify them, and specify every item contained, limiting their freedom. Portals are good just in Quake1-like enviroments.
I'm trying, instead, to go somewhere else, utilizing image-space methods. Z-based occlusion culling systems, for me, work well. As far as I'm concerned, hierachical z-based rejections are a good idea.
Automatic generation of portals is pretty inefficient, expecially with the big assets used nowadays. Artists would be forced to manually specify them, and specify every item contained, limiting their freedom. Portals are good just in Quake1-like enviroments.
I'm trying, instead, to go somewhere else, utilizing image-space methods. Z-based occlusion culling systems, for me, work well. As far as I'm concerned, hierachical z-based rejections are a good idea.
well noone generates portals automatically, you need to hire a graphics artist who will, it's not a lot of work if it's designed properly.
for example you can ask level designer to put boxes defining sectors and portals on their intersections, should be fast and simple.
as for rendering fastest way is to do it in world space by narrowing view frustum. you keep 6 clip planes and cull object with that, and when you look through the portal you just adjust clip planes to fit portal. (they will still form rectangle in screen space).
of course you can do some fancy culling using hardware occlusion query, HOM or something else, but remember that portals are almost free on modern machines (at the cost of small increase of work for level designer).
same applies to antiportals.
for example you can ask level designer to put boxes defining sectors and portals on their intersections, should be fast and simple.
as for rendering fastest way is to do it in world space by narrowing view frustum. you keep 6 clip planes and cull object with that, and when you look through the portal you just adjust clip planes to fit portal. (they will still form rectangle in screen space).
of course you can do some fancy culling using hardware occlusion query, HOM or something else, but remember that portals are almost free on modern machines (at the cost of small increase of work for level designer).
same applies to antiportals.
there's not a lot of math in it.
all you need is to be able to test box-frustum intersection and to find reduced frustum going through portal.
for second thing check this thread: http://www.gamedev.net/community/forums/topic.asp?topic_id=384601
box-frustum intersections have been discussed in many places here on this forum
my suggestion is to start simple . for example only axis aligned boxes define sectors, level designer will put only those boxes and portals (axis aligned rectangles laying on 2 touching faces of 2 boxes) then while loading you intersect scene geometry with boxes so you know which objects belong to which sectors , then find center of each portal and move it a bit along normal in one direction and then in other , that way you get information about which sectors portal connects. after that you can use it for rendering.
all you need is to be able to test box-frustum intersection and to find reduced frustum going through portal.
for second thing check this thread: http://www.gamedev.net/community/forums/topic.asp?topic_id=384601
box-frustum intersections have been discussed in many places here on this forum
my suggestion is to start simple . for example only axis aligned boxes define sectors, level designer will put only those boxes and portals (axis aligned rectangles laying on 2 touching faces of 2 boxes) then while loading you intersect scene geometry with boxes so you know which objects belong to which sectors , then find center of each portal and move it a bit along normal in one direction and then in other , that way you get information about which sectors portal connects. after that you can use it for rendering.
So basically you test portal-frustum intersection, and then create a new frustum starting from the portal and recursively reduce the frustum? Is it correct?
And...Box-Frustum intersection...because a Portal must be a 3d polygon (so at least a box)?
thanks biki!!!
And...Box-Frustum intersection...because a Portal must be a 3d polygon (so at least a box)?
thanks biki!!!
Quote:Original post by JorenJoestar
So basically you test portal-frustum intersection, and then create a new frustum starting from the portal and recursively reduce the frustum? Is it correct?
yes
Quote:Original post by JorenJoestar
And...Box-Frustum intersection...because a Portal must be a 3d polygon (so at least a box)?
well. box frustum or box-box is for culling and dividing scene objects into 'sectors' depending on which sector box it is in. portal is just rectangle (not box) it can be any flat shape but method i described will use it's screen space axis aligned rectangle.
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement