Skip to main content

3D Graphics Programming Toolkit

Project description

Payton 3D SDK

Payton 3D SDK Screencast

![example workflow](https://github.com/sinanislekdemir/p## Examples

Personally, I don't really read long descriptive documentation unless necessary. I prefer things simple and self-explanatory. Therefore, instead of writing lengthy documentation, I create simple examples to demonstrate each feature of Payton without requiring deep dives into the internals.

Examples can be downloaded from the Payton Github Page.

You can either download the entire repository as a zip file or you can simply git clone it.ctions/workflows/pythonpackage.yml/badge.svg) Downloads Downloads

🎭 Motion Capture Data

Payton includes support for BVH (Biovision Hierarchy) motion capture files. For extensive motion capture datasets, you can find thousands of BVH files from the Bandai Namco Research Motion Dataset. The example BVH files included with Payton are sourced from this dataset.

Payton is a 3D Software Development Kit designed as a general-purpose playground for programming. With Payton, users can quickly kickstart their ideas and create tools for next-level development, including map editors, small animations, algorithms, or artificial intelligence for games. Unlike complex game engines and libraries that can be time-consuming to set up, Payton comes with sensible pre-configured defaults, making it unique and simple to use.

Payton is not intended to be a full-featured game engine or complete 3D environment, as there are already plenty of excellent tools available for those purposes. Instead, it excels at rapid prototyping and tool development, allowing users to easily visualize their concepts and achieve their goals. Users can seamlessly transition from Payton to other platforms when their projects outgrow its scope.

While 2D graphs and charts are useful for reports, many scenarios require visualizing data in 3 or 4 dimensions. Payton enables users to extend their graphics into higher dimensions and process real-time data from sensors, cameras, or any other data source. These sources can include thermometers, random number generators, IoT devices with speed sensors, maps, vehicle diagnostic ports, or even time-based mathematical formulas. Although projects can become complex, Payton is designed to remain accessible to beginners who can follow the tutorials to develop their programming skills.

Contents of this Document:

Features:

  • 3D Math Library
  • Various base geometries:
    • Cube
    • Cylinder
    • Triangular Mesh
    • Plane
    • Lines
    • Particle System
    • Sphere
    • Dynamic Grid
  • Clean default scene
  • Pre-defined keyboard-mouse and camera controls
  • Pre-defined environment
  • Clock system for parallel tasks and time-based operations
  • Simple collision detection
  • Optional Physics Engine
    • Basic support for Bullet Physics (to be extended)
  • Extendable controllers
  • Pre-defined lighting with shadows
  • Material support
  • Clickable objects and virtual planes
  • Shader support
  • Basic GUI Support
    • Window
    • Panel
    • Button
    • EditBox (with multi-line support)
  • 3D File formats:
    • AWP3D Animated High-Poly 3D Object
    • Wavefront OBJ
    • Quake 2 MD2 with Animations
  • Mesh Generation Tools
    • Extrude Line in 3D
    • Rotate Line around an axis in 3D
    • Fill between lines
  • Mesh modifiers:
    • Merge Mesh
    • Subdivide Mesh
  • Extensive examples for every feature

Install

Requirements:

  • LibSDL2 sudo apt install libsdl2-dev for Debian/Ubuntu-based Linux distributions. For other platforms, please consult your preferred package manager.
  • ImageMagick sudo apt install imagemagick for Debian/Ubuntu-based Linux distributions. For other platforms, please consult your preferred package manager.
  • Python 3.10+
  • A graphics card that supports OpenGL 3.3+

Install using Pip:

From a bash terminal:

pip install payton

This should install all dependencies. If you encounter permission errors, you are likely installing the library system-wide and may be missing some permissions. If you prefer not to use pipenv or virtualenv, you might want to run the above command as sudo pip3 install payton.

Optional Bullet Physics Integration

Payton supports Bullet Physics at a basic level for solid geometries.

pip install pybullet

Once Bullet Physics is successfully installed in the same environment as Payton, it will be automatically activated, and you will be able to use its basic properties. Check out the relevant examples.

Optional GTK3 Integration

Instead of SDL2, you can use GTK3 (along with all nice GTK3 widgets) with Payton. https://raw.githubusercontent.com/sinanislekdemir/payton/assets/assets/gtk3.jpg

You need to install Python GTK3 Bindings.

AWP3D Format and Exporter

AWP3D is simply a ZIP file containing every frame as a Wavefront object. To export your animated Blender objects as AWP3D files, you can use the exporter add-on available here:

https://github.com/sinanislekdemir/payton/tree/master/plugins

Using Payton with Anaconda

As of version 0.0.10, Payton is installable on Anaconda. From the Anaconda Prompt:

pip install payton

This is sufficient to install Payton and its dependencies on Anaconda.

Payton will be available for use with Spyder or JupyterLab locally.

Upgrade to the latest version:

Payton is under active maintenance. This means I am spending time fixing bugs and making improvements. Therefore, you might want to upgrade it occasionally.

pip3 install payton --upgrade

This should do the trick!

Getting Started

Your first code

from payton.scene import Scene

scene = Scene()
scene.run()

This will create your first empty scene and show it inside an SDL window.

Controls

