Scene Color and Diffuse Color Post Process Bug

Both Scene Color and Diffuse Color render passes of a Post Process Material don’t work correctly anymore in 4.7.4. It worked correctly in 4.6.

It basically doesn’t render any self illuminated materials anymore, they are then just black. That also includes the skybox.

1 Like

Hi Davision -

Thank you for the report, we are beginning to dig into this issue now. If you could please upload screenshot comparison of the 4.6 and 4.7 post process as well as a screenshot of your Blendable setup.

Thank You Again -

Eric Ketchum

Ok, looked more into it. It is Base Color and Diffuse Color that have a problem. I got it confused with Scene Color which is why I first thought it worked in a 4.6 project.

With materials set to unlit it doesn’t work at all and with normal materials it only works when something is plugged into the diffuse. So you can’t just use the emissive slot instead.

To use a render pass to grab just the colors I need to have it work with everything so stuff like the sky will be not just black.

Here you can see that the sky is rendered black and the apple too which has a green color plugged into the emissive channel. To make it clear I only plugged in the BaseColor/Diffuse Color in the post process material.

38138-colorpass3.jpg

Another issue is that the base color and the diffuse color pass is much darker then what you see when you select unlit in the editor viewport. Those color are significantly darker then the colors you define in the materials.

I made a new post here that shows the colors problem in more detail: Colors are wrong - Rendering - Unreal Engine Forums

Another problem is that translucent and additive material don’t work with Base Color and Diffuse Color. It is like they don’t exist. Tunring “Seperate Translucensy” off doesn’t change it either.

Hi Davision -

You are miss understanding what the SceneTexture:Base Color / Diffuse Color is actually calling in the engine. The node looks at the Rendering Buffer for Base Color (Diffuse is actually the same, it is a deprecated input from earlier engine days when Base Color was still called Diffuse Color). When you set a Material as Unlit you lose access to the Base Color input of the Material Attributes (it becomes grayed out). Effectively this means that this material does not pass anything into the Base Color, or a 0 and would rendering black in the Post Process. This is working as intended.

Translucent and Additive Materials will not pass into Post Process materials with a Base Color as Translucency is calculated later in the Rendering Pipeline than Base Color pass.

Thank You

Eric Ketchum

But then I fail to see how Base Color can be in any way useful? When used everything that is translucent, additive or unlit would be always rendered wrong.

I noticed there is a translucent render pass mentioned as “not implemented yet” But I guess that would then be just black and white? Any chance there will be something that lets me access the colors of translucent, additive and unlit materials?

Hi Davision -

The short answer is probably not because ultimately of what translucent, additive and unlit shader models actually are and the performance cost of adding in the necessary buffer passes. Rendering is wholly about how an object looks lit and in the Deferred Rendering path lighting gets applied after the materials, but with Translucent Shader models (like Translucent and Additive) are actually about how lighting passes through an object and those objects must be done in a separate phase of the rendering pathway. Ultimately at the same time as lighting. The GBuffer that the post process node is pulling from comes in before lighting is applied so before those shader models are computed. For the emissive input, its the same idea as emissive is supposed to feed into lighting directly.

So for the shader models and inputs you listed above the only way to get the colors of those models is by having lighting computed which would be the SceneTexture:Scene Color Node.

Thank You

Eric Ketchum

If I could at least mask those materials, then I could do something else with it. But as it is currently I have to to get rid of anything translucent and additive in my game if I want to make use of Base Color.

How about a optional render pass for material ids? Each ID has a different color like it works in 3DsMax. Or for ids for different material types. That would also make a lot of other things possible because essentially you can then mask everything you like.

As it turns out there is already a mask rendering pass for translucent implemented! It is not the render pass called Seperate Translucency (does not work) It is called Post Process Input 1, who would have thought of that? Anyway, it makes much more cool things possible then I Imagined! While masking it I accidentally inversed it with a solid color for testing and I found I could do this, painting with particles:

http://i.imgur.com/houOtN9.gif

Originally I just wanted to stylized my rendering but now It looks like I will make a whole different game around this painting effect.

Now it would be still great to have more render passes that allow cool stuff. I’m sure also everyone working in the Film industry will be thankful. There it is worked a lot with masks and when you already render in 3D instead of filming in real you can just easily render all kinds of masks if the system allows it.

Using the 4.15 in PP material this return nothing ?

Google brought me here. The solution that worked for me was to use an if statement to mask the unlit parts like this.

Any material that is unlit will show up as black in the base color. So if a pixel is black, then use the color from the PostProcessInput0 (which is the rendered image before post process). Any pixels that actually are supposed to be black in the base color will still show up as black in the rendered image, while anything that has a fancy self-illuminated material will show up as you see it before post processing.