The Panda game engine is a C++/Python based open source game engine form in collaboration between Carnegie Mellon and Disney, previously used to power MMOs such as Toon Town Online and Pirates of the Caribbean. In addition to the 1.10.0 release they performed a complete facelift, with a new logo and a much nicer overall website. The major improvements to Panda in 1.10.0 include support for Python 3.x in addition to Python 2.x, improvements to the shader process and underlying OpenGL renderer, cross platform gamepad support, Android port improvements, HarfBuzz text shaping and more.
Complete details from the release notes:
General
- Experimental ability to build for Android
- New input framework to natively support gamepads, joysticks, etc.
- Multi-threaded render pipeline is a lot more stable now
- New setuptools-based deployment pipeline
- Improvements to mouselook smoothness
- Cache is now at $XDG_CACHE_HOME/panda3d (~/.cache/panda3d), not ~/.panda3d
- Addition of unit test suite
- Many improvements to thread safety
- Many performance improvements
- Tons of bugfixes
- Big style cleanup of C++ source code
Python API
- Complete support for Python 3
- Support for coroutines and async/await
- Property interfaces have been added for many settings
- More flexible handling for keyboard arguments in C++ APIs
- Python bindings are completely separated out of the C++ libraries.
- Interrogate binding generator has many improvements.
- Use of pandac.PandaModules is discouraged, use panda3d.core et al
- Use of libRocket is discouraged due to lack of Python 3 support
- Tasks are now sorted in addition order when lacking a sort value
- Fixes iris/fade transitions for extreme aspect ratios
- WeakNodePath is now exposed to Python
- WindowProperties.size(x, y) deprecated; use WindowProperties(size=(x, y))
- Calling bare run() is deprecated, use base.run() instead
- downcastTo*() methods have been removed, they were already no-ops
Rendering
- Add new shader-based terrain rendering method (ShaderTerrainMesh)
- The default ColorAttrib mode is now T_vertex
- The ColorAttrib T_off mode now properly disables vertex colors entirely
- Make handling of color attributes more consistent between renderers
- Ability to create an OpenGL core profile context; set “gl-version 3 2”
- Experimental support for reverse-Z rendering for best depth precision
- sRGB framebuffers supported more widely
- Support for infinite near/far clip in lens
- Add some PBR material parameters to material class
- Addition of more built-in GLSL shader inputs; see manual.
- Add p3d_FragData[] GLSL output for MRT in GLSL 1.30
- Add flag enabling vertex shader control over point size
- Support signed ints and double-precision floats in vertex data with GLSL
- Support unsigned 11/10/10-bit floating-point textures and vertex data
- Support for SSBOs via ShaderBuffer class
- Support OpenGL FBO buffers without any attachments
- Support passing uint variables to GLSL shader
- Allow rendering objects with empty vertex data (for vertex pulling)
- Add LogicOpAttrib, for supporting logical operator blending
- Improvements to OpenGL ES support
- Support for geometry with adjacency information
- Change default alpha blending to improve blending rendered result
- New method for obtaining native OpenGL texture object
- Support windowless offscreen rendering on macOS
- Panda resets OpenGL state better before and after draw callbacks
- OpenGL renderer better supports debugging tools like apitrace
- Support fixed-depth billboards, useful for 2D tags that don’t change size
Shader generator
- Significant performance improvements
- Support for point light shadows
- Hardware skinning support
- Changes to match fixed-function pipeline better
- Fixes for normal vector normalization
- Support multiple normal maps (uses Reoriented Normal Mapping)
- Tracks modifications to materials and texture stages automatically
Lighting
- Allow specifying light color based on color temperature
- Setting specular color of a light separately is deprecated
- New GLSL inputs to make implementing lighting in shaders much easier
- Add representation for sphere light and rectangle light
- Efficiency improvements for passing light information to shader
- Interocular distance for shadow cameras now always defaults to 0
- Add low-level lighting module from RenderPipeline
Textures
- Support cube map arrays
- Support buffer textures
- Many more texture formats supported
- BC4 and BC5 compression modes supported
- Proper depth textures supported in DirectX 9 renderer
- set_ram_image(_as) directly supports buffer protocol
- TexturePeeker supports more formats and component types
Text
- Dramatic improvements to text rendering performance
- Support for HarfBuzz for higher-quality text shaping and kerning
- Support for right-to-left text
- Support for signed-distance-field rendering in egg-mkfont
Audio/video
- The default unit for audio is now 1 meter for each Panda unit.
- Native .flac loader
- Support videos with alpha channel in ffmpeg
- OpenAL stability improvements, especially on macOS
- Support loading .opus files with libopusfile
- Fix various memory leaks
Physics / collisions
- CollisionTube is renamed to CollisionCapsule.
- Box-box collision test is improved to work well with the Pusher
- More box tests for collision system: box-into-plane, box-into-poly
- Capsule (tube) can be used as “from” shape into plane, sphere, capsule, box
- Bullet objects are serializable to .bam files.
- Bullet bindings are now thread safe.
- Bullet debug drawer is more efficient; no longer inherits GeomNode.
- Various fixes to bullet vehicle wheel synchronization
- PhysX bindings are deprecated.
Pipeline / loading
- Support for Assimp library to load a broad variety of model formats
- Ability to specify min-lod, max-lod, lod-bias in .egg file
- Egg file materials support PBR-style material parameterization
- Support loading more DDS files, including DX10-style ones
- Add support for OpenEXR and HDR textures
- Support line/point thickness in bam2egg
- bam2egg no longer inserts a vestigial ModelNode at the top
- bam2egg supports depth test, offset, cull bin attributes
- Accept a .gz file wherever a .pz file is accepted
- egg-palettize supports mirror and border-color wrap modes
- More robust checks against memory corruptions when loading bad .bam files
- Support for Maya 2017 and 2018
- Support preprocessing GLSL shaders created with Shader.make
Build
- We now require using MSVC 2015 or 2017 to compile on Windows.
- At least GCC 4.8 is now required.
- With GCC/clang, enabling C++11 is now required.
- Allow building with more recent ffmpeg versions
- Support for old FFMpeg versions (before 1.1) dropped.
- The ppremake build system has been removed.
- Support for OpenSSL versions before 0.9.7 has been dropped.
C++
- Use of NULL is replaced with nullptr
- WeakPointerTo now requires use of lock() method for thread safety
- Mutex et al now satisfy C++11 Lockable constraints
- Panda headers no longer contain
using namespace std;
- PN_int32 et al have been removed, use stdint.h types instead
- The need to link with pystub and add Python include dirs is removed.
You can learn more about this release on the Panda developer blog and the source is available on Github on the BSD license. You can download the Panda SDK here with Linux, Mac and Windows downloads available.