[ODE] Terrain: collision test culling
johnmcTemp at netscape.net
johnmcTemp at netscape.net
Sat Aug 7 17:29:04 MST 2004
Hi. My name is John and this is my first time posting. Ive been using ODE for
about 2 weeks. Currently just working on getting better knowledge and
testing performance with different terrain sizes to see what I can shoot for on my PC
as far as a small 3d game.
I am wondering HOW I call reduce the number of NearCollisionCallback() calls
each simulation. Currently, all I am doing is inserting 'chunks' of terrain as trimesh
geoms into a space. Depending on the space, the number of calls just in these static
geoms 'colliding' with each other can quite litterly bring my application to a
screaching halt (0 to 1 fps).
So I have some data here, and if possible, would like to see what some of you out
there that have had experience in terrain chunks, what I may do to improve
upon my situation. My curiousity is in the number of callbacks every tick. I am really
not sure why there are so many possible collisions between static geoms, and whether
there is a simple solution.
Thanks, and any comments or questions would be great.
///////////////////////////////////////////////////////////
I much cleaner html version can be found here:
http://home.earthlink.net/~gqjohnm/ODETerrainResults.htm
///////////////////////////////////////////////////////////
Text version in case website is down (excuse the crappy formatting, see html version above):
[ODE Space Type] [Num terrain trimesh geoms] [Num NearCollisionCallback() calls] [Num dCollide() collisions]
Terrain Size = 65x65
Simple with testing types 4 6 0
Simple w/o testing types 4 6 6
QuadTree with testing 4 2 0
QuadTree w/o testing 4 2 2
Terrain Size = 129x129
Simple with testing types 16 42 0
Simple w/o testing types 16 42 39
QuadTree with testing 16 12 0
QuadTree w/o testing 16 12 12
Terrain Size = 256x256
Simple with testing types 64 207 0
Simple w/o testing types 64 207 186
QuadTree with testing 64 56 0
QuadTree w/o testing 64 56 56
Terrain Size = 513x513
Simple with testing types 256 918 0
Simple w/o testing types 256 918 658
QuadTree with testing 256 240 0
QuadTree w/o testing 256 240 240
TERRAIN DETAILS:
Terrain is broken up into 33x33 chunks. Each chunk creates an ODE trimesh geom and adds it to the space/world.
The reason for the odd numbers is so when terrain is broken into chunks, each will have even numbers, such as 0 to 32, or 32 to 64,..
For quadtree spaces, the center is at 0, with extents being equal to terrain size.
The number of levels deep should be such that at all the chunks fit perfectly at the bottom/deepest level. Here are some numbers:
Terrain size = 65x65 chunks = 4 total, 2 across Quadtree size = 65x65 Quadtree depth = 2
Terrain size = 129x129 chunks = 16 total, 4 across Quadtree size = 129x129 Quadtree depth = 3
Terrain size = 257x257 chunks = 64 total, 8 across Quadtree size = 257x257 Quadtree depth = 4
Terrain size = 513x513 chunks=256 total, 16 across Quadtree size = 512x512 Quadtree depth = 5
NEARCOLLISIONCALLBACK DETAILS ("With/Without Testing"):
I use the basic NearCollisionCallback() given in most of the simple examples from ODE.
The only difference is that I set classification, in the geom paramater, so I can identify what the geom is, such as a 'terrain chunk'.
So, during the NearCollisionCallback(), if neither of the geoms are spaces, then next I test if both are terrain chunks.
If so, then early out! I don’t want terrain chunks colliding with each other!!
__________________________________________________________________
Switch to Netscape Internet Service.
As low as $9.95 a month -- Sign up today at http://isp.netscape.com/register
Netscape. Just the Net You Need.
New! Netscape Toolbar for Internet Explorer
Search from anywhere on the Web and block those annoying pop-ups.
Download now at http://channels.netscape.com/ns/search/install.jsp
More information about the ODE
mailing list