Lumen Skylight GI Bounce Issue​ \ Lumen下Skylight GI反弹问题

通过详细实际测试Lumen我发现了一些问题:

1.为什么BaseColor越暗,Skylight GI反弹就越弱?BaseColor低于0.2之后的误差过于明显,而平行光基于BaseColor0.05测试是完全正常的。

2.为什么不改变BaseColor,仅改变EV,会计算出不同结果?可以避免吗?

[Content removed]

非常感谢!

Through detailed practical testing of Lumen, I have discovered some issues:

1.Why does the Skylight GI bounce become weaker as the BaseColor gets darker? The error is too noticeable when BaseColor is below 0.2, whereas directional light tests based on BaseColor 0.05 work completely fine.

2.Why does changing only the EV result in different calculations without altering the BaseColor? Can this be avoided?

Issue 2 might be related to this problem: [Content removed]

Thank you very much!

1.Skylight(Too dark)

[Image Removed]2.EV Issues

[Image Removed]3.DirectionalLight(Correct)

[Image Removed]______________

Level:

UE5_UDN_Cases

/Script/Engine.World’/Game/SkylightGITest.SkylightGITest’

看了下环境,主要有两方面的设置导致的差别巨大。一个是skylight的intensity=500数值过大,Lumen下的skylight的精度有限,类似surface cache的亮度是有上限的。但PT应该没有这个限制,导致PT反应了实际的亮度效果,但lumen下skylight过高部分的亮度被clamp掉了。把skylight亮度降低,比如5,就基本一致了。

另外一个是我不认为目前天光大Indirect lighting intensity这个参数在Lumen下是起效的,skylight在lumen下本身就是个indirect light。但看起来在PT下这个参数还是起效的,因此环境中这个数值是100,导致PT下最终效果亮很多

如下图,上面两张是skylight intensiy=500;indirect lighting intensity=100;下面两张是你修改后数值分别都是1的截图;可以看出从你自己的测试前后截图看改善也非常明显:下面两张PT和Lumen的亮度已经基本接近了,我不是很明白你说的“你可以基于Skylight Intensity=1,Indirect Lighting Intensity=1,的情况下看他们的差异,差异仍然是一样的,没有改善”的意思。

[Image Removed]至于实际场景里的问题有可能是其他原因造成的,猜测和lumenscene的正确性相关,可以看下在lumen scene的viewmode下是否有缺失或者surface cache有问题,尤其是地面部分。如果你能提供具体的案例我可以本地一起分析一下

这是两个问题!

调整intensity=1 indirect lighting intensiy=1后显然比最开始和PT比较有更加接近的整体亮度。但你提到说“差异仍然是一样的”显然让我一头雾水。至于你后来提到的通过PS或者EV提亮方式的确产生了差别,从而引出了第二个问题:暗部细节或亮度的差别。这种差别问题出在surface cache的精度上,也是basecolor太暗造成的,这在另外一个帖子已经提到过,我还专门注明了。另外也顺便说下不要用PS去提亮,截图是8位的,渲染是线性HDR10bit的,PS提不亮不代表游戏里提不亮,尤其暗部的位阶信息量更少。当然我不是说游戏中就没问题,而是说PS提亮方式会让问题更加严重。是非常不严谨的方式

这边我再重复说明下原因:根本问题就是你的环境的lumen scene是有问题的。Intensiy=500的时候超出了surface cache可以承载的精度范围,导致超出的亮部被裁掉了,但PT下不会有这个行为,所以PT下明显更亮。其次是Basecolor太暗,导致surface cache的精度极低,无论是通过EV曝光强制提亮,还是通过提亮skylight都不会提升精度,导致lumen反射也好,GI也好都产生问题。

解决问题的方法是:1、使用hitlighting,跳过surface cache;2、basecolor的亮度提亮,实际使用环境几乎不会存在所有表面都只有0.05的basecolor条件存在,因此一般不会有这个问题。3、天光不要太亮导致超出surface cache能承受的精度范围

另外我建议你实际游戏中如果有lumen的照明问题最好直接拿实际案例作为重现提供过来分析,而不是创建一个测试场景。你的初衷是简化环境,可以理解;但测试环境也人为造成了实际环境并不存在的原因,导致产生误导。比如天光调到了500,basecolor设置成了0.05这些都是实际环境不存在的因素,但在测试环境却是造成问题的主要原因。

SurfaceCache的生成时应该是不考虑曝光,曝光类似后期强行把它提亮就像于PS里把一张很暗的图提亮,会有质量问题。在非常暗的环境比如EV100=-10,也就是需要曝光补偿EV10去提亮的环境,这些SurfaceCache看上去就很差,这种问题最终渲染本来就需要很暗是可能察觉不出来,但需要强行曝光补偿去提亮就出问题了。因此我认为本质就是太暗了,Basecolor太暗,或者环境很暗几乎没有光或者很深没有任何补光的洞内。

