# Panda3D

Panda3D es un motor de videojuegos que incluye gráficos, audio, E/S, detección de colisiones, así como otras características relevantes para la creación de juegos en 3D.
Panda3D es un proyecto de código abierto y software libre (desde el 28 de mayo del 2008), bajo la licencia BSD Revisada. Versiones anteriores al 28 de mayo de 2008, no se consideran Software Libre debido a ciertos errores en el diseño de la antigua licencia Panda3D. A pesar de ello, estas versiones antiguas de Panda3D también se pueden utilizar para el desarrollo de videojuegos libres o comerciales sin costo alguno.
El lenguaje de programación de videojuegos para el que fue destinado Panda3D es Python. El motor en sí mismo está escrito en C++, y utiliza un generador-empaquetador automático para exponer la completa funcionalidad del motor en una interfaz de Python. Este enfoque da al programador las ventajas del desarrollo en Python, como el desarrollo rápido o la gestión avanzada de memoria, pero mantiene el rendimiento de un lenguaje compilado en el núcleo del motor. Por ejemplo, el motor es integrado con el recolector de basura de Python, y las estructuras del motor son manejadas automáticamente.
El manual y los programas de ejemplo usan Python, aunque los programadores están trabajando en traducir el manual a C++ y proveer programas de ejemplo en C++.
Un programador que usa Panda3D, típicamente escribe el código en Python, pero también es posible acceder directamente al motor usando código en C++.
Entre los usuarios de Panda3D se incluyen programadores de una enorme cantidad de juegos comerciales, unos pocos de proyectos de código abierto, y una serie de cursos universitarios que aprovechan la corta curva de aprendizaje de Panda3D. La comunidad es pequeña pero activa, las preguntas realizadas en el foro son generalmente respondidas casi al instante.

## Diseño

Panda3D es un motor gráfico de escenas. Esto significa que el mundo virtual es inicialmente un espacio cartesiano vacío en el cual el programador de videojuegos inserta los modelos en 3D. Panda 3D no distingue entre modelos 3D "grandes", como el modelo de una mazmorra o una isla, y modelos 3D “pequeños”, como el modelado de una mesa o una espada. Ambos modelados grandes y pequeños son creados usando un programa de modelado estándar como Blender, 3ds Max o Maya, cargados en Panda 3D, y después insertados en el espacio cartesiano.
El motor gráfico de escenas de Panda 3D expone la funcionalidad de OpenGL y DirectX de una forma bastante literal. Por ejemplo, OpenGL y DirectX pueden crear niebla. Para habilitar la niebla en Panda3D, se guardan los parámetros de la niebla en un nodo en la escena gráfica. Los parámetros de niebla coinciden exactamente con los parámetros de funciones equivalentes en las APIs subyacentes. Se diferencia de ellos, en que se guarda en la escena, mientras que OpenGL y DirectX no lo hacen. Por supuesto, también provee de operadores de alto nivel, como la carga de modelos, ejecución de animaciones, detección de colisiones, etc.
Panda3D fue diseñado antes de la existencia del vertex y pixel shaders. Adquirió soporte para shaders escritos a mano en 2005. No obstante, los usuarios han tardado en aprovechar las modernas técnicas de iluminación por pixel en sus juegos. Los programadores teorizan que esto ocurre porque la programación de shaders puede ser bastante difícil, y por eso muchos programadores de juegos quieren que el motor los pueda manejar automáticamente.
Para remediar esta situación, los programadores de Panda3D, recientemente le han dado al motor la capacidad de sintetizar shaders automáticamente. Esta síntesis ocurre si el modelador de 3D marca un modelado para iluminación por pixel, o si el modelador aplica un normal map, gloss map, self-illumination map, o otra capacidad que excede las capacidades de un pipeline de funciones fijas. La intención de la síntesis es renderizar el modelado como el modelador ha previsto, sin ninguna intervención del programador.

