SSS has a problem


Detailed description of the issue: SSS is supposed to receive light in order to work but when there is no light source at all, SSS still makes the surface shine as if it was emissive. What this means is that when the surface is in shadows it always looks brighter than it should. The reason this goes unnoticed is when you add a skylight then you already expect everything to be lit even in shadows but the brightness ratio between materials using SSS and all other materials still is off if you look closely. Looks worst in interiors where the environment is darker than outside.

Build Type: Binary

Build version: All versions

Repro Steps:

  1. Create a new level
  2. Create a 2 sided material that uses SSS and apply to a mesh (Multiply the SSS with a number higher than 1 so the problem will be seen more obvious)
  3. Remove all light sources from the level (results in total darkness)
  4. Watch the mesh that can still be seen due to SSS, while it shouldn’t.

System Specs:

16 GB
7 x64

Screenshots/Link to video: In this scene there is no light source, the cube and sphere basecolor are white but looking black due to no light hitting them. But the grass (or anything using SSS) still shines when no light hitting them. This is a big problem.

Now with a directional light added. The grass that are in the shadows are supposed to be fully black but aren’t.

Added more information to the OP.

Make sure you’ve rebuilt lighting as well. You didn’t mention that step, but if you had any light samples from a prior build this could influence the actors lighting.

Since I created a new level and removed everything then added some grass, a cube and a sphere I didn’t try building lighting. I don’t usually build lighting at all during any of my works since I’m always dealing with dynamic lighting. However, I just checked “Force no Precomputed Lighting” and built lighting then it looks right. I’m not sure why this was required and why the grass didn’t look fully black as the cube and sphere in the first place since I added them one after another.

I think the issue is solved now.
I’d bump it if I run into issues again.

When you create a default level and use the template floor that is there or even place another static mesh in it’s general vicinity you will still need to build lighting because that level has already had it built.

When lighting is built for static or stationary lights there are indirect lighting cache samples placed around the level that indicate how a dynamic actor should be lit when near these surfaces. Anytime you’re switching to Dynamic lighting you should rebuild the lighting to clear these stored samples.

You can visualize this by going to the viewport > Show > Visualize > volume light samples. If you use the default level you will see these placed samples have a light shade of color to them. If you are using only dyanamic lighting thse samples will still be there, but instead they will be black and will not affect any of the actors in the scene.

This is a good source of information on the indirect lighting cache if you’re interested: Indirect Lighting Cache | Unreal Engine Documentation