All right, the output produced by “notify-level-collide spam” does look potentially informative–but I could use some aid in interpreting it, please.
Looking at what I have, it’s hard to say quite how much belongs to a single frame. However, I do see that it has sections marked by “begin_group” and “end_group”, so I’m posting below one such section. If more is required, please do say!
Here, then, is an excerpted “group” from my output:
:collide(spam): begin_group.
:collide(spam): Considering render
Comparing 0: bsphere, c (-50 -170 0), r 1 to bsphere, infinite, is_in = 1
:collide(spam): render has 1 interested colliders ( 0. player )
:collide(spam): Considering render/object
:collide(spam): render/object has 0 interested colliders ( )
:collide(spam): Considering render/fox rope
:collide(spam): render/fox rope has 0 interested colliders ( )
:collide(spam): Considering render/MeshDrawer
:collide(spam): render/MeshDrawer has 0 interested colliders ( )
:collide(spam): Considering render/MeshDrawer
:collide(spam): render/MeshDrawer has 0 interested colliders ( )
:collide(spam): Considering render/special effect
:collide(spam): render/special effect has 0 interested colliders ( )
:collide(spam): Considering render/special effect
:collide(spam): render/special effect has 0 interested colliders ( )
:collide(spam): Considering render/special effect
:collide(spam): render/special effect has 0 interested colliders ( )
:collide(spam): Considering render/special effect
:collide(spam): render/special effect has 0 interested colliders ( )
:collide(spam): Considering render/special effect
:collide(spam): render/special effect has 0 interested colliders ( )
:collide(spam): Considering render/special effect
:collide(spam): render/special effect has 0 interested colliders ( )
:collide(spam): Considering render/special effect
:collide(spam): render/special effect has 0 interested colliders ( )
:collide(spam): Considering render/MeshDrawer
:collide(spam): render/MeshDrawer has 0 interested colliders ( )
:collide(spam): Considering render/MeshDrawer
:collide(spam): render/MeshDrawer has 0 interested colliders ( )
:collide(spam): Considering render/MeshDrawer
:collide(spam): render/MeshDrawer has 0 interested colliders ( )
:collide(spam): Considering render/MeshDrawer
:collide(spam): render/MeshDrawer has 0 interested colliders ( )
:collide(spam): Considering render/MeshDrawer
:collide(spam): render/MeshDrawer has 0 interested colliders ( )
:collide(spam): Considering render/world root
Comparing 0: bsphere, c (-50 -170 0), r 1 to bsphere, infinite, is_in = 1
:collide(spam): render/world root has 1 interested colliders ( 0. player )
:collide(spam): Considering render/world root/world
:collide(spam): render/world root/world has 0 interested colliders ( )
:collide(spam): Considering render/world root/room
:collide(spam): render/world root/room has 0 interested colliders ( )
:collide(spam): Considering render/world root/character-stopper
:collide(spam): render/world root/character-stopper has 0 interested colliders ( )
:collide(spam): Considering render/world root/level root
Comparing 0: bsphere, c (-50 -170 0), r 1 to bsphere, c (-95.5371 -124.978 18.7533), r 180.591, is_in = 1
:collide(spam): render/world root/level root has 1 interested colliders ( 0. player )
:collide(spam): Considering render/world root/level root/room root
Comparing 0: bsphere, c (-50 -170 0), r 1 to bsphere, c (-112.777 -124.978 18.7533), r 141.971, is_in = 1
:collide(spam): render/world root/level root/room root has 1 interested colliders ( 0. player )
:collide(spam): Considering render/world root/level root/room root/floor.007
:collide(spam): render/world root/level root/room root/floor.007 has 0 interested colliders ( )
:collide(spam): Considering render/world root/level root/room root/content.003
Comparing 0: bsphere, c (3.85205 7.04082 0), r 1 to bsphere, c (-143.336 87.205 1.37091e-06), r 19.7317, is_in = 0
:collide(spam): render/world root/level root/room root/content.003 has 0 interested colliders ( )
:collide(spam): Considering render/world root/level root/room root/breakables
:collide(spam): render/world root/level root/room root/breakables has 0 interested colliders ( )
:collide(spam): Considering render/world root/level root/room root/wall.004
Comparing 0: bsphere, c (3.85205 7.04082 0), r 1 to bsphere, c (-58.9245 58.0457 29.8), r 123.625, is_in = 1
:collide(spam): render/world root/level root/room root/wall.004 has 1 interested colliders ( 0. player )
:collide(spam): Considering render/world root/level root/room root/wall.004/Plane.243
:collide(spam): render/world root/level root/room root/wall.004/Plane.243 has 0 interested colliders ( )
:collide(spam): Considering render/world root/level root/room root/wall.004/Plane.242
:collide(spam): render/world root/level root/room root/wall.004/Plane.242 has 0 interested colliders ( )
:collide(spam): Considering render/world root/level root/room root/wall.004/Plane.030
Comparing 0: bsphere, c (-12.6696 -10.1889 -29.8), r 1 to bsphere, c (-8.19937 -19.7821 -14.1658), r 17.8161, is_in = 0
:collide(spam): render/world root/level root/room root/wall.004/Plane.030 has 0 interested colliders ( )
:collide(spam): Considering render/world root/level root/room root/wall.004/Plane.008
Comparing 0: bsphere, c (-12.6696 -10.1889 -29.8), r 1 to bsphere, c (12.3187 -19.7821 -14.1658), r 17.8161, is_in = 0
:collide(spam): render/world root/level root/room root/wall.004/Plane.008 has 0 interested colliders ( )
:collide(spam): Considering render/world root/level root/room root/wall.004/Plane.064
:collide(spam): render/world root/level root/room root/wall.004/Plane.064 has 0 interested colliders ( )
:collide(spam): Considering render/world root/level root/room root/object
Comparing 0: bsphere, c (3.85205 7.04082 0), r 1 to bsphere, c (-10.7643 19.803 0), r 11.3212, is_in = 0
:collide(spam): render/world root/level root/room root/object has 0 interested colliders ( )
:collide(spam): Considering render/world root/level root/room root/object
Comparing 0: bsphere, c (3.85205 7.04082 0), r 1 to bsphere, c (-11.7853 -22.7381 0), r 11.3212, is_in = 0
:collide(spam): render/world root/level root/room root/object has 0 interested colliders ( )
:collide(spam): Considering render/world root/level root/room root
Comparing 0: bsphere, c (-50 -170 0), r 1 to bsphere, c (-3.59167 -188.47 -0.158312), r 67.2654, is_in = 1
:collide(spam): render/world root/level root/room root has 1 interested colliders ( 0. player )
:collide(spam): Considering render/world root/level root/room root/floor.006
:collide(spam): render/world root/level root/room root/floor.006 has 0 interested colliders ( )
:collide(spam): Considering render/world root/level root/room root/content.002
Comparing 0: bsphere, c (-59.7543 11.4107 0), r 1 to bsphere, c (-12.1215 -40.1618 2.04146e-06), r 12.2658, is_in = 0
:collide(spam): render/world root/level root/room root/content.002 has 0 interested colliders ( )
:collide(spam): Considering render/world root/level root/room root/breakables
:collide(spam): render/world root/level root/room root/breakables has 0 interested colliders ( )
:collide(spam): Considering render/world root/level root/room root/wall.003
:collide(spam): render/world root/level root/room root/wall.003 has 0 interested colliders ( )
:collide(spam): Considering render/world root/level root/room root/environment
Comparing 0: bsphere, c (-59.7543 11.4107 0), r 1 to bsphere, c (-42.7329 -8.46114 0), r 15.898, is_in = 0
:collide(spam): render/world root/level root/room root/environment has 0 interested colliders ( )
:collide(spam): Considering render/world root/level root/room root/environment
Comparing 0: bsphere, c (-59.7543 11.4107 0), r 1 to bsphere, c (-42.7329 21.7228 0), r 9.84802, is_in = 0
:collide(spam): render/world root/level root/room root/environment has 0 interested colliders ( )
:collide(spam): Considering render/world root/level root/object
Comparing 0: bsphere, c (-50 -170 0), r 1 to bsphere, c (-33.8719 -172.257 1.20501), r 5.35494, is_in = 0
:collide(spam): render/world root/level root/object has 0 interested colliders ( )
:collide(spam): Considering render/world root/celestial sphere
Comparing 0: bsphere, c (-50 -170 0), r 1 to bsphere, infinite, is_in = 1
:collide(spam): render/world root/celestial sphere has 1 interested colliders ( 0. player )
:collide(spam): Considering render/world root/celestial sphere/sphere
Comparing 0: bsphere, c (-50 -170 0), r 1 to bsphere, infinite, is_in = 1
:collide(spam): render/world root/celestial sphere/sphere has 1 interested colliders ( 0. player )
:collide(spam): Colliding against CollisionNode 0x4ab9340:5 which has 1 collision solids.
:collide(spam): Considering render/world root/celestial sphere/card root
:collide(spam): render/world root/celestial sphere/card root has 0 interested colliders ( )
:collide(spam): end_group.
Looking over it, I see a number of non-collision-nodes mentioned. (One such is “render/fox rope”.) But does being “considered” mean that there’s actual overlap in the collision-mask?
And looking at the aforementioned “render/fox rope” node, it would appear that it has an “into” collide-mask that is all-off (and being a RopeNode, has no “from” collide-mask). So surely it shouldn’t be colliding with anything…?
[edit]
Further, I’ve tried a few recursive walks through the scene-graph, and I haven’t found any collision-nodes with the bit associated with visible geometry, not any non-collision nodes with any of the bits below that associated with visible geometry. :/
So, I’m a little stumped as to why I’m seeing PandaNodes turn up–and in number!–in my PStats cTrav listing… o_0 :/
On a related note, let me correct something that I said earlier: it appears that the “visible geometry” bit is in fact bit 20, and not bit 21.