I am very excited to introduce complexpbr – a module built to offer straightforward support for IBL (Image-based lighting) rendering in Panda3D. Here is a short list of supported features: PBR, IBL, SSAO, SSR, custom AA, vertex displacement mapping, HSV color correction, custom BRDF generation, dynamic (or optionally static) environment reflections, and custom environment map camera positioning.
My goal here is to provide an easy to use and easily maintainable interface for applying advanced rendering techniques to a Panda3D game or program. “RenderPipeline” is an impressive piece of software, but it is rather convoluted, difficult to maintain, and has fallen victim to quite a bit of technical debt. I intend complexpbr to be an alternative for people who just want to build a cool “AA” game today, without all the hassle, and using contemporary Blender BSDF models. As a bonus, it is quite fast, and gives you the option to disable screenspace postprocessing or even use CommonFilters if you’d like.
Full source here: GitHub - rayanalysis/panda3d-complexpbr: Functional node level shader application for Panda3D.
PyPI update!
You may now use pip to install complexpbr with the following command:
pip install panda3d-complexpbr
Here’s the new package page: panda3d-complexpbr · PyPI
If you like what you see here, please consider supporting me on itch: complexpbr Demo link here: complexpbr Demo by Simulan
This is a “buy me a coffee” kind of thing, as you can already access a fleshed-out demo via GitHub - rayanalysis/Panda3D-Arena-FPS-Sample-Program: This is a modern Panda3D sample program with an Arena first person shooter environment and many basic features. This program would be useful to experienced Python programmers jumping into Panda3D with the intention of building a first person shooter.
Demo Videos:
6/14/23 Version 0.5.2 Update:
-
Added TBN logic to the screenspace_init() normal procedures to theoretically improve the accuracy of the screenspace effects. The core functions affected are getViewPos(), getNormalMatrix(), transformNormalToViewSpace(), and getViewNormal() in min_f.frag .
-
Usability improvements including no longer having to copy the output_brdf_lut.png file. complexpbr will generate a dummy LUT for you, and also offers a new optional “lut_fill” input to complexpbr.apply_shader() This feature is automatic, so if you provide the output_brdf_lut.png file in your program directory like normal, it will default to that .png image ignoring the lut_fill input.
Comparison image between versions 0.5.1 (on the left) and 0.5.2 (on the right) default screenspace_init() settings:
And 0.5.2 with default settings after copying the provided output_brdf_lut.png (now optional).
Screenshots:
7/6/23 Lumberyard Bistro (https://developer.nvidia.com/orca/amazon-lumberyard-bistro)
6/1/23 Sponza:
(initial images with more “GI”)
5/12/23 Short reflections:
5/11/23 Long reflections demo:
5/6/23 Bloom implementation:
Thanks for reading, and hope you enjoy using complexpbr.