A free/libre, cross-platform, 3D graphics library for developing games written in Python (mostly) or C ++. In particular, it supports graphics, 3D audio, I/O, collision detection, physics (physics engine), network, artificial intelligence. This library is put forward for its rapidity close to a compiled language, its error tolerance, and its learning curve quite fast.

Description [en]

Powerful, mature open-source cross-platform game engine for Python and C++, developed by Disney and CMU

Panda3D is a game engine, a framework for 3D rendering and game development for Python and C++ programs. Panda3D is Open Source and free for any purpose, including commercial ventures, thanks to its liberal license.

Panda3D is licensed under the Modified BSD License.

Panda3D Basics

Panda3D is a 3D engine: a library of subroutines for 3D rendering and game development. The library is C++ with a set of Python bindings. Game development with Panda3D usually consists of writing a Python or C++ program that controls the Panda3D library.

Panda3D was created for commercial game development and is still used for developing commercial games. Because of this, the engine needs to emphasize four areas: power, speed, completeness, and error tolerance. Everyone knows what power and speed are. But completeness and error tolerance deserve some extra commentary.

Completeness means that Panda3D contains tons of unexciting but essential tools: scene graph browsing, performance monitoring, animation optimizers, and so forth. These things may not be sexy, and as a result, open-source engines often don't have them. But when you're serious about getting work done, and not just playing, these tools need to be there.

Error tolerance is about the fact that all game developers create bugs. When you do, you want your engine to give you a clear error message and help you find the mistake. Too many engines will just crash if you pass the wrong value to a function. Panda3D almost never crashes, and much code is dedicated to the problem of tracking and isolating errors.

Finally, to come back to power and speed: the best way to gauge Panda3D's capabilities is to take a look at the Sample Programs. These are short programs that demonstrate a sampling of Panda3D's capabilities. The screenshots have frame-rates in the upper-right corner, taken on a Radeon X700.

Panda3D was developed by Disney for their massively multiplayer online game, Toontown. It was released as free software in 2002. Panda3D is now developed jointly by Disney and Carnegie Mellon University's Entertainment Technology Center.

Panda3D is not a Beginner's Tool or a Toy

To successfully use Panda3D, you must be a skilled programmer. If you do not know what an "API" is, or if you don't know what a "tree" is, you will probably find Panda3D overwhelming. This is no point-and-click game-maker: this is a tool for professionals. While it is important to point that out so you have accurate expectations, it's also relevant to be aware that Panda3D is one of the easiest and most powerful engines you will ever use, and we welcome your participation.

If you are just getting started with programming, we suggest that your best option is to start with a class on programming. Alternately, you could try teaching yourself using a training tool like Alice, from CMU.

Panda3D supports the full range of what modern engines should: it provides convenient support for normal mapping, gloss mapping, HDR, cartoon shading and inking, bloom, and a number of other things. It also allows you to write your own shaders.

People sometimes have the mistaken impression that Panda3D is written in Python, which would make it very slow. But Panda3D is not written in Python; it's written in C++. Python is just used for scripting. Developers usually write the performance-intensive bits, if any, in C++ or something similar Cython. To see what kind of framerate a small Panda3D program typically gets, take a look at the screenshots of the Sample Programs. Those were taken using an old Radeon x700. Of course, only a sample program can run at 400 fps like that, but for a real game, 60 fps is quite attainable. One caveat, though: to get that kind of performance, you need to understand 3D cards and 3D performance optimization. It doesn't happen automatically. Panda3D includes profiling tools you need to hit 60 fps.

Who is Working on Panda3D

There are a number of developers in the commercial and open-source community. Currently, besides the active contributions from the open-source community, the most active member of the development community is Disney. Disney's primary interest in Panda3D is commercial. Panda3D is being used in the development of a number of Disney games and amusement-park exhibits. To serve Disney's needs, Panda3D must be a fully-featured engine, capable of all the performance and quality one expects in any 'A-grade' commercial title.

The most supported language is Python. Though you can use C++ too, the documentation is mostly aimed at Python use.

Wikipedia:

