Hi, I have an ongoing problem where a skylight or hdri backdrop makes all my characters mouth inside too bright and no shadows. (SEE IMAGE ATTACHED) the teeth have no shading at all and look glowing ambient white!?
I have tried everything I can, but I’m no lighting expert!
I’ve tried changing the skylight between dynamic and stationery
Turning on off cast shadows, dynamic shadows and all other settings in the skylight options
I’ve looked at reducing shadow bias on other lights, but then I deleted all other lights and still just the skylight causes same problem
In world settings I’ve tried reducing environment intensity, number of skylight bounces,
Ive tried changing my directional sun but as mentioned even deleting it and leaving the skylight to test.
I’ve tried changing settings in my post processing volume, and even adding a volumetric lightmap density volume … but I cant get anything to work
Any ideas anyone? would be very appreciated , thank you
From memory I think you need dynamic shadows and on the light you need to play with the shadow bias and other settings to get the self shadowing right, it tends to not connect in short distances. You might also try AO adjustments in the post process volume. Finally, you could just texture the inner parts liek that darker, I actually think that is the best solution.
Hey thanks again. Skylights do not have a shadow bias option.
I’ve tried adding more AO intensity, but the the rest of scene is then wrong
You can just texture the teeth and tongue dark as you need to see them when they make shapes or tongue comes out etc.
I’m really struggling to understand why Unreal does this. If I zoom the camera inside any character in any scene it’s the same, its like there is a light inside the head, the eyes and mouth are bright, the teeth look like they are under an ultra violet light? .
Delete the skylight or hdri backdrop acts the same, and you get dark inside mouths, but obviously the rest of the scene looks terrible.
Surely the mouth inside is cave shape and the light is blocked by the head and body polygons… why cant Unreal see that like every other 3D software? it’s so good at lighting other things, it’s crazy
… thanks again for all the suggestions… really hoping we find an answer for this.
review the digital human docs and example. There is a specific way this is done with contsct shadows.
Also, you can probably change the material color to be darker when getting deeper. Right now the base material is full white, so even with the proper shader and light options youll have a hard time…
basically fake the AO.
Hello everyone, apologies for the late follow up on this, I had to get on with the project. The issue is still not resolved but I have improved it by changing the teeth, tongue etc all to us an SSS material with sub profile and painting the texture dark at back of mouth. I had to really play with the SSS settings and make the subsurface colour a blue which is strange.
Its better at least its not glowing white, but still very wrong, I’ve just managed to darken it all. But the teeth still are not shadowed by the head mouth cavity… I still don’t understand how or why Unreal Skylight is lighting inside all mouths? its crazy!
If I rotate the camera you can see the back teeth actually brightness increases when you change the angle
This is not a realistic character just stylised, looking through the digital humans docs did not help
I’ve tried everything I can, from shadow bias, AO, stationery skylight, movable, I’ve looked at every post I can find online and still no resolution.
I do not know what else to try, I’m praying there is some expert out there that can tell me why Unreal acts this way
If in any other program, maya, max etc, if you add GI , like the skylight in unreal, light would not glow inside cavities and mouths. Shadows would be cast by the head geometry… but not in Unreal… WHY? I’ve spent so much time trying to find a solution,
Because skylights are unshadowed, this happens with every interior space (including houses and buildings) in any scene that is lit with a skylight. Indirect shadowing is prohibitively expensive in realtime which is why we use hacks like SSAO. For static geometry a volumetric lightmap can be generated to occlude interior spaces with indirect shadowing for moveable static meshes provided from MDFs, but as you correctly pointed out earlier; this doesn’t apply to skeletal meshes. This is not visible in the digital human scene, because it is not lit with a skylight. Put a skylight in the scene and you’ll have the same issue.
Usually with SSAO and correct auto exposure settings this is not very noticeable (for mouths) in regular gameplay. But if it bothers you still then you have some options:
The easiest solution (and the one I would use in this case) is to just to paint a gradient shadow into the inside of the mouth, ensuring that you are also painting the darkest interiors with 0 specular values into the specular map to ensure you don’t get specular reflection at the rear of the mouth (like you are seeing in your most recent screenshot). As an alternative to painting the specular by hand you could also consider generating a bent normal map.
Another somewhat easy option; for projects that need to occlude interiors with fully dynamic lighting the solution of choice is typically to put a sheet of geometry in front of the opening with a depth fading unlit material. I imagine it would work particularly well here but it does require a separate material and additional geometry around the mouth opening.
If this is for a cinematic where you have complete control over the shot then a simple solution would be to just do what they did in the Digital Human scene and not use a skylight.
Not my finest work but it gets the point across. The important part of painting the shadow into the texture is to have a specular mask. I cannot emphasize this enough, it’s not enough to just make the base color dark. If you leave the specular at UE4’s default (0.5) then you will get specular reflections from the skylight inside the mouth.
I think the issue might be due to the Lightmap Volumetric Detail Cell Size when you do the Light Baking. For movable objects, Unreal Engine is using Irradiance Cache to light up the object in the correct manner. When the density is not good, some objects light up incorrectly.
You can check the video below to solve the issue.
SSAO will be insufficient here. This is why there is Ambient Occlusion map input in the Material. To handle scenarios like these, you are usually expected to provide accurate ray traced AO map in form of a texture baked in some external application. At least until lumen becomes character shading friendly and stable.
The reason why it doesn’t work like in Maya or Max is that they use offline ray tracers that have minutes or even hours to calculate single frame. Real-time renderers must spit out frames usually at least 60 times a second, so ray tracing environment light is just too expensive.
Lumen is kind of halfway there, but there’s still a lot to be done in terms of supporting mode advanced shaders, like SSS, Twosided foliage, translucency and so on.