PBR Implementation Details

Started by
2 comments, last by AxeGuywithanAxe 9 years, 7 months ago

Hello all, this is my first time posting on this forum so i'm hoping that this will be a good experience for me. As of right now I'm working on a Tiled Deferred Shading Pipeline with PBR(simplified version of Disney PBR in the same vein as unreal engine 4), and am having difficulty getting proper results. I have gone through dozens of implementations, and even source code, from Disney and Ready At Dawn implementations, and have still not been able to gain the proper look. As of right now my implementation suffers from heavy light artifacts, banding, and specular highlight shearing, and also just overall looking wrong.

Implementation Details:

I am currently using a GBuffer With this layout

Diffuse Albedo( based on metallic) and ambient occlusion(from prebaked occlusion map) in an RGBA8

Specular Albedo ( lerp from F0 of 0.04 to Base Color based on metallic property) in an RGBA8

World Space Normal and Roughness in an RGBA8 ( I also tried an RGBA16 and multiple encoding methods to see if that was the issue I was having, but there weren't any changes)

In my compute shader I do the regular tiled shading approach, currently only with point lights, and my output results seem bland.

I will attach pictures showing the issue , source code if necessary, and will add more details to help me solve this issue. Thank you all in advanced.

Advertisement

The pictures do not show the rectangular squares that the actual rendering produces, and I am currently using the gold F0 values courtesy of https://docs.unrealengine.com/latest/INT/Engine/Rendering/Materials/PhysicallyBased/index.html

The main problem I can see is that there seems to be a lot of quantization of your normals. How are they being stored in the gbuffer?

Also, the highlights on the non-metallic spheres are saturating to yellow in the centre, probably due to there not being enough of a high dynamic range? How are you tone-mapping the images?

Thank you for the quick response! I went through a few encoding methods, from the simplistic, -1 to 1 range to 0,1 mapping, to BFN. I also tried the method in a forward rendering pass and the same issues seem to occur, though to a lesser extent. As of right now I do not have any HDR/Tonemapping passes, but seeing as a few of the examples that I went through still retained the proper result with the lack of post processing, I'm hoping that tonemapping isn't the issue. The pictures don't show the rendering that well, but they spheres are covered by thousands of rectangles. As a disclaimer, I am also using the FBX Sdk, which I know is filled with bugs, but I believe that I have accurately extracted the normals .

This topic is closed to new replies.

Advertisement