gmax

Physically you can now use gmax, but legally can you use it? What does the license say?

I took a peek at the EULA and I think it’s OK. The only restriction is releasing the gmax files under another license like the GPL. Or at least that’s the way I interpreted it. Correct me if I’m wrong. :slight_smile:

Hiya All,

If anybody is interested, you can find the gmax EULA (and gmax itself) here:
turbosquid.com/gmax

To my non-legal eyes, it looks like all the EULA actually prohibits is the decompilation, modification or altering of the gmax software in any way. And we haven’t done any of that :smiley: .

All we’re doing, is using ‘existing third party’ plugins to make gmax do what we want it to do. And to be honest, I think that even if you made Panda accept the default .gmax file format, that too would be completely legal.

After all, how can they stop a company from modifying their OWN software :smiley: .

Cheers

Hi Folks,

I have some really bad news :cry:. After spending the day trying unsucessfully to export a character animated with bones from gmax, I decided to read through the exporter’s docs and made a horrible discovery, apparently the gmax .X file exporter does not support any kind of skinned mesh or bone animation (meaning no vertex animation).

Also, the exporter does not recognize any animation on helper objects. During the export process, the animation information on helper objects such as dummies or points is lost. An object must have geometry in order for the animation to be exported.

Apparently, the only way to create a biped-type animation is to create a very simple segmented model and then link all the segmented parts directly to each other (with the body as the root node), and then animate them using the Interactive IK mode. Which seems very primitive to me.

I’m sorry folks, I know it’s a heck of a letdown, but it looks like we’re back to square one. The only solution I can see, is to create your models (and bones) in gmax, export them as an .X file (the bones will export, just not the animation), then import them into another package, such as Blender, and then animate your model in this.

I’m really unhappy about this method though! Of couse, the other solution is to harrass and pester poor ol’ Josh and David into writing a gmax .egg exporter for us :laughing:.

Or maybe, just to add MD5 support to Panda, because I believe the gmax MD5 exporter works, though I haven’t tested it myself, so I can’t say for sure.

Cheers

I think the thing that people don’t understand (and I think I’m right here) is that for them to make an egg exporter for GMax, they would have to buy a license (i.e. pay lots of money) from Discreet.

Typically, a development company would buy a license from Discreet for GMax, which would let them ship an exporter for their game with their game. Then anyone can download GMax (I think I’m right here!) and use this exporter without paying anything. The development company (in this case, the Panda3D guys) take the financial hit to let the community export from GMax to the game.

Pestering me isn’t going to help, I’ve got stuff on my todo list for the next two weeks. But if there’s a programmer out there, you can do this yourself.

I’m fairly convinced that the right way to do this is to write an MD5 loader for Panda3D. After all, I expect that there will be a lot of games based on the Doom III engine, so there will probably be lots of Doom III models out there soon. There will also be lots of tools to create art for the Doom III engine. If we can leverage all that, it would be a good thing.

The Doom III file format is very straightforward. Much simpler than egg file format or X file format. It’s ascii, human-readable. Writing a loader should not be very hard at all.

The way to do it would be to study the code to load VRML, X, DXF in pandatool. Then, write something similar.

Hi All,

Unfortunately, I think Stodge is right, I believe it would cost the folks at Panda3D a lot of money, and cause lots of legal problems if they wrote an .egg exporter for gmax :cry:.

So I think Josh has the best idea, add MD5 support to Panda (Josh I’ll try not to pester you anymore, I promise :laughing:).

I’m very frustrated here though, because the one thing that I do have lots of, is TIME. I’m disabled and pretty much housebound, so all I do is muck around on the computer all day :unamused:.

I would love to help you guys out by writing the darn thing myself, but I’m just an artist, not a programmer. I’ve never programmed in my life, that’s why I’m attracted to Panda (it’s supposed to be easy to learn :wink: ).

But what the heck! Nothing ventured, nothing gained! If it’s just a case of altering a few lines in an existing code, then I’ll have a stab at it. Where would I find the ‘load VRML, X and DXF’ code?

Cheers

Hey, you gotta start somewhere. Start small and work your way up.

Hiya All,

Some good news at last! It looks like we’re finally in business :smiley:. And no, I didn’t write a new script or anything (talk about biting off more than you can chew :blush: ).

But I have found a work-around, and it works! It all hinges on the gmax .X file exporter though (bless you Flight Simulator!) so you still need to go through all the installation steps mentioned before.

Now, what it basically boils down to, is just using gmax as a stand alone modeling program (like Wings3D) to model, UVW map and texture your creation, then export it as an .X file to another package for animation.

The happy news is, I’ve found an animation program that works flawlessly with both gmax’s .X file format and Panda’s.

It’s called FragMOTION and you can learn all about it here: fragmosoft.com/