Key / Action Description
Mouse Wheel Zoom In - Zoom Out
Right Mouse Button Drag Rotate Scene
Middle Mouse Button Drag Pan Scene
Escape Quit Simulation
C Change Camera Mode (Perspective / Orthographic)
Space UnPause / Pause Scene Clocks
G Show / Hide Grid
W Change Display Mode (Solid / Wireframe / Points)
F2 Previous Camera
F3 Next Camera
H Open / Close Help Window

Environment variables

Some options can be configured using environment variables.

  • SDL_WINDOW_WIDTH: Set window width.
  • SDL_WINDOW_HEIGHT: Set window height.
  • GL_MULTISAMPLEBUFFERS: Set OpenGL multisample buffer count for antialiasing. (usually 1 or 2)
  • GL_MULTISAMPLESAMPLES: Set OpenGL multisample sampling count for antialiasing. (usually 1-16)

Without GL_MULTISAMPLEBUFFERS AND GL_MULTISAMPLESAMPLES, you may notice pixelated graphics. There are no default values set for these because they can vary between graphics cards.

Troubleshooting

On some older systems or where decent graphics drivers are not installed, you can try running Payton code with MESA. It runs fine, though there will be some performance decrease. However, this will not be noticeable for basic applications.

To enforce MESA 3.3, you can run Payton with:

MESA_GL_VERSION_OVERRIDE=3.3 python <path-to-your-payton-code>

Examples

Personally, I don’t really read the long descriptive documentation unless necessary. I like things simple and self-explaining. Therefore, instead of writing long documentations, I write simple examples to use each feature of Payton without digging much into the internals.

Examples can be downloaded from Payton Github Page.

You can either download the whole repository as a zip file or you can just git clone it.

Tested on Windows 10 Paperspace, seems to be working as expected https://user-images.githubusercontent.com/1842484/84317888-38767780-ab76-11ea-8337-a102d7c59275.png

Supports PyBullet solid geometry physics https://www.youtube.com/watch?v=Zt2vnUMLYVs

Example Index

Contribution

  • Please keep using type hints in the main library.
  • Type hinting can be ignored for examples.
  • Example code should be plain and simple.
  • Every new feature should include sensible defaults.
    • Nothing should be too verbose to use.
  • Make sure that make check passes before pushing your code.
  • Running isort . is not mandatory but highly encouraged.
  • Every new feature should have example code.
  • There is a reason why some methods are longer than they should be and complex.
    • To reduce code jumps and stack switches.
    • To run faster.

Screenshots and Videos

Examples Showcase:

https://github.com/sinanislekdemir/payton/blob/assets/assets/02.jpg?raw=true https://github.com/sinanislekdemir/payton/blob/assets/assets/04.jpg?raw=true https://github.com/sinanislekdemir/payton/blob/assets/assets/05.jpg?raw=true https://github.com/sinanislekdemir/payton/blob/assets/assets/11.jpg?raw=true https://github.com/sinanislekdemir/payton/blob/assets/assets/awp3d.jpg?raw=true https://github.com/sinanislekdemir/payton/blob/assets/assets/bullet.jpg?raw=true https://github.com/sinanislekdemir/payton/blob/assets/assets/day.jpg?raw=true https://github.com/sinanislekdemir/payton/blob/assets/assets/engrave.jpg?raw=true https://github.com/sinanislekdemir/payton/blob/assets/assets/explosion.jpg?raw=true https://github.com/sinanislekdemir/payton/blob/assets/assets/gui.jpg?raw=true https://github.com/sinanislekdemir/payton/blob/assets/assets/quake.jpg?raw=true https://github.com/sinanislekdemir/payton/blob/assets/assets/ripple.jpg?raw=true https://github.com/sinanislekdemir/payton/blob/assets/assets/spot.jpg?raw=true

Some free thoughts and decisions:

I've chosen to use List[float] type for Vectors because:

  • I needed something mutable. Otherwise, the number of memory copies and swaps would be too much. So, I've ruled out Tuple and NamedTuple.
  • dataclass has overhead when converting to C-type floats and arrays in memory.

So, to gain some performance, I have created the main library with the risk of non-strict vector lengths.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

payton-1.4.0.tar.gz (217.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

payton-1.4.0-py3-none-any.whl (227.1 kB view details)

Uploaded Python 3

File details

Details for the file payton-1.4.0.tar.gz.

File metadata

  • Download URL: payton-1.4.0.tar.gz
  • Upload date:
  • Size: 217.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for payton-1.4.0.tar.gz
Algorithm Hash digest
SHA256 67ed6dd2bb0ad155ffd7026e2e3396d738a049f0dda607ff37169f7b55d1b32c
MD5 3fd8db3f887c76b3a57d84422ca737e1
BLAKE2b-256 ed9d0228dd9a83e4f162457303f108548ede635b04037b24da953e05489ce9cc

See more details on using hashes here.

File details

Details for the file payton-1.4.0-py3-none-any.whl.

File metadata

  • Download URL: payton-1.4.0-py3-none-any.whl
  • Upload date:
  • Size: 227.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for payton-1.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0a6eaf6fa675d6c2848136ba1db41ffa0d63136f523e8b3912ad797daeb57178
MD5 62f8f1cf02732fe955c874b355583b26
BLAKE2b-256 f3097bdc3cdc393a06837269992c840681749f22f2d01f0adc1d4f350745d292

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page