Actors have an annoying habit of animating themselves out of their bounding volumes. This can make them disappear.
A bit of background: Panda automatically computes the bounding volume of every object in the scene, and keeps the bounding volumes up-to-date as objects move around. It then uses these bounding volumes to decide which objects are actually visible to the camera, and which are not; if an object’s bounding volume is not within the camera’s viewing frustum, the object is not drawn.
However, Panda does not automatically recompute the bounding volume of an Actor, because Actors move their vertices around a lot, so recomputing this every frame would be too expensive. (We still have, on the todo list, the goal of precomputing the bounding volume animation and storing it with the animation channels, but this hasn’t been done yet.) Since usually Actors animate in place while lerps, etc., move the Actors around the world, this usually isn’t a problem.
However, every once in a while you have an Actor whose animation actually moves the Actor away from his origin. When this happens, then the bounding volume still shows him at his original point, and unless the camera is looking at both his original point and the Actor’s new point, he will disappear.
You can reveal the bounding volume with a call like:
object.showBounds()
If you see that your Actor is walking out of his bounding volume, one workaround is to give your Actor an infinite bounding volume. This means he will always be rendered, even if he is not in front of the camera. You can do this like this:
object.node().setBound(OmniBoundingVolume())
object.node().setFinal(1)
The second line tells Panda that the bounding volume on this node should be considered “final”; that is, not to look at any of the (still incorrect) bounding volumes below this node.
(Of course, an infinite bounding volume won’t be visible when you do showBounds(), but it’s there.)
David