Panda3D is a game engine which includes graphics, audio, I/O, collision
detection, and other abilities relevant to the creation of 3D games.[1]
Panda3D is open source and, as of May 28, 2008, free software under the revised
BSD license. Releases prior to May 28, 2008 are not considered Free Software due
to certain errors in the design of the old Panda3D license. Despite this, these
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.
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, questions on
the forum are generally answered quickly.
Design
Panda3D is a scene graph engine.[2] 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 programs such as Max or Maya, loaded into Panda3D, and then 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.
Currently, the engine supports most modern per-pixel lighting techniques, with
one glaring omission: dynamic shadows. Although it is possible to implement
dynamic shadows using Panda3D by writing the necessary shaders oneself, it is
not easy to do. The developers recognize this as a serious limitation and plan
to expand the shader generator's capabilities to incorporate this feature in the
next year or so.[citation needed]
Non-Graphical Capabilities
Panda3D provides capabilities other than 3D rendering. Chief among these are:
Performance analysis tools.
Scene graph exploration tools.
Debugging tools.
A complete art export/import pipeline.
3D Audio, utilizing either FMOD, OpenAL or Miles Sound System.
Collision detection.
Physics system, and full integration for the Open Dynamics Engine.
Keyboard and Mouse support.
Support for unusual I/O devices.
Finite state machines.
GUI.
History
The Disney VR studio is a branch of Disney that was created to build 3D
attractions for Disney theme parks. They built an attraction called "Aladdin's
Magic Carpet," and the engine they created for that was eventually to become
Panda3D. The engine in its current form bears little resemblance to those early
years. Over time, Panda3D was used for additional VR rides at Disney theme parks,
and was eventually used in the creation of Toontown, an online game set in a
cartoon world. [4]
In 2002, the engine was released as open source. According to the authors, this
was so that they "could more easily work with universities on Virtual Reality
research projects." [5] However, it took some time for Panda3D to take off as an
open-source project. From the article:
The system, although quite usable by the team that developed it, was not quite "open
source ready." There were several interested users, but building and installing
the system was incredibly complex, and there was little in the way of
documentation or sample code, so there was no significant open source community
right away.
However, the open-sourcing of the engine allowed Carnegie Mellon's Entertainment
Technology Center to join in the development of the engine. While Disney
engineers continued to do the bulk of the development, the Carnegie-Mellon team
built a role for itself polishing the engine for public consumption, writing
documentation, and adding certain high-end features such as shaders.
Panda3D's name was once an acronym: "Platform Agnostic Networked Display
Architecture."[6] However, since that phrase has largely lost its meaning, the
word "Panda3D" is rarely thought of as an acronym any more.
Software License
On Wednesday 28 May 2008, the trunk of Panda3D development switched to the BSD
license. Binaries and source of version 1.5.3 are now available under this
license. However, old releases still use the old license.[7] The information
below is about the old license.
In 2002, when the engine was open sourced, the goal of the developers was to
create a Free Software license. However, certain mistakes were made, and the
resulting license is not Free Software. The following is the rights-granting
portion of the license:
Licensor hereby grants to any person obtaining a copy of the Software a
nonexclusive license to use, copy, modify, merge, publish, distribute, and/or
sublicense copies of the Software, and to permit persons to whom the Software is
furnished to do so, on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
express or implied. [8]
This clause is typical of a Free Software license. Among other things, it allows
the creation of free games and commercial games at no charge. Most of the
license is fairly typical Free Software boilerplate. However, there are two
clauses in the license that are not free. The first of these is:
An electronic copy of the source code for major modifications that You make to
the Software should be forwarded to Licensor at Panda.Project@Disney.com...
This clause arguably requires you to give any modifications you make back to
Disney. This is not allowed in a Free Software license: a true Free Software
license allows you to keep modifications to yourself. The second clause that is
not Free Software compatible is as follows:
The Software may not be downloaded or otherwise exported or reexported into (or
to a national or resident of) Cuba, Libya, North Korea, Iran, Syria, or any
other country to which the U.S. has embargoed goods...
The intent of this clause was merely to avoid liability by complying with US
export law. However, this was a mistake. A Free Software license may not
discriminate against Cubans, Libyans, and so forth. Even if the law
discriminates, the license is not allowed to be a party to that discrimination
or to fuel it.
In addition, Panda3D makes use of several third party libraries whose licenses
are also not Free Software, including FMOD, FFTW, and ARToolKit. The developers
have acknowledged these shortcomings and are in the process of changing the
particularly onerous terms of the license to meet the requirements of Free
Software.