你把天光亮度提的很亮本质上让暗部EV提高了,的确可以让暗部(洞内)变亮改善效果,但亮部(洞外)就会过曝了并可能被裁切了,因为surface cache是有精度范围的(这也是最开始第一个问题产生的主要原因)。因此对于第二个暗部问题最佳的解决方法还是要规范化BaseColor的亮度,或者补光提高环境亮度。真实世界即使一轮弯月的夜晚EV100也不会低于-6,补偿10(EV100=-10)的环境几乎是伸手不见五指的环境。可以使用show-visualize-HDR打开可视化模式来查看当前像素的EV值

[Image Removed]下图是在EV100=-6环境下,Basecolor=0.2的效果,没什么问题。

[Image Removed]我相信真实游戏环境的亮度不会到EV100=-10,basecolor也不会普遍到0.05,天光亮度不会到500,但如果还是很暗可能就是其他的原因,这是为什么我建议你要提供真实环境的原因。

深入看了下,有两个Cvar可以扩展这个surface cache的范围

r.Lumen.ScreenProbeGather.MaxRayIntensity 80 默认10

r.LumenScene.Radiosity.MaxRayIntensity 320 默认 40 暗部主要和这个相关

以上参数设置可以接近PT效果,但未进一步测试亮部是否会产生新的问题,因为这两个功能看起来是为避免一些闪烁问题而做了clamp。因此如果可以在资产场景灯光制作上就避免问题而不去动这些参数就最好了。

图为参数调整前后对比,Basecolor=0.05,供参考

[Image Removed]之前也有不少人问到要不要完全按照物理灯光数值来打光,其他倒没什么,我能感知到的其中一个担忧就是lumen光的精度/亮度范围。无论太亮还是太暗的EV都可能产生问题。

[Image Removed]Hi,感谢回复,我是基于正常Skylight Intensity=1强度下遇到非常明显的发黑问题,才提供Skylight Intensity=500的案例方便展示问题,另外Indirect Lighting Intensity=100只是为了表达在Lumen下不起效,但实际环境仍然是1,你可以基于Skylight Intensity=1,Indirect Lighting Intensity=1,的情况下看他们的差异,差异仍然是一样的,没有改善,在实际的游戏案例里,我们解决这样的问题需要打很多补光,如点光源聚光灯,这导致效率很低,但更大的问题是,打不出自然GI反弹衰减的效果。

Hi, thank you for your response. I encountered a very noticeable darkening issue under normal conditions (Skylight Intensity=1), so I provided the Skylight Intensity=500 example just to illustrate the problem more clearly. Additionally, Indirect Lighting Intensity=100 was only meant to show that it has no effect under Lumen—the actual environment still uses a value of 1.

You can observe the same issue under Skylight Intensity=1 and Indirect Lighting Intensity=1—the difference remains unchanged, with no improvement. In real game scenarios, fixing this requires placing many additional lights (point lights, spotlights, etc.), which is inefficient. The bigger problem is that these artificial lights cannot replicate the natural GI bounce and falloff effect.

[Image Removed]你截图这个正好可以证明问题的存在,第二行我用PS提亮,你会发现Lumen的结果不是一样的,是纯黑的。

而实际游戏在暗处EV会变化,最终还是能看到Path Tracing和Lumen的差异,Lumen缺乏GI反弹,是过于纯黑的。

我之前描述可能有偏差,我完善了测试和描述(帖子最上面),请你看这个案例,这足以说明问题,随着BaseColor越来越暗,问题越来越明显:

[Image Removed]

用于案例已经在最上方的附件提供过:UE5_UDN_Cases.zip

Level:

UE5_UDN_Cases

/Script/Engine.World’/Game/SkylightGITest.SkylightGITest’

Hi,感谢大佬的耐心答复,我先澄清一下

1.在自动曝光下Skylight 1和500甚至是5000,对于这个发黑问题没有任何变化(BaseColor=0.1),下面有截图

2.Hit Lighting问题一致,并非Suface Cache下有问题

3.PT和lumen测试indirect intensity 100 唯一出现一次是为了表达lumen不支持1之外的数值,其他截图均为1

4.PS的截图只是两侧都暗观察不明显,左右有本质差别,右侧始终是黑的,并非8bit拉升导致损失然后出现差异,这个可以通过下面的自动EV案例看到

我们现在用严谨的实际项目数值:1.自动曝光 2.岩石的BaseColor=0.08左右

