Basic Keyframed Animation from Max

I am trying to export a simple scene from 3DS Max with keyframed animation. The animation data seems to be ignored or lost. Any help?

Here is my scene:
Sphere01 (Animated on its Y axis at frames 0 and 100. )
–>Box01 (Child of Sphere01. Box01 has no keyframes of its own. )

On export I have tried separate files, and setting Export type to “Both” to export all the data to a single file. No luck either way. None of the objects seem to have animation data after exporting. (See the anim file contents below.)

Does all animation in Panda3D have to originate from skinned objects attached to bones? That is the only case I have been able to get any animation out with.

Thanks in advance.


{ Z-Up }

{
“MaxEggPlugin nul.max -a chan -o ‘C:\MyPanda3D\BoxAnim.egg’”
}

{ BoxTest {
"" { } } }

I don’t have any experience with 3DSMax or its exporter, but I think this is likely to be true–at least, in terms of converting animation from 3DSMax via this exporter.

David

Just looking at the animation exporter, it seems to want you to enter a list of bones to export. Based on that, I can only assume that it’s designed to export the motion of bones.

It may be possible to add an object that’s not a bone (ie, a cube) or something to the list of bones, but I wouldn’t count on it.

Thanks for the feedback.

Another question then to clarify: Outside of the Max exporter, does Panda3D support any animation data other than bones+skin deforms?

I know I can programmatically move the objects via their Pos and HPR transforms, but I am asking can I say…

theActor = Actor.Actor()
theActor .loadModel(‘Model Path’>
theActor.loadAnims({‘someNonBoneRelatedAnim’:’SomePath…’})
theActor.loop(‘‘someNonBoneRelatedAnim’’)

This could to be a bit more clearly spelled out in the docs. It almost looks like there is support for keyframed transforms via optchar but I have not uncovered a method that works yet.

For even the simplest animation such as moving a box from point A to B. I would need to create the box, then create a bone at the same location, then skin the box and add the bone to the skin modifier, and weight the box’s vertices to be driven by that bone at 100%. Finally I animate the bone from point A to B by setting 2 keys.

(If I am correct) That is a lot of extra work compared to: Create a box, set a key, move the box, set another key.

Hi GameGeek.

I’ve only recently made the leap from Gmax up to 3ds Max. But when I was experimenting with Gmax and Panda, I was able to successfully export a simple keyframe animation (a bouncing ball) via Gmax’s .X exporter.

Panda loaded both the model and its animation nicely. I haven’t tried this with 3ds Max yet, but if the Panda Max exporter only supports boned animation, then perhaps you could try using .X format for your keyframed animation.

Just an idea. Good luck with it.

Hmmm, I decided to test it out using the Panda DirectX exporter (for Max7): andytather.co.uk/Panda/direc … loads.aspx
But sadly, without success, I’m getting this error message:

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\Gigabyte User>cd C:\Panda3D-1.2.2\

C:\Panda3D-1.2.2>ppython ball.py
DirectStart: Starting the game.
Warning: DirectNotify: category 'Interval' already exists
Known pipe types:
  wglGraphicsPipe
(3 aux display modules not yet loaded.)
:loader(error): Couldn't load file models/ball: not found on model path (which i
s currently: ".;/c/Panda3D-1.2.2/etc/..;/c/Panda3D-1.2.2/etc/../models")
Traceback (most recent call last):
  File "ball.py", line 19, in ?
    MyActor = Actor.Actor("models/ball", {"anim":"models/ball"})
  File "C:\Panda3D-1.2.2\direct\src\actor\Actor.py", line 160, in __init__
    self.loadModel(models, copy = copy)
  File "C:\Panda3D-1.2.2\direct\src\actor\Actor.py", line 1323, in loadModel
    raise StandardError, "Could not load Actor model %s" % (modelPath)
StandardError: Could not load Actor model models/ball

C:\Panda3D-1.2.2>

I don’t know what this error means, but if it’s of any help, this is the .X model itself:


(removed by moderator for clarity)

I had to right-click on the model and rename it to ball.X (with a capital X) because at first, Panda was telling me that .x was the wrong case. When I renamed the file, that part of the error message disappeared.

I really hope somebody can sort this out.

Cheers

The answer depends on exactly what you mean by “animation data”. The short answer is no, but there are several other ways to do this.

The easiest way by far to programmatically animate a box moving from point A to point B is to create a PosInterval to do the job. See the Panda3D manual on intervals. You can create quite sophisticated animations using nested intervals.

If your animation requirements are sophisticated enough that you need to make your animations in a third-party animation package such as 3DSMax, then you will need to create a bone for each of the things you want to move. As you point out, if you only want to move a box from point A to point B this is kind of silly; but remember, you have decided to use 3DSMax because you have more sophisticated needs than that.

You don’t, strictly speaking, need to handle the skinning in 3DSMax, since you could just export the bones themselves, and then expose the joints at runtime (or via the egg-optchar program) so that you can parent your boxes to the moving bones at runtime.

Tiptoe, the relevant error message in question is this one:

There’s nothing wrong with the contents of the file itself, but Panda wasn’t able to find it with the name you gave it. Note that you do need to supply a filename extension–ball.x, for instance–for any file format other than .egg or .bam.

David

David,
Thanks that clears it up.

Yeah, I realize I can acomplish the same animation for the simple cases using intervals and scripting. (The case I gave was extremely simplified.) The idea of doing any complex animation that way is not appealing as you can imagine.

Linking the objects I want animated to animated bones is a workable method for what I need to do. This at least removes the steps of skinning and vertex weighting objects.

I may also look at the .x export and see what I can do with that.

Thanks everyone for the feedback,
-GameGeek