It’s not free however, but at only $20 I think it’s more than affordable (especially if you compare it to the full version of 3DS MAX).

So far, I have successfully exported a UV mapped and textured model in .X file format from gmax, imported it into FragMOTION, animated it, exported it as an .X file again, then loaded it and played its animation in Panda. All without any problems (touch wood) and without once having to open and manually edit ANY of the .X files :smiley:.

For a measly $20 outlay, I now have a fully functional modeling and animation program :laughing:.

The even better news is, that if I just want static, unanimated models, such as levels, trees, buildings…ect, or even simple animations (such as the lid of a chest opening for instance) I can just do all my work in gmax without any need to use FragMOTION at all. I only need FragMOTION for character/skeletal animation.

Now, a word about the gmax MD5 exporter. I downloaded and tried it, but I couldn’t get it to work :cry:. It also looks like it won’t work for simple static/unanimated meshes. So for now, I’m happy with my work-around.

Best of all, Josh and David don’t have to do any work to make it useable :smiley:.

Cheers

Hi folks,

I may have run into a problem after all. When I load the FragMOTION .X file into Panda and loop its animation, the animation plays at ‘super fast’ speed.

I didn’t mention it before, because I believed that the speed of the animation could be manually set in your script, so I didn’t think it was a problem.

The trouble is, I can’t seem to slow it down, no matter what I try. I’m in the process of studying the tutorials and trying to write my own script for viewing my models and animations as they would appear in a game. This is as far as I’ve got:

ActorViewer01

Author: Kathryn Edwards

This script is for viewing models (aka “actors”) and their animations.

import direct.directbase.DirectStart #Initialize Panda and create a window.
from pandac.PandaModules import * #Contains most of Panda’s modules.
from direct.interval.IntervalGlobal import * #Needed to use Intervals to move
#objects in your panda world.
from direct.actor import Actor #Needed to import actors.

#We start with the standard class. However, the class is a subclass of an
#object called DirectObject. This gives the class the ability to listen for
#and respond to events.

class World(DirectObject):

def init(self):

base.disableMouse() #Allow manual positioning of the camera.
camera.setPos ( 0, -8, 2.5 ) #Set the camera’s position.
camera.setHpr ( 0, -9, 0 ) #Set the camera’s orientation.
base.setBackgroundColor( .6, .6, 1 ) #Set the background color. 

#Load the environment model(Sky sphere and ground plane).
self.env = loader.loadModel("models/env")
self.env.setScale(7) #Set the scale.
self.env.reparentTo(render) #Make it display in the scene.

#Define the actor model, then Load it and its animations.
self.MyActor = Actor.Actor("models/Cylinder04", {"anim":"models/Cylinder04"})
self.MyActor.setPos( 0, 0, 0 ) #Set the model's position,
self.MyActor.setHpr( 0, 0, 0 ) #Set the model's orientation.
self.MyActor.setScale( 0.01, 0.01, 0.01 ) #Set the model's scale.
self.MyActor.reparentTo(render) #Make it display in the scene.

#Define the animation for MyActor
self.MyActor.PlayAnimation = Sequence(
  #Interval for the animation. Since no start or end frames were given,
  #the entire animation will be played.
  self.MyActor.actorInterval("anim"), 
  #The animation was animated a little too quickly, so this will play it 
  #at 50% of it's normal speed
  self.MyActor.actorInterval("anim", playRate = .50))
#Once an interval is created, we need to tell it to actually move.
#start() will cause an interval to play once. loop() will tell an interval
#to repeat once its finished. 
self.MyActor.loop("anim")

w = World()

run()


I keep changing the (“anim”, playRate = )) number, but it seems to have no effect at all. Any ideas?

Cheers

In your example code, the ActorInterval you are creating (the one whose play rate you are setting with playRate = 0.50) is not actually being used. Instead, the loop(“anim”) method is the call that is making your actor animate.

To control the play rate in conjunction with the raw loop() method, set it on the actor, e.g.:

self.MyActor.setPlayRate(0.5, "anim")
self.MyActor.loop("anim")

Or, instead of using the raw loop() method, loop your ActorInterval instead:


self.MyActor.PlayAnimation.loop()

Still, there may be a bigger issue. I suspect the FragMOTION X exporter might be writing one record per keyframe, rather than one record per frame. Either convention is supported by the X file format, but x2egg only supports one record per frame. You will need to investigate the options to the FragMOTION X converter. If nothing else, there should be a way to specify the frame rate of the exported animation.

David

Thanks David. I went to the FragMOTION forums and asked about this problem and the fix was really simple, I just needed to download and install the latest DirectX exporter from the site.

So now, when exporting, all I need to do is check ‘Write All Frames’ and it works perfectly. Needless to say, I have now purchased FragMOTION and I’m one very happy customer :smiley:.

Now all I have to do is learn how to program in python :unamused:.

Cheers