本帖最后由 Alex_Tsui 于 2016-8-5 15:00 编辑
故事要从两周前熊猫大大分享的一个VXGI 4.12.2版本说起,在看过PDF之后找了程序同事帮忙在github下载了VXGI 4.12.5版本学习和测试。因为是英伟达独立维护的分支,所以学习和可借鉴的案例并不多。先分享一下出自大师之手的4.6版本VXGI的测试:
https://www.youtube.com/watch?v=cH2_RkfStSk
优点:
缺点:
被吓的哇哇大哭的我马上找到这个专门讨论VXGI的帖子学习和研究,目前这个横跨两年之久的帖子已经85页了,前7页是关于物理模拟的讨论,后面基本每页都有关于VXGI实时GI的参数和效果讨论,看的我鼻涕一把泪一把。。。。最后也没记住太多,好在网友Chariots总结了一下。以下是原文,我的翻译和测试心得。下文所有提到的performance表示性能,可以理解为画面流畅度或对显卡的友好程度。性能越好,画面质量越打折;质量越好,越要牺牲性能。需要找到一个您满意的平衡点。仅仅学习UE4四个月,有理解不到位和说的不对的地方还请诸位包涵。
就像Blakblt在这里贴出来的一样,默认的VXGI设置似乎尝试模拟构建过的灯光质量。这对于建筑可视化和更小更可控的场景是不错的,但是对于其他情况可能就会有些问题了。您需要一顿乱设置来达到你理想的最好的质量/性能 比率。默认数值用黑体表示。
Alex心得:默认参数确实比较贴心,但是色调偏差很多,需要PPV中加入LUT修改,达到满意的色调。(尽管吐槽我喜欢的美图秀秀吧~~~)默认参数怎么调?看这个概览吧以及这个VXGI大致算法。
控制台命令:
r.VXGI.MapSize 32/64/128/256
改变立体像素的大小。越小(意味着更大的立体像素)性能越好,但会产生漏光和计算不精确。256在今天绝大部分的GPU上是不适用的。虽然英伟达建议采用64获得更好的性能,但是您也可以设置成32。
Alex心得:如果显卡够好,建议保持默认128,设置为64削弱了GI产生的阴影。想换显卡的同志调到256玩玩啦,鲁大师秒秒钟报警信不信~~下面是对比测试 128:64
r.VXGI.Range 400
如名字一样,改变范围。然而它有一个边界效果。如果您增加范围,它也会缩放立体像素的尺寸,立体像素的数量是一个维持不变的常量,所以您不会因为过多的立体像素而陷入困境。
Alex心得:调整range数值不会影响性能,我测试的场景300-400比较适合,过低可见范围小,外围呈黑色,也就是上面提到的边界效果。range=0的时候直接崩溃,range>400的时候GI产生的阴影慢慢变浅直到消失。range>5000场景色调向阳光颜色靠近,渐渐忽略skylight。
r.VXGI.StackLevels 1/2/3/4/5
正如Blakbit在帖子中写到的,设置它会对性能产生巨大的影响。VXGI减少几何体的立体像素分辨率远多于VXGI锚点(默认附着于相机)。默认设置拥有5级不同的立体像素大小。通过降低stacklevel数值,你可以提高(或者降低)性能。我建议阅读上面的帖子链接获取更多详细信息。主旨就是您需要通过用此设置结合mapsize以及range的设置来找到适用您的场景最佳数值组合。
在这个帖子说说道,此参数低于2会产生严重的非正常效果。
Alex心得:其实从5依次降到2,并没发现帧数太明显变化,只是显示范围会慢慢变短,外围呈现黑色。level=2时如下图:
level=1如下图:
于是我试图增加range,虽然外围黑色褪去,但是过高的range把GI产生的阴影也带走了。而mapsize保持默认的128,增加显卡吃不消。。。如下图:level=2,range=3000,mapsize=128.
所以个人感觉level和range一般情况下可以不动,可能有更好的组合方式我还没有挖掘出来。
r.VXGI.MultiBounceEnable 0/1
如名字建议的一样,启用多次反弹。根据英伟达概览,它的工作原理是在当前帧使用上一帧的发光贴图。英伟达概览在这里(需要通过github)提到:禁用它会增加立体像素的性能。
Alex心得:默认是0,关闭的。
禁用:
开启:
经过多次反弹,场景稍微提亮,帧数降低。显卡如果可以的话建议开启,下面对比图更明显:
r.VXGI.HighQualityEmittanceDownsamplingEnable 0/1
在下面两个链接中提到过-----Daniel.Wenograd的帖子和VXGI概览。
Alex心得:我靠个DJ!提到过,还真是仅仅提到过,多一点解释都没有。只说保持默认关闭可以提高立体像素性能。于是我测试了一下,下图保持默认不开启:
下图开启:
个人觉得只有一点肉眼难见的区别,暗部稍微提亮,不是很明显。帧数降低。但是此场景中灯光少,也没有自发光物体,所以有待进一步测试。
r.VXGI.StoreEmittanceInHdrFormat 0/1
在Daniel.Wenograd的帖子中提到过。它影响多次反弹,他在这个帖子下面指出此参数与显存有关。这里有更多信息。
Alex心得:我下载了一个GPU-Z观察显卡使用情况,默认开启此设置如图:
关闭此设置后效果如图:
关闭之后性能稍微提高,而且从内存使用也少了300MB左右。画面效果上没有明显变化。
走过路过小秀一下双路1080,虽然只用单卡测试~~~~害羞脸⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄
Post-Process Volume Settings:
后处理体积设置:
Number of Cones 8
个人的解释是,降低该参数会提高性能。英伟达建议设置4,个人觉得比4低的数值会产生很多非正常效果。
Alex心得: 下面在低分辨率下做的测试数值分别为4,8,16,32,64,128
可见帧数随着cone圆锥数增加慢慢降低,而且在低分辨率下64的数值已经让1080卡也吃不消了更别提128了。。。。国外大师也仅仅开到32,而我个人觉得因地制宜,此场景32数值产生的阴影太深不够柔和而且趋于圆形阴影,效果不够理想,所以我选择16获得更柔和且右侧墙壁上有形状趋于灯杯形状的阴影效果。大家可以根据自己的场景做出选择。此参数最大值128。
Tracing Sparsity 1/2/3/4
增加该参数会降低追踪分辨率,英伟达建议为4。
Alex心得:数值为1的时候是密集的追踪,2,3,4追踪分辨率依次降低,离得近并不能看出区别,但是离得远的地方,看阴影就很明显。下图是数值为4的时候,阴影成像素块效果。
下图数值为2的时候效果明显好了很多,但是相应的性能也降低了。所以需要根据场景调整。
Tracing Step 0.01/../0.5/../2
增加该参数会提高性能,但是光照变得更不稳定。在最大级别2的时候,您在场景中移动的时候可以清楚地看到颜色变化。个人觉得该设置因地制宜,需要具体情况具体分析。有些场景可能较其他场景对于该参数的容错率高一些。
Alex心得:
step=0.01如下图:
step=0.1
step=0.5
step=1:
step=2:
个人0.5-1的效果较好,虽然数值为2的时候性能很好,但是GI产生的阴影很大,而且墙角的AO效果弱了不少。所以此场景我选择1,还是因地制宜吧,从视觉上来调整各种参数为佳。
Use Temporal Filtering On/Off
英伟达的概览建议在使用一些性能设置时开启这个参数来隐蔽非正常的闪光、光斑。
Alex心得:建议开启,反正不会影响性能,还能规避一些错误。
Enable Specular Tracing On/Off
当开启此设置时会提升效果质量(有时候特别明显),如果遇到性能问题您可以关闭该设置,那么仍然会依赖UE4的SSR的反射。VXGI还是不特别适用反射强烈的表面。英伟达的概览中提到,您可以用"r.VXGI.CombineSpecularWithSSR 1"的控制台指令来结合VXGI的高光和SSR。不输入这个命令的话,当开始VXGI Specular时,SSR是无效的。
Alex心得:
r.VXGI.SpecularTracingEnable 0 效果如下,是人都目不忍视
r.VXGI.SpecularTracingEnable 1 ,不开启PPV中的Enable Specular Tracing和上图无区别,开启之后效果如下,是个人应该也不想看。。。
这时候输入r.VXGI.CombineSpecularWithSSR 1就会有大大的提升,但是性能也打折了,我一般开启combine。
最后是自己的一些测试截图:
老场景,如果只有阳光,场景偏阳光色,如果用LUT调,那地面上的阳光颜色就偏冷了,不是暖色。所以为了场景整体偏白,所以加入了天光,但是天光对场景影响很大,即使调到强度0依然有影响,所以在PPV中调整了auto exposure。对比之下可以看到实时GI还是有很多不足,但是未来肯定会越来越好,而且不展UV,不构建光照,真是爽的不要不要的。
由于不能用公司项目测试,所以找一个网上免费的场景测试:一方面我调的不好,一方面室内如果灯光太多的话,还不是很适合用VXGI,性能会很低,而且灯光多了之后实时GI瑕疵变得很明显。
由于受限于现今的硬件设备,所以VXGI或者说实时GI还不适于商业开发,但随着硬件的提升,未来实时GI也有可能成为一种趋势。而且UE4.13貌似对实时GI也做了很大的改进,让我们拭目以待吧。老规矩,测试文件会免费分享给大家。打开项目文件之后应该需要输入下面的指令才能得到正常效果:
r.VXGI.CombineSpecularWithSSR 1
r.SSR.Quality 4 (我同样修改SSR.usf中quality4的两个数值我都设置为64了。)
昨晚打包windows 64一次过,没遇到什么问题。如果小伙伴想把已烘焙过的场景更改为VXGI场景,可以在世界设置的lightmass处不使用预烘焙光,并且在项目设置中禁用静态光源,重启项目。然后按照VXGI概览搞定默认设置然后根据视觉调整细节参数。
希望老司机可以分享自己的测试和建议,谢谢大家!
Peace out~~
链接:http://pan.baidu.com/s/1o8iwZrk 密码:hbtt
|