## Herramientas no gráficas

Panda 3D tiene otras capacidades aparte del renderizado 3D. Los principales son:
* Herramientas de análisis de rendimiento.
* Herramientas de exploración de la escena gráfica.
* Herramientas de depuración
* Un completo pipeline de exportación/importación de arte.
* 3D Audio, utilizando ya sea FMOD, OpenAL o Miles Sound System.
* Detección de colisiones.
* Sistema de físicas, y una integración total para el Open Dynamics Engine.
* Soporte para teclado y ratón.
* Soporte para dispositivos E/S inusuales.
* Máquina de estados finitos.
* GUI.
* Herramientas para redes.

## Historia

El estudio Disney VR es una rama creada por Disney para construir atracciones en 3D para los parques temáticos de Disney. Construyeron una atracción llamada "Aladdin's Magic Carpet", y el motor que crearon para ello es lo que finalmente sería Panda3D. El motor en su forma actual se parece muy poco a sus primeros años. Con el tiempo, Panda3D fue usado para paseos VR adicionales en los parques temáticos de Disney, y fue utilizado finalmente en la creación de Toontown Online, un juego en línea sobre un mundo de dibujos animados, y después para la creación de un segundo MMORPG, Pirates of the Caribbean Online.
En el 2002, el motor fue liberado como código abierto. Según los autores, esto se debe a que "sería más fácil trabajar con otras universidades en proyectos de investigación sobre la Realidad Virtual". Sin embargo, le llevó algún tiempo al Panda3D, el despegar como un proyecto de código abierto. Según el artículo:
   El sistema, a pesar de que es bastante usado por el equipo que lo desarrollo, no estaba lo "suficientemente listo para ser de código abierto". Había varios usuarios interesados, pero la compilación e instalación del sistema fue increíblemente compleja, y había muy poco material sobre documentación y ejemplos de código, así que no había una comunidad significativa de código abierto en marcha.
De todos modos, el hecho de haber liberado el motor permitió que el centro tecnológico de entretenimiento de Carnigie Mellon se uniera al desarrollo del motor. Mientras que ingenieros de Disney continuaron con la mayor parte del desarrollo, el equipo de Carnegie Mellon se propuso el rol de pulir el motor para el consumo público, escribiendo documentación y añadiendo determinadas características de alto nivel como los shaders.
El nombre de Panda3D fue una vez un acrónimo: "Platform Agnostic Networked Display Architecture" ("Arquitectura de Visualización en Red de Plataforma Agnóstica"). No obstante, desde entonces la frase ha perdido gran parte de su significado, la palabra "Panda3D" es raramente considerada como un acrónimo más.

## Licencia de software

En el 2002, cuando el motor fue liberado, el objetivo de los desarrolladores fue crear una licencia libre. Sin embargo, la licencia tenía algunos defectos que la hacía no libre: Se requiere que los cambios sean verificados y se prohíbe expresamente la exportación de software a varias naciones con las cuales los Estados Unidos tenía embargos comerciales.
El miércoles 28 de mayo de 2008, la rama principal del desarrollo de Panda3D cambia a la licencia BSD. Sin embargo, las versiones antiguas siguen usando la antigua licencia.
Panda3D hace uso de multitud de librerías de terceros cuyas licencias tampoco son Software libre, incluyendo FMOD, Nvidia Cg, DirectX, y MFC.

## Usuarios

Aquí hay una lista parcial de compañías y productos comerciales que han utilizado Panda3D:
* Disney's Toontown
* Disney's Pirates of the Caribbean Online
* SimOps Studios: Code3D
* MSA's Thermal Enforcer
* Little Mermaid Pinball, Aladdin Pinball, and Pirates Pinball
* Angels Fall First: Second Antarean War
Aquí hay una lista incompleta de proyectos de software libre construidos sobre Panda3D:
* La Granja de Los Poderosos
* Herdelia
* Vikings
* Funtrench's Eden