Panda3D is a game engine that includes graphics, audio, I/O, collision detection, and other abilities relevant to the creation of 3D games.

Panda3D is open source and is, as of May 28, 2008, free software under the revised BSD license. Releases prior to that date are not considered free software due to certain errors in the design of the old Panda3D license. Despite this, those older releases of Panda3D can also be used for both free and commercial game development at no financial cost.

Panda3D's intended game-development language is Python. The engine itself is written in C++, and utilizes an automatic wrapper-generator to expose the complete functionality of the engine in a Python interface. This approach gives a developer the advantages of Python development, such as rapid development and advanced memory management, but keeps the performance of a compiled language in the engine core. For instance, the engine is integrated with Python's garbage collector, and engine structures are automatically managed.

The manual and the sample programs use Python, although the developers are working on translating the manual to C++ and providing C++ sample programs.

A developer using Panda3D typically writes code in Python, but it is also possible to directly access the engine using C++ code.

The users of Panda3D include the developers of several large commercial games, a few open source projects, and a number of university courses that leverage Panda3D's short learning curve. The community is small but active, and questions on the forum are generally answered quickly.

Design

Panda3D is a scene graph engine. This means that the virtual world is initially an empty Cartesian space into which the game programmer inserts 3D models. Panda3D does not distinguish between "large" 3D models, such as the model of an entire dungeon or island, and "small" 3D models, such as a model of a table or a sword. Both large and small models are created using a standard modeling program such as Blender, 3ds Max, or Maya. The models are then loaded into Panda3D and inserted into the Cartesian space.

The Panda3D scene graph exposes the functionality of OpenGL and DirectX in a fairly literal form. For instance, OpenGL and DirectX both have fog capabilities. To enable fog in Panda3D, one simply stores the fog parameters on a node in the scene graph. The fog parameters exactly match the parameters of the equivalent calls in the underlying APIs. In this way, Panda3D can be seen as a thin wrapper around the lower-level APIs. Where it differs from them is that it stores the scene, whereas OpenGL and DirectX do not. Of course, it also provides higher-level operators, such as loading models, executing animations, detecting collisions, and the like.

Panda3D was first engineered before the existence of vertex and pixel shaders. It acquired support for manually written shaders in 2005. However, users have been slow to leverage modern per-pixel lighting techniques in their games. The developers theorize that this is because shader programming can be quite difficult, and that many game developers want the engine to handle it automatically.[citation needed]

To remedy this situation, the Panda3D developers have recently given Panda3D the ability to synthesize shaders automatically. This synthesis occurs if the 3D modeler marks a model for per-pixel lighting, or if the modeler applies a normal map, gloss map, self-illumination map, or other capability that exceeds the capabilities of the fixed-function pipeline.[3] The intent of the synthesis is to render the model as the modeler intended, without any intervention from the programmer.

Non-graphical capabilities

Panda3D provides capabilities other than 3D rendering. Chief among these are:

Features

☯ Just Works, Right out of the BoxNo-hassle install:☑ Convenient installer packages for Windows, Mac OS X and Linux☑ Only one external dependency: working graphics driver☑ Sample programs run right out of Start Menu☑ No compilation step needed

☯ Full Python IntegrationAutomatically-generated wrappers expose full functionality of the engine.☑ All Python versions from about 2.4 to newest 2.x supported☑ Highly optimized: all core functionality in C++☑ Thoroughly-tested: two commercial MMOs in Python☑ Panda3D structures garbage collected when using Python☑ Manual and sample programs use Python

☯ Exposes Full Power of Graphics APIModern OpenGL/DirectX features exposed directly to Panda3D user:☑ High-level shader languages: Cg, GLSL☑ Powerful interface between shaders and engine☑ Support for render-to-texture, multiple render targets☑ Use of depth/shadow/stencil textures

☯ Mature, Complete SystemMature system used to deliver several commercial games. Contains everything you need, not just the "sexy" stuff:☑ Converters for a number of file formats☑ Font file importers☑ Tools to package games into redistributables☑ Means to pack art assets into encrypted bundles☑ Lots of other boring but essential stuff