基于这个问题我搭建了一个完全一样的简化环境,我相信没有必要把庞大的Mesh和贴图打包,这些足以说明问题,如果你仍然觉得测试案例有问题,我可以整理一份正式案例给过来:

[Image Removed]1.SkyLight GI在BaseColor低于0.5之后开始出现暗淡,大约低于0.2的时候无法接受,我们不能把游戏的贴图改成0.3-0.5以上只是为了满足SkyLight. 况且平行光没有这个问题.

[Image Removed]2.EV变化之后,Lumen Scene品质会变得很差,我提出一个疑点:Skylight=1 EV=10 和Skylight=5000 EV=1,假设画面看到的结果一样,亮度也一样,EV1一切正常,EV10下LumenScene品质很糟糕是不是代表有优化空间?我理解两者得到相同品质更合理。

我们可以看到EV 1 LumenScene品质OK的情况下,仍然死黑,在正式案例里主要是问题1导致暗淡,问题2还不够明显,在简易场景测试才发现。

非常非常感谢!

UE5_UDN_Cases_v02

/Script/Engine.World’/Game/SkylightGITest.SkylightGITest’

Hi,感谢你的专业意见,现在问题已经比较聚焦,通过深入测试得出下面结论:

1.DirectionalLight & SkyLight没有差别,都会在特定条件下丢失GI反弹

2.无论任何丢失GI反弹的情况,通过r.LumenScene.Radiosity.MaxRayIntensity 320 可以解决,如果追求大光比这个是解决问题的关键参数

但是,我仍然觉得这些地方不合理,希望可以进一步思考这算不算问题,以便引擎可以优化Lumen:

1.我做了一个DirectionalLight=30000.0 lux的案例(UE5_UDN_Cases_v03>SkylightGITest_01_Sun),这个足够明亮,在暗部EV100=-1,亮度并不极端,场景也非常简单,BOX底部几乎就2-3次反弹,但是BOX底部仍然是纯黑的,这极大的影响了美术的生产,属于显著问题,并非轻微或者极端情况下的问题。详见视频Lumen EV Issue2.mp4

[Image Removed]

2.BaseColor0.2在特定EV下通过r.LumenScene.Radiosity.MaxRayIntensity 320和40没有差别,这很符合你说的合理范围的极限,但是随着EV变化,物体的GI居然恒定,甚至越来越暗,这不符合“Lumen=预处理,EV=后处理”的设定,不断动态变化,甚至EV越亮,此处越黑,这是很难接受的,详见视频Lumen EV Issue.mp4

3.如图,同样Basecolor=0.2 Skylight intensity=1 EV100=-6,我们的效果不一样。请打开UE5_UDN_Cases_v03的SkylightGITest_02再次验证,手动设置EV100=-6,如果效果和我不同请告诉我做了什么,如果相同请忽略这个问题。

[Image Removed]

1、r.LumenScene.Radiosity.MaxRayIntensity基于当前曝光,曝光应用后过亮或者过暗会被这个值clamp掉。这个环境在EV100=-1的曝光设置下LumenScene过亮,被MaxRayItensity 40 clamp掉了,因此增加这个参数也可以改善。另外Tonemapping对暗部的影响很大,虽然PT和延迟下的Tonemapping算法应该没差别,但处理前的图的色深动态是不一样的,导致应用后可能会有差别ShowFlag.Tonemapper 0暂时关闭可以减少这种差别。在延迟渲染下如果暗部太暗建议可以减小暗部的contrast(PP盒子里)

[Image Removed]2、随着EV变化,曝光后的被裁切的可能性越来越大,比如EV100=-10的时候就需要配合r.LumenScene.Radiosity.MaxRayIntensity增大来缓解。总之曝光后的LumenScene亮度应该保持在一定的亮度范围内,否则可能因为被裁切导致亮部或暗部的GI或反射有问题。

3、EV100=-6的时候你用的skylight的贴图太暗了,换个亮点的比如白色的HDRI即可

另外测试时候建议把环境中那个PP盒子关掉,里面调整了大量后期效果干扰测试。还有材质的Specular不要0,0.5是默认的F0=0.02,正常绝大多数非金属的值。自然界几乎不会存在没有Specular的对象

非常感谢!当更了解Lumen工作原理,之前的困惑不再是困惑

大佬考虑的非常全面,Tonemapping这部分差异没有影响我的判断,本质还是Lumen容易发黑。在实际的案例特定角落里,MaxRayIntensity400几乎无效,至少4000才体现出效果,我尝试改成999999999999,似乎没发现有什么问题,后续我们会进一步测试这个参数带来的问题,有值得同步的结果会与你联系。

这是有Tonemapping的实际案例

[Image Removed]

BTW,local Exposure的适当应用可以缓解高动态光照环境反差过大问题