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.
If you like what you see here, and would like to gain access to the full demo, please consider supporting me on itch. Your support will enable me to continue building cool tools and demos for the community, and bring wider recognition to Panda3D. I love doing this kind of work, however it is complex (no pun intended) and time consuming. I have big dreams for Panda3D game design, and would love to bring a level of professionalism and polish to our tool and demo ecosystem. complexpbr Demo link here: complexpbr Demo by Simulan
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 (Amazon Lumberyard Bistro | NVIDIA Developer)
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.