Skip to main content

A straight-forward, easy-to-use, drop-in, PBR replacement for Panda3D's builtin auto shader

Project description

Build Status

panda3d-simplepbr

A straight-forward, easy-to-use PBR render pipeline for Panda3D. This project aims to be a drop-in replacement for Panda3D's auto-shader. The PBR shader is heavily inspired by the Khronos glTF Sample Viewer. Note: this project does not make an attempt to match a reference renderer.

Features

  • Supports running on a wide range of hardware with an easy OpenGL 2.1+ requirement
  • Forward rendered metal-rough PBR
  • All Panda3D light types (point, directional, spot, and ambient)
  • Filmic tonemapping
  • Normal maps
  • Emission maps
  • Occlusion maps
  • Basic shadow mapping for DirectionalLight and Spotlight
  • Post-tonemapping color transform via a lookup table (LUT) texture
  • IBL diffuse and specular

Installation

Use pip to install the panda3d-simplepbr package:

pip install panda3d-simplepbr

To grab the latest development build, use:

pip install git+https://github.com/Moguri/panda3d-simplepbr.git

Usage

Just add simplepbr.init() to your ShowBase instance:

from direct.showbase.ShowBase import ShowBase

import simplepbr

class App(ShowBase):
    def __init__(self):
        super().__init__()

        simplepbr.init()

The init() function will choose typical defaults, but the following can be modified via keyword arguments:

render_node : The node to attach the shader too, defaults to base.render if None

window : The window to attach the framebuffer too, defaults to base.win if None

camera_node : The NodePath of the camera to use when rendering the scene, defaults to base.cam if None

msaa_samples : The number of samples to use for multisample anti-aliasing, defaults to 4

max_lights : The maximum number of lights to render, defaults to 8

use_normal_maps : Use normal maps to modify fragment normals, defaults to False (NOTE: Requires models with appropriate tangents defined)

use_emission_maps : Use emission maps, defaults to True

use_occlusion_maps : Use occlusion maps, defaults to False (NOTE: Requires occlusion channel in metal-roughness map)

enable_shadows : Enable shadow map support, defaults to True

shadow_bias : A global bias for shadow mapping (increase to reduce shadow acne, decrease to reduce peter-panning), defaults to 0.005

enable_fog : Enable exponential fog, defaults to False

exposure : a value used to multiply the screen-space color value prior to tonemapping, defaults to 1.0

use_330 : Force shaders to use GLSL version 330 (if True) or 120 (if False) or auto-detect if None, defaults to None

use_hardware_skinning : Force usage of hardware skinning for skeleton animations or auto-detect if None, defaults to None

sdr_lut : Color LUT to use post-tonemapping

sdr_lut_factor : Factor (from 0.0 to 1.0) for how much of the LUT color to mix in, defaults to 1.0

env_map : An EnvMap or cubemap texture path to use for IBL, defaults to None

calculate_normalmap_blue : Calculate the blue channel (Z-axis) for a normal map in the shader (allows saving memory/bandwidth by using 2 channel normal maps), defaults to True

Those parameters can also be modified later on by setting the related attribute of the simplepbr Pipeline returned by the init() function:

        pipeline = simplepbr.init()
        
        ...
        
        pipeline.use_normals_map = True

Textures

simplepbr expects the following textures are assigned to the following texture stages:

  • BaseColor - Modulate
  • MetalRoughness - Selector
  • Normals - Normal
  • Emission - Emission

Example

For an example application using panda3d-simplepbr check out the viewer in the panda3d-gltf repo.

Running Tests

First install panda3d-simplepbr in editable mode along with test extras:

pip install -e .[test]

Then run the test suite with pytest:

pytest

Building Wheels

Install build:

pip install --upgrade build

and run:

python -m build

License

B3D 3-Clause

Project details


Download files

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

Source Distribution

panda3d-simplepbr-0.12.0.tar.gz (1.9 MB view details)

Uploaded Source

Built Distribution

panda3d_simplepbr-0.12.0-py3-none-any.whl (2.5 MB view details)

Uploaded Python 3

File details

Details for the file panda3d-simplepbr-0.12.0.tar.gz.

File metadata

  • Download URL: panda3d-simplepbr-0.12.0.tar.gz
  • Upload date:
  • Size: 1.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.2

File hashes

Hashes for panda3d-simplepbr-0.12.0.tar.gz
Algorithm Hash digest
SHA256 c71d490afeeb3a90455dcfde1d30c41f321a38742a97d18834e5c31016331ed5
MD5 494c456434d887459620d83d234ec070
BLAKE2b-256 b1af505608eef09d7f9b822e69dc7631cd14102650b8fe1b6f60d9562d2788d9

See more details on using hashes here.

File details

Details for the file panda3d_simplepbr-0.12.0-py3-none-any.whl.

File metadata

File hashes

Hashes for panda3d_simplepbr-0.12.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6c43d1990ff07840cf1c557561d6122fd1250d8e76aacf227b61c3789149bcf9
MD5 d7a73b91f78ec952e4b7a9bd68bb8ad7
BLAKE2b-256 464c926e1cf17abfb1d91e12bf38e653cacf10e30c5030e37f9078f0f41aaf40

See more details on using hashes here.

Supported by

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