Deferred Pipeline w/ Physically Based Shading

Simple mesh import :slight_smile: That was just for testing rendering & occlusion :slight_smile: I use DirectGUI for the gui

Update

  • Directional Light shadows (no PSSM yet)
  • Global Illumination! (very experimental)

Update:

  • I’ve ported the Roaming Ralph sample to my pipeline. However, sorry, but the model is really bad, which is why the result doesn’t look very good. I replaced the textures, but didn’t alter the geometry:

Nevertheless, that looks very good: even with the dodgy models, there’s an impressive sense of solidity to the scene (with the result that those trees look somewhat like papercraft).

By the way, in your “lighting only” screenshot, I note what looks like inaccurate shading at the base of the nearest column on the viewer’s left–although I confess that I’m no expert in this, and so I may well be mistaken in my understanding of what I’m seeing.

Yeah, you’re absolutely right, that’s because I’m working with a voxel grid, and the resolution is limited … however, I’m working on that :slight_smile:

Update

Update

  • More GI screenshots
  • Another GI Improvement, the GI is now somewhat stable, and I have ~65 FPS with all features enabled. I’ll see If I can get even more fps with some tweaking …

Just wanted to express my admiration. Excellent work!
Unfortunately at now I can seen only screenshots. A little later I’ll try run it on the discrete video.
btw, Ithink It would be great if you include scene with different materials in the first sample.

Excellent work on this project.

  • spencer

Awesome project! What version of Panda can I use to run it?

Thank you all! :slight_smile:

You mean a showcase scene where different materials are shown?

You need to get a developement version from https://github.com/panda3d/panda3d and compile it :slight_smile: Alternative there are some buildbot-versions iirc.

Update:

  • PCSS Shadows with variable shadow penumbra (Tried VSM, too, but PCSS is way better)
  • PSSM Shadowmaping with up to 6 split planes
  • Smaller fixes

Screenshots will follow soon as usual! :slight_smile:

Exactly. And include this scene to the git repo - in this case different people can try to run same scene on the different hardware and say where it work and where - not.

This look amazing and I would like to try out the examples but all I get is:

$ python2 main.py 
Traceback (most recent call last):
  File "main.py", line 30, in <module>
    from Code.RenderingPipeline import RenderingPipeline
  File "/home/qubodup/src/git/RenderPipeline/Code/RenderingPipeline.py", line 7, in <module>
    from panda3d.core import PTAFloat, PTALMatrix4f, UnalignedLMatrix4f, LVecBase2i
ImportError: cannot import name LVecBase2i

You need a Panda 1.9 build to run this. It will be released within a few days.

You may try a snapshot build from here:
buildbot.panda3d.org/downloads/b … d0380ce17/

Hi,
New to Panda and RenderPipeline
Thx for the hard work!
Got the most recent Panda3D git built to x64. … after 7 hrs!

AMD 6350 CPU, Win8.1, GPU AMD Radeon HD 7700

Got Roaming Ralph w/RenderPipeline running after adding parens to geometry.glsl.
Getting around 20-25 fps with everything checked.


Had an error in shader geometry.glsl …

