Lumen with Hair Strands is ghostier than Hair Cards

I have these 2 squirrels in a scene using Lumen GI
The leftmost squirrel is using strands and is ghosting more than the rightmost squirrel, which uses cards.

Other info:
-The strands and cards are in the same groom asset.
-The strands and cards share a base material with a “Hair” shading model.
-The ghosting is the same with FXAA
-The room is made of small-ish modular pieces with uniform scales of (1.0, 1.0, 1.0)
-Increasing Final Gather Update Speed helps a LITTLE, but not much. And the difference between cards and strands is still obvious.
-I’ve tried enabling/disabling “Affect Distance Field Lighting” for all rendered components with no difference to the ghosting

I would accept the amount of ghosting seen on the right, but I can’t find any way to reduce it for Strands. I looked into a lot of cvars for Lumen and Strands, but wasn’t able to find anything helpful.

Just out of curiosity, what’s your reflections model? Surface cache, or hit lighting? And are they currently lit under sky lighting?

Also, I don’t have any idea what this is for, but that clip may be the best nine seconds I have ever seen on UE forums. Thank you, for whatever the heck you are doing.

It’s surface cache right now, intended for a game. I’m trying to keep it somewhat performant (by Lumen’s standards, at least) in hopes that it’ll work on less top-of-the-line machines. And there is indeed a skylight with some leaking in the lumen settings. The level also contains a distant light, but it is currently occluded by the room.

Also an update: I’ve had good luck reducing ghosting with console vars in the region of r.Lumen.ScreenProbeGather.Temporal.BlahBlahBlah

My notes were written in a delirious state, so take this with a grain of salt

For strands specifically:

r.Lumen.ScreenProbeGather.HairStrands.VoxelTrace (default 1)
r.Lumen.ScreenProbeGather.HairStrands.ScreenTrace (default 0)
r.Lumen.ScreenProbeGather.ShortRangeAO.HairVoxelTrace (default 1)
r.Lumen.ScreenProbeGather.ShortRangeAO.HairScreenTrace (default 0)
Changing some of the screen traces to 1 seemed to help mitigate the ghosting on strands.

General ghosting reduction (usually with a tradeoff of more obvious splotches):

r.Lumen.ScreenProbeGather.Temporal.MaxFramesAccumulated (default 10)
Setting this to a lower frame count reduces ghosting at the cost of more obvious splotchy-ness.

r.Lumen.ScreenProbeGather.Temporal.FractionOfLightingMovingForFastUpdateMode (default 0.1)
This seems to be a speed threshold for a fast-moving update mode. Higher values have more ghosting/smoothness.

r.Lumen.ScreenProbeGather.DownsampleFactor (default 16)

r.Lumen.ScreenProbeGather.Temporal.RejectBasedOnNormal 1
This is meant to reduce streaking on foot sliding (yay!) but was set to 1 already (noo!)

r.Lumen.ScreenProbeGather.TemporalFilterProbes.HistoryWeight (default 0.5)
0.0 leans toward splotches and 1.0 leans towards smoother and ghostier

r.Lumen.ScreenProbeGather.TemporalFilterProbes.HistoryDistanceThreshold (default 30)

r.Lumen.ScreenProbeGather.Temporal.RelativeSpeedDifferenceToConsiderLightingMoving default (0.005)
Couldn’t personally get a better value than the defaults

r.Lumen.TranslucencyVolume.TemporalReprojection (default 1)

This is an incomplete list for sure. There’s lots more to explore, especially in r.Lumen.ScreenProbeGather

Also thanks, jblackwell! It’s for a game I’m making called Squirrel With A Gun and it’s even more absurd than the video you see above

3 Likes

Wow, you have really hit the books on this one. I’m on UE forums rendering threads a fair bit, and a decent number of the questions I find are for basic lumen behavior. You clearly did your homework on trying to squeeze the best behavior you could.

I’m wondering if you might want to look at the config files for the matrix demo to see how they pulled off their hair behavior, as they were able to achieve pretty good hair lighting even in a giant open world.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.