Deferred Pipeline w/ Physically Based Shading


Does anyone got this working?.. gives me

[-] Main                     Bit System = 64 
[-] Main                     Loading panda3d configuration from configuration.prc .. 
Known pipe types:
(all display modules loaded.)
[-] Main                     Creating pipeline 
[-] MountManager             Set base path to '.' 
[-] PipelineSettings         Loading ini-file from Config/pipeline.ini 
Traceback (most recent call last):
  File "", line 551, in <module>
    app = Main()
  File "", line 77, in __init__
  File "/home/brendon/Documentos/RenderSystem-master/RenderPipeline/Code/", line 75, in loadSettings
  File "/home/brendon/Documentos/RenderSystem-master/RenderPipeline/Code/", line 108, in loadFromFile
    content = handle.readlines()
AttributeError: 'StreamIOWrapper' object has no attribute 'read1'
[-] MountManager             Cleaning up .. 

the Rendersystem gives

RenderSystem-master$ python Traceback (most recent call last):
  File "", line 8, in <module>
    from Core.RSCoreModules import TerrainMeshRenderer
ImportError: No module named RSCoreModules

Running lasted version of panda 1.10.xx on Ubuntu 14.04 x64


Ah, this was caused by some recent changes in master. I think I’ve pushed a fix to the Panda3D master now.



There hasn’t been an update for a while now in this post, this is mostly due to me having less time than before. I’m currently working on a refactored version of the Pipeline, since I realised I can do much things more efficient, and I have learned a lot from it.

This means, the code you will currently find in the repository is highly experimental and incomplete, and not guaranteed to run. If you want to checkout the old pipeline version, please head over to the master branch (or for even older versions, even the old_master branch).

I will regulary post updates, however probably not in a high frequency, that doesn’t mean this project is abandoned tho.

There was a small incident today about some copyright stuff, which is why I made the render pipeline a private repository for a short time, however this should be resolved now. I also added a MIT License to the pipeline. If you need any other license, just contact me.


Hi there I have so far tried old-master , master , and refactor branch, a few questions.

i have a gtx670 2gb for reference, and am running the latest panda build from git.

old-master - works but is incredibly slow?

master - compiles , but when trying to load sample scenes or it throws :

refactor , no sample scenes , is there a way to test this one yet ? or is it not done yet ?

am super excited about this project, thank you for working on this !


Hm, I have the same GPU you have, do you have the newest drivers? However, the “old_master” isn’t supported anymore, so I wouldn’t spend much time getting it to run …

See , with that fix it should run, I gonna fix that soon

There are no sample scenes for the refactoring branch yet, you could try running the file with the command “python dev”, however you will have to replace the models it loads with some other (dummy) models, since those aren’t included in the repository :slight_smile:
There will follow samples when the refactoring processes further, but right now I’m more focused on getting the stuff to run instead of writing samples :slight_smile:



Where is the that is mentioned in the Getting Started page? I can’t find it anywhere in the archive from GitHub. Should I make it myself?


If you are using the master branch (I guess you do), you don’t have to run at all, its only required for the refactoring_branch. I have updated the wiki, thanks for pointing this out! :slight_smile:



This is a small update about how the refactoring is going, what features are already implemented, and which are missing:

First of all, a screenshot (as always) (Full Res):

New editors for the Pipeline (Time of day and Plugin configuration) (Full res):

Whats working so far:

  • Core rendering system, including new Plugin Architecture
  • PSSM Shadows + Lighting
  • Support for up to 65,000 Point Lights
  • Atmospheric Scattering
  • Ambient Occlusion (SSAO, HBAO, Alchemy, SSVO, UE4AO)
  • SMAA (Regular and T2)
  • New! Color Correction system, including many tonemapping operators like Reinhard, Filmic etc.
    - New! Time of day system, lets you control the position of the sun and many parameters
  • New! Editor for the time of day and plugins, can change settings while the pipeline is running
  • Many smaller features, not listed here

Whats missing:

  • Voxel GI
  • PointLight shadows
  • Different Light Types (Spot Light, Area Light)
  • SSLR, but might get replaced by VXGI anyways



  • IES Profiles, for both Spot Lights and Point Lights!

Point Lights:

Spot Lights (You can also see the effect of the DSSDO in this image, there is no actual shadow below the sphere!)

Improved roaming ralph:

Normal mapping:

Further changes:

  • Octrahedron Normal Mapping
  • Improved light culling
  • Precompiled Builds (Checkout the pipeline readme)
  • Cleaned up a lot of the lighting code
  • And many more …


Very impressive - this looks amazing. Thank you for sharing your code :slight_smile:


Small attempt of making a different roaming ralph model:

(Full res)

(Full res)

The models are not really good, I didn’t find better ones tho. Also right now, the whole geometry is a flat model, using 3 mio vertices (which makes it slow). Its more a proof of concept …

I also added support for bloom to the pipeline:


Just a small addition, I added very experimental support for backface transmittance:

Its very experimental, but I think the effect is already quite pleasing! I will have to think about how to mark materials to recieve this translucency. Its fairly cheap to compute tho …


Your work is fabulous. It’s just… amazing! Thank you for sharing this. :smiley:

I have a few questions about the pipeline and it would be great if you could answer them:

  • Which branch currently usable?
  • How does your terrain implementation work? Is it using geomipmapping or CDLOD? What about texturing, does it support a single diffuse for the whole terrain with detail textures or is there a splatmap implementation?
  • Have you considered porting your pipeline to a different engine, such as Urho?


You should use the refactoring_beta branch, which is the default branch. It supports almost all features the master branch supports, but should run much more stable and better.
Features currently missing are: PointLight shadows and GI, which are planned to be implemented soon.

It uses instancing for the rendering, spawning chunks as appropriate, using a QuadTree. See Old TerrainMeshRenderer code. For the texturing, it uses shader texture splatting, inputs are the heightmap and a flowmap, from which materials are determined by a shader (by calculating slope and so on). Google Frostbite 2 texture splatting for a great explanation of this.
In future, it is planned to make this way more configurable.

Not really, I’m quite happy with Panda3D and I’m also getting great support (especially from rdb!), so I don’t see a need. The code is open source tho, so feel free to port it :stuck_out_tongue:


Does the flowmap allow for a material of it’s own? Are the textures configurable on the slope-based shader?


You can find the (uncleaned) shader here:
The shader uses 4 materials which are weighted based on slope, height, etc, see line 61 following.

I’m not sure what you mean with a material of its own. The flowmap is used by the other materials to determine their density.

Right now its pretty fixed function. In later versions, the material parameters will be user defined


Just another screenshot showing bloom and scattering:

(Full Res)

This is still the unoptimized scene (thats why its so slow). I didn’t get to use hardware instancing yet.

I also added a display to show the current exposure, in case automatic exposure is enabled.


Just started to use a new UI, you can see a preview here:

(Full Res)

(Full Res)


Just added support for SpotLight shadows. PointLight shadows will come soon:

Full Res

This is an area light simulated with 32 spot lights (just for fun):
Full Res


Added a small demo showing different types of material:

Full res