:display:gsg:glgsg(error): An error occurred while compiling GLSL shader DefaultShadowCaster/geometry.glsl:
Geometry shader failed to compile with the following errors:
ERROR: DefaultShadowCaster/geometry.glsl:24: error(#162) Wrong operand types: no operation “<” exists that takes a left-hand operand of type “highp int” and a right operand of type “void” (or there is no acceptable conversion)
ERROR: error(#273) 1 compilation errors. No code generated


//from geometry.glsl Had errors due to missing parens for the function in the for loop for gl_in.length()

#version 410
#pragma optionNV (unroll all)

#pragma include “Includes/Configuration.include”
#pragma include “Includes/ShadowSource.include”
#pragma include “Includes/ParabolicTransform.include”

uniform mat4 p3d_ModelViewProjectionMatrix;

layout(triangles) in;
layout(triangle_strip, max_vertices=SHADOW_GEOMETRY_MAX_VERTICES) out;

uniform int numUpdates;
uniform ShadowSource updateSources[SHADOW_MAX_UPDATES_PER_FRAME];

in vec2 vtxTexcoord[3];
out vec2 texcoord;

void main() {
for (int pass = 0; pass < numUpdates; pass ++) {
ShadowSource currentSource = updateSources[pass];
gl_ViewportIndex = pass + 1;
//for(int i=0; i<gl_in.length; i++) //original, errors here with gl_in.length
for(int i=0; i<gl_in.length(); i++) // working

{
gl_Position = currentSource.mvp * gl_in[i].gl_Position;
texcoord = vtxTexcoord[i];
EmitVertex();
}
EndPrimitive();
}
}

Thanks again.
Cheers :slight_smile:

Unfortunately I can’t run it with panda 1.9 on Arch Linux.

:display:gsg:glgsg(error): 0:1(10): error: GLSL 4.10 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, and 3.00 ES
:display:gsg:glgsg(error): An error occurred while compiling GLSL shader Scattering/DefaultVertex.vertex:
0:1(10): error: GLSL 4.10 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, and 3.00 ES
:display:gsg:glgsg(error): 0:1(10): error: GLSL 1.50 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, and 3.00 ES
:display:gsg:glgsg(error): An error occurred while compiling GLSL shader Scattering/Transmittance.fragment:
0:1(10): error: GLSL 1.50 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, and 3.00 ES
:shader(warning): Ignoring unknown pragma directive "file" at line 2 of file Scattering/Irradiance1.fragment:
  #pragma file "Irradiance1.fragment"
:display:gsg:glgsg(error): 0:1(10): error: GLSL 4.10 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, and 3.00 ES
:display:gsg:glgsg(error): An error occurred while compiling GLSL shader Scattering/DefaultVertex.vertex:
0:1(10): error: GLSL 4.10 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, and 3.00 ES
:display:gsg:glgsg(error): 0:1(10): error: GLSL 1.50 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, and 3.00 ES
:display:gsg:glgsg(error): An error occurred while compiling GLSL shader Scattering/Irradiance1.fragment:
0:1(10): error: GLSL 1.50 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, and 3.00 ES
:display(warning): add_render_texture: RTM_bind_layered was requested but geometry shaders are not supported!
:display(warning): add_render_texture: RTM_bind_layered was requested but geometry shaders are not supported!
:shader(warning): Ignoring unknown pragma directive "file" at line 2 of file Scattering/Inscatter1.fragment:
  #pragma file "Inscatter1.fragment"

Full output: codepad.org/be7Mt0Dd

I use open source AMD drivers with an HD 7750.

This might be related: github.com/RobertBeckebans/RBDO … issues/137

That’s because the open-source drivers are horribly outdated. You should get the binary AMD drivers in order to use any OpenGL feature from the last 6 years.

After some time passed, here’s the next update :slight_smile:

Update

  • Experimental support for transparency (Order independent transparency)
    • Screenshots will follow
  • Temporal occlusion (Sao and Hbao), allowing much better quality at better performance

Video: https://www.youtube.com/watch?v=zEN8u5mH9ew (thanks to qubodup! )

I finally got Catalyst on my Arch box and it wasn’t as hard as I was afraid it would be!

My computer is weak, so these 720p recordings are quite low fps…

Couch: youtube.com/watch?v=zEN8u5mH9ew
PSSM: youtube.com/watch?v=EfFwFptsbMU
Cornel Box: youtube.com/watch?v=w3wLRm0Z5EI
House Set: youtube.com/watch?v=Wtd5ikSibxA
Sponza: youtube.com/watch?v=bUq77miOnhE

Thanks for all the help on #panda3d to tobspr and rdb!

Update

  • I started to port my terrain to the pipeline, you can see first results in the Terrain section!
  • Various smaller changes like support for IES Profiles
  • Added various screenshots for the different features