Suitability to task...

Hello all,

I am a long time lurker. I have been skulking around these boards for months and now I want to know for sure…

I am a technical Artist. I have been mostly programming in maxscript and HLSL for the last 3 years. 15 years 3d experience before that. I would ultimately like to use Panda3d to make hobby games, but right now I want something more specific.

I want an engine that will allow me to create ‘in-game’ demo material. Panda is attractive to me because of python. My work has me using python more and more as we work away from maxscript, but I am still only up to making small utilities.

I need something that will allow me to demo my strengths, which right now is shader development. Aside from the automatic shader generator, how open is Panda to custom shader development. How flexible is the Render pipeline?

Are there limits in lighting, shadows, alpha-blending, render to texture I should know about? Can I play with the more graphic programmer intense stuff like taking control of how Panda handles geometry batching? Is it possible to do differed rendering, or is it forward rendering only?

I would like to use it as a platform for making demos of advanced shader techniques. Is the reasonable? Or am I barking up the wrong tree and maybe need to look at something else…

My personal opinion:

2 - 3 years ago I were developing on my own OpenGL/GLSL engine. Setting up a correct correct environment for floating point render target and offscreen buffers is so tedious. Bla bla bla … Then I started with Panda3D. First I thought: Hmm Cg, NVidia stuff, Vendor specific. I never written any HLSL line, only GLSL. Some minor things are IMO still better in GLSL, but the problem you need to solve is the same. I bet that you have to write the same amount of lines in all three languages. Back to topic: In Panda3D you have a scene graph. Normally Panda3D uses the fixed function pipeline to render this scene graph (Panda3D is not written around shaders). If you call setShaderAuto on any node, the fixed function pipeline is “disabled” and only the generated shader is working now. If you call setShader on any node, only YOUR shader does all the work, everything else is disabled everything is under your control. With Panda3D you can invest your time writing any shader you want not boring code to setup an environment.

Look at shadow example for a shader example and look at the fireflies example for a deferred lighting example. Panda3D has an integrated offscreen buffer viewer. It is really helpful for debugging such applications.

About “geometry batching” maybe anyone else should answer.

P.S. I’m not from the ad department.

First, Panda was originally designed long before programmable shaders were even dreamed up, and so (as Azraiyl noted) it somewhat favors fixed-function rendering. However, it does try to get out of your way when you want to use more advanced shader features, and people have used it successfully for some pretty clever stuff.

We don’t yet support geometry shaders or some of the other newer shader features that are available in Cg 2.0. There is an effort currently underway to integrate these features. In general, though, Panda has always emphasized broad deployment and stability over bleeding-edge (and often unreliable) features.

As for geometry batching control, well, Panda gives you considerable control in its geometry batching with the way you set up your scene graph. It’s hard to imagine needing more control than what is already provided, but if you’re willing to get your hands dirty with C++, you can always tinker under the hood if you need to.