Is everything an Egg?


What do I mean by my subject “Is everything and Egg?”, well, I’ve been trying to learn a 3D game engine called Torque. It was originally created for a game called “Tribes”. It was a multi-player first person shooter game.

Now in Torque, there are various formats used to make the final game. .dts (usually characters), .dif (usually buildings), .map (this is the environment and buildings combined).

You create your characters in your 3D program of choice, Maya, Blender, 3DSMax etc… then export to .dts. Your buildings and other 3D objects can be created with something called Quark, CartographyShop etc… then exported to .MAP and finally converted to .DIF. Have I lost anybody yet?

Finally, the actual ground and environments is put together with a proprietary scenery editor that is built-in to the 3D engine. You hit a function key, it enters edit mode, then you select a tree, a building, or mold the grown into a mountain and apply a texture. This can be a very time-consuming process.

I know that Panda is 3D graphics library and not necessarily a 3D game engine like Torque so that may be the reason I’m having trouble finding comparable processes.

It seems that in Panda, everything is exported to .egg format. Is this the case? How do you create your 3D world? Mountains, place your buildings etc… Do you create your 3D buildings in Maya and also your 3D mountains, bridges etc…?

I’m very confused and I haven’t been able to find the answer in your documentation.

One last comment. All the game types seem to be cartoon style. Is just because the original creator of Panda is Disney? So everybody is just following the tradition (ToonTown) or is this because of some limitation with the 3D engine.

Sorry for the long post. I know someone will probably be able to understand what I’ve rattled on about here and maybe lend a little bit of Panda3D game design perspective on me.

Thanks for your time,


I understand exactly what you’re talking about.

Some egg files contain solid models. Some egg files contain rigged (animatable) models. Some contain animations. From what you’re telling me, I guess torque chooses to use three different file extensions for these three things. Panda chooses to give them all the same extension, but that doesn’t mean that there aren’t three different kinds of things inside the egg files.

There’s also another file format that Panda uses, “bam,” which differs from egg in that egg is designed to be human-readable, but bam is designed for fast loading. Also, panda includes file format converters, so it can load a bunch of assorted file formats like X, LWO, and so forth. That’s not really native.

To answer your second question — the vast majority of these 3D worlds are created by students in a 2-week period at the entertainment technology center. They just don’t have enough time to create photorealistic worlds. The thing is, cartoon-style doesn’t require artistic perfection. If you have cartoon-style characters and the proportions a little off, nobody will notice. If the colors on something are a little too bright or a little too muted, nobody will care. But if you do things in a photorealistic style, every flaw no matter how tiny will be noticeable. So they intentionally choose stylized artwork in order to make the projects more manageable.

Egg is a file format…a human-readable/editable one. They describe models, but you can load models from other formats directly.

I believe it is true that Panda3d has no other treatments for 3d constructs…there is no terrain renderer that takes heightmaps, nor special code for rendering interior spaces that would use a format like bsp. There isn’t even a skybox.

I would suggest you follow through the tutorials so you understand the scenegraph as it is implemented in Panda3d. You’ve basically got a camera you can point at 3d models. The ‘ground’ is a model, if you make a panda walk by that is a model, if you make the panda walk into a building, the building is a model. All of those models could be loaded from egg files, or .X files, or .bam files, but once they are loaded they get the same treatment from the engine.

As for the ‘cartoony’ look, there is nothing about the engine restricting it to toon-style rendering. It does only do vertex lighting at the moment. It is not an engine that is going to compete with Half-life 2 or Doom III, not even close. I don’t believe it intends to compete on the basis of photo-realistic beauty, however, but rather ease of rapid development and simplicity. But it does present a sufficient graphics capability that with the application of artistic vision and talent, your game can have graphics that do the job whether the theme is cartoonish or not.

For my own project, I have decided the renderer is sufficient, and I know that by the time my project is done the engine will likely support more sophisticated stuff - perhaps I, or you, will write the code that makes it happen. Remember you have the source!

This is how I understand things to be. I stand ready to be corrected =)

It does only do vertex lighting at the moment.

That’s correct, although as I understand it, the only thing really preventing it from supporting bump mapping is that it doesn’t yet compute tangents and binormals. The only reason it doesn’t do that is that there’s no place to store a tangent or a binormal inside the internal vertex array representation. David Rose is well on the way to reprogramming those internal vertex arrays even as we speak. It’s only a matter of time (and fairly short time, I think) until Panda support bump mapping.

It is not an engine that is going to compete with Half-life 2 or Doom III, not even close.

Doom III isn’t actually all that complicated an engine, when it comes down to it. It supports two powerful things: shadow volumes, and bump mapping. It ties those two things together in a graceful way.

But really, doing the same in panda3d isn’t as hard as you might thing. We need the bump mapping support, but David is already on top of that. We would need shadow volume support as well. Shadow volumes are trickier, but really, it’s a question of some determined individual sitting down with David Rose, choosing a design, and then hacking for a month. I personally don’t have that month, but it’s entirely possible that some ambitious soul could do it.

I thank you for your responses. Please, I didn’t mean to offend anyone with the “cartoonish looks” statement. I actually enjoy the stylized environments. I play World of Warcraft more or less to look at their artwork and how they’ve made that environment. That is a beautiful example of what can be done with low-poly modeling.

I’m not knocking Panda3D either, I’m happy with its capabilities! What has attracted me to Panda is its use of Python. I use Python at my day-job so when I found Panda was really excited!

Thanks again.


The way that Panda3d uses Python is not an afterthought, like with so many other engines. I found that usually the python bindings are maintained by some peripheral volunteer to the project and invariably fall off the map - then are taken up by another flag-bearer, who decides to change it from swig to boost, or vice versa.

I decided for me, the attraction of having Python such an integral part of the engine will save me far more headaches, even if I have to add to the graphics engine. As Josh said, the difference between Panda3d’s capabilities and more snazzy FPS engines is not that great.

Maya/3DSMax can be used to create all the content (3d models etc) for use in Panda3D? If that’s the case, that alone is a wonderful feature. Coming from an evironment like Torque where you need several different programs to make the complete game. Torque is good at what its for, however, I’m able to leverage my knowledge of Python/C instead of needing to pickup another language (TorqueScript).

Yes, you can use 3DS Max, Maya, and/or Blender to create models and animations to use in Panda3D worlds. More info on exporting models from 3D modeling programs can be found in the manual:

ok, I guess the reason I’m asking whether or not you can use Maya/3DS Max etc… is because in Torque (what I’ve been using prior to Panda), certain file formats have a bigger performance hit than others. For instance, character models are done in Maya and then exported via a converter to .dts format much like Maya to Egg. However, in Torque, you would have a big performance hit if you used Maya and .dts to model a large building for instance. Torque uses BSP for buildings and such. I’m having a hard time visualizing how Panda works even after looking at the tutorials where everything can be created from Maya. I"m excited about that, because it means a lot less software to use, but still confused.



maya2egg has two different modes; one mode converts the model as an animated character (with the -a parameter), and the other mode converts it as a static model (without the -a parameter).

It is true that the two different kinds of models are optimized very differently within Panda, and they are indeed represented differently within the egg file, but Panda’s egg syntax allows lots of different sorts of things to be represented within it–there’s no need to have a completely different file format for different kinds of objects.


Thanks David.

I’m learning more and more about Panda daily!