multi-geom Actor culling issues

Hello. I create an Actor from a 3d format not supported by Panda and everything works fine. However, when I get the camera closer to it, some Geoms hide, like get culled. I asked this before and was suggested to set the “setFinal” flag to True in the Actor constructor and it seems to work, but if I’ll move the Actor from it’s original position, it happens again, although not as much as when not setting that flag.
I’m guessing it’s a culling problem, but exactly what is happening and what can be done to prevent it? The models look fine in the original 3d engine.

Also, I’m having another problem with Actors, I can’t seem to get the AnimBundleNode from one Actor and assign it to another. I found some hints in the forum on how to do that, but I get an error message.

actor.loadAnims({'anim': NodePath(AnimBundleNode('animbundlenode', actorWithAnim.getAnimControl('anim').getAnim()))})
    actor.play('anim')
  File "C:\Panda3D-1.8.0\direct\actor\Actor.py", line 1555, in play
    for control in self.getAnimControls(animName, partName):
  File "C:\Panda3D-1.8.0\direct\actor\Actor.py", line 1868, in getAnimControls
    allowAsyncBind = allowAsyncBind)
  File "C:\Panda3D-1.8.0\direct\actor\Actor.py", line 2360, in __bindAnimToPart
    bundle = self.__commonBundleHandles[subpartDef.truePartName].getBundle()
KeyError: 'modelRoot'

Any ideas what this can be caused by?

There is a known limitation with Panda’s animation subsystem: it doesn’t automatically update the bounding volumes as the Actor animates. For Actors that animate in-place without moving much, this isn’t a problem at all; but for Actors whose animation moves them considerably farther away from their original position, then this causes culling problems.

The workaround is to compute an appropriate bounding volume that is large enough to cover the Actor’s entire animation, and apply it to the Actor explicitly. If you don’t know the Actor’s range of animation, you can use an OmniBoundingVolume, which means an infinite volume, effectively disabling culling for the Actor altogether:

actor.node().setBounds(OmniBoundingVolume())
actor.node().setFinal(True)
KeyError: 'modelRoot'

I think this means that the Actor you called play() on didn’t have any geometry for some reason; maybe loadModel() failed? Can you call actor.listJoints()?

David

Oh. It’s not a big problem for the type of game I’m working on now, but I still think that would be annoying for most people. And my character Actors hardly go a meter away from their original position. Can I file a bug report or feature request?

Odd, I see the rendered geometry before calling play() and when I print actor.listJoints() I get the bone names together with hpr’s and transform values.

Sure, it’s arguably a bug, and there’s not already a bug report filed for it (though it’s been on my personal list for a while), so go ahead and file one now.

Odd indeed; can you demonstrate the problem with a simple code snippet using standard models?

David

done

I fail to recreate the problem, which probably means I’m doing something wrong myself.
EDIT. Yep, I had 2 Actors actually, the other one shows “None” when I do actor.listJoints() on it and it’s the one causing the error.