ue4sky时间_UE4 SkyLight RealTimeCapture浅析
UE4.26中的天光增加了一項功能RealTimeCapture,花了些時間測試了下具體的功能效果。
1.與之前的SceneRecapture功能的關(guān)系
這個功能不是之前功能的替代品(起碼短時間不會替代),而是一個補充,之前的Recapture Scene功能依然存在,兩者的共同點都是通過捕獲場景,然后計算球諧提供天光效果,但是不同的是,之前的Recapture Scene會捕獲場景中的所有物體,而RealTimeCapture只會捕獲SkyAtmosphere(或者SkyBox),VolumetricCloud,HeightFog,其中SkyAtmosphere和SkyBox是互斥的,兩者中只會有一個參與導(dǎo)捕獲中,SkyBox參與計算的條件是材質(zhì)中的IsSky勾選框勾中,如圖所示:
而且看了下源碼,只有開啟了SkyAtmosphere才會捕獲SkyBox,VolumetricCloud,HeightFog,可能是官方希望大家都啟用SkyAtmosphere功能吧。
2.效果與效率測試
首先測試下原來的Recapture Scene的效率,開啟之后:
關(guān)閉SkyLight Recapture:
可以看到,原先的SkyLight Recapture功能大概消耗為7.2ms左右,然后關(guān)閉SkyLight Recapture,開啟官方VolumetricCloud功能,開啟RealTimeCapture:
改變SkyAtmosphere的瑞麗散射值:
改變VolumetricCloud Albedo:
可以看到性能基本穩(wěn)定,消耗很小,但是接近黃昏時刻的瑞麗散射值的時候時間消耗比正常要大,應(yīng)該是偶然誤差,大部分時間消耗比較穩(wěn)定,看一下GPU消耗:
整個Capture過程GPU消耗大概0.34ms(測試顯卡2070)。
另外,我們可以不用SkyAtmosphere,而使用自定義的天空盒,當天空盒材質(zhì)開啟IsSky:
關(guān)閉IsSky:
這里需要注意,只有場景中啟用了SkyAtmosphere IsSky才會生效,不然是沒法捕獲自定義的天空盒的,仔細對比可以看到勾選了IsSky之后,體積云也發(fā)生了變化,具體兩者有什么聯(lián)系,暫時沒有深入研究。
3.捕獲過程分析
通過查看引擎源碼,可以找到實時捕獲過程中大概分為一下四步:
第一步,渲染之前提到的SkyAtmosphere(或者SkyBox),VolumetricCloud,HeightFog,LowerHeimisphereColor到SkyCube,第二步對上一步產(chǎn)生的SkyCube生成Mipmap,第三步生成SkyCube的高光卷積,最后一步把SkyCube通過CS生成對應(yīng)的球諧。
官方的統(tǒng)計消耗比我的測試是要高的,可能是因為我的設(shè)備性能更好一些吧,另外官方做了一步優(yōu)化,可以將上述過程進行分幀操作:
一共分了十二步,默認是開啟分幀的,可以通過r.SkyLight.RealTimeReflectionCapture.TimeSlice命令來控制開啟關(guān)閉。
4.總結(jié)
RealTimeCapture功能在PC的高性能平臺基本可以做到無消耗實時捕獲,而且和官方的SkyAtmosphere和VolumetricCloud配合使用可以給場景提供很好的天光效果,當然也有不足,比如目前主光和場景中的實體無法參與到實時捕獲中,但總體可以在較低消耗下做到場景氛圍的實時更新,特別在天氣時間變化比較明顯的場景中應(yīng)該能發(fā)揮比較好的效果。對于移動端,首先需要做到支持SkyAtmosphere和VolumetricCloud效果才能發(fā)揮實時捕獲的作用,還是需要不少工作要做的。
總結(jié)
以上是生活随笔為你收集整理的ue4sky时间_UE4 SkyLight RealTimeCapture浅析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: firebird 行级锁问题_MySQL
- 下一篇: python以缩进对齐的方式划分语句块_