GSoC 2019 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 to give you a fast rate of development without sacrificing on performance.

Panda3D is a sub-organization of the Python Software Foundation for 2019. 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.

Mentors

  • 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.

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: easy
  • Primary mentors: Mitchell Stokes, rdb

Assimp Export

  • Description: BAM is Panda3D’s native, binary file format. It stores data in a way that is easy and quick for Panda3D to load. However, converting files to BAM is (mostly) a one-way trip. A bam2egg tool exists to convert BAM to Panda3D’s native, text file format. This can be expanded upon by leveraging Assimp’s export capabilities. Panda3D already supports Assimp import. Static meshes, materials, and lights would be the first priority. Skinned meshes, animations, and collision solids can be looked at if time permits.
  • Skills: C++, Assimp
  • Difficulty level: medium
  • Primary mentors: Mitchell Stokes, rdb

Collision improvements

  • Description: Panda3D has multiple options for collision detection. On such option is Panda3D’s builtin collides library. This builtin option is useful for users who do not need the extra features available in other libraries such as Bullet or ODE and the extra complexities that come with them. The builtin collision detection can be improved by adding the following collision tests: Parabola into Box, Parabola into InvSphere, Box into Capsule. In addition to these new tests, a new CollisionSolid based on heightfields would be very useful for terrain. This would require adding a new CollisionSolid type and writing some collision tests for the new solid. A CollisionHeightfield would only need to be an “into” solid like CollisionPolygon is. Information about using the builtin collision detection, the various CollisionSolids, and which tests currently exist can be found in this manual section.
  • Skills: C++, collision detection, 3D math (linear algebra recommended), algorithms
  • Difficulty level: medium
  • Primary mentors: rdb, CFSworks

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.
  • Skills: C++
  • Difficulty level: medium
  • Primary mentors: Mitchell Stokes, rdb

Direct3D 11 renderer

  • Description: Panda3D offers many different rendering backends to support various different graphics APIs including OpenGL, OpenGL ES, Direct3D 9, and a software renderer. While Panda3D’s OpenGL renderer can make use of “modern” (OpenGL 3+) features, Direct3D 9 is rather old at this point, and as such, Panda3D’s Direct3D support has also fallen behind. Implementing a Direct3D 11 renderer (other renderers can be used as an example), would help bring Panda3D’s Direct3D support back in line with other modern engines. 
  • Skills: C++, graphics APIs, Direct3D 11
  • Difficulty level: hard
  • Primary mentors: rdb