GSoC 2020 Ideas

About Panda3D

Thank you for your interest in Panda3D! Panda3D is an open source framework for 3D rendering and games. It combines the speed of C++ with the ease of use of Python in order to provide users a fast rate of development without sacrificing on performance.

Panda3D is a sub-organization of the Python Software Foundation for 2020. Please visit the PSF GSoC website for more information on how to apply.

Contacting Panda3D

IRC and Discord are the best ways to reach us. A bridge exists to connect IRC channels to Discord channels. The IRC bot facilitating this is called p3d.


  • Mitchell Stokes (Moguri, UTC – 7)
  • rdb (UTC + 1, UTC + 2 after March 31st)
  • CFSworks (UTC – 6)

All of the mentors listed can help mentor any of the ideas listed below. However, for convenience, the primary contact for ideas are listed. There is also a “@GSoC Mentors” role on Discord that can be used to ping all of the mentors.

Getting Started

The Panda3D source code is available on GitHub. Please take a look at the README for information on building Panda3D and running tests. The build instructions also include information on gathering various third-party dependencies (both optional and required) to build Panda3D. Questions about building Panda3D or gathering dependencies are welcome in our IRC channel and Discord server. It is also recommended to go through the Hello World tutorial in the Manual to get a feel for using Panda3D.

Our issue tracker is also on GitHub, and changes can also be submitted using GitHub Pull Requests. We have a “good first issue” label that can be used to find easier tasks to learn on and get familiar with Panda3D development. Expanding on the unit tests is also a welcome way to learn more about Panda3D.

Writing your GSoC application

Panda3D is participating as a PSF sub-org. The student application information for Python can be found here. Remember, Panda3D must be in title of your application or else Google will not know what it is about!

Project Ideas

Native Video Loading

  • Description: Currently loading videos is handled by FFmpeg, which supports many different codecs and file formats. However, this flexibility comes at a cost (FFmpeg can be a large dependency and is LGPL-licensed), and it would be nice to have one or more video formats that Panda3D could load natively using more permissive licenses. This gives users the ability to forgo using FFmpeg if they stick to a narrower list of native options. We already do this with libvorbis and libopus for audio, and those integrations can be used as an example. Potential options for integration includes libvpx and libtheora.
  • Skills: C++
  • Difficulty level: medium
  • Primary mentors: Mitchell Stokes, rdb

Recast and Detour Integration

  • Description: Recast and Detour are tools/libraries for building navigation meshes and performing pathfinding, which are both features that could benefit Panda3D. This task would first involve creating a Panda3D object to represent navigation meshes that can be queried to perform pathfinding. This task can be further expanded to be able to read navigation meshes from files (EGG, BAM) and to offer various tools for building navigation meshes. Some vague and rough notes on this can be found here.
  • Skills: C++
  • Difficulty level: medium
  • Primary mentors: Mitchell Stokes, rdb

Deployment Tools Improvements

  • Description: Starting with version 1.10, Panda3D introduced new tools based on setuptools for deploying Python Panda3D applications (link to docs). Since these tools are new, there are plenty of opportunity for improvements. A project will likely need to include multiple, smaller improvements, which could include:
    • Move logic from the build_apps and bdist_apps commands into their own scripts so they can be run without setuptools. The commands would become wrappers around the scripts.
    • Use entry points and pkg_resources to add additional hooks. These hooks could include:
      • A build_apps hook for settings options like include_modules and package_data_dirs.
      • Pre/post build hooks for build_apps that run for each platform.
      • Pre-packaging hook for bdist_apps that runs for each platform.
    • Replace use of egg2bam with loader.loadModel(). See this issue for more information.
    • Clean up paths that include whl files in tracebacks. The path up to and including __whl_cache__ should be stripped. This cleans up the output and leaks less information about the build machine.
    • Cleanup build output
      • Cleanup false-positives for missing Python modules
      • Cleanup false-positives for missing dependencies
    • Add better support for hybrid graphics in deployed applications See this issue for more information.
    • Add support for deploying to Android
      • This is a harder one with more unknowns
      • Need to figure out how to get code/wheels. There are no Android platform tags, so we may need to create one and host some popular packages.
      • Build deploy-stub on Android and package as an apk
      • Insert binary_blob (contains code/metadata), dependencies, and other included data (e.g, game files) into the apk.
  • Skills: Python
  • Difficulty level: easy
  • Primary mentors: Mitchell Stokes

SoLoud Integration

  • Description: Panda3D supports multiple audio backends including OpenAL and FMOD. However, it does not support an audio backend that uses a permissive license. SoLoud is a promising looking audio engine that uses a zlib license. The OpenAL and FMOD backends can be used as an example for implementing another audio engine. There is a GitHub issue for adding SoLoud support to Panda3D.
  • Skills: C++
  • Difficulty level: easy
  • Primary mentors: rdb, CFSworks, Mitchell Stokes

glTF 2.0 Exporter

  • Description: glTF 2.0 is a modern model format that is widely supported by 3D engines and modelling programs. To make it easier to get models in Panda3D’s own .egg or .bam formats into a modelling program, it would be useful to have an exporter plug-in that can convert models from Panda3D’s in-memory representation to a .gltf file.
  • Skills: C++
  • Difficulty level: medium
  • Primary mentors: rdb