|
gdc2020, blizzard带来在魔兽世界中的vrs的应用,顺便也把intel的专门支持VRS的一篇GDC talk也带上了,其实是两篇关于vrs的合体文。
整体说来,VRS在性能优化方面有它很不错的优势,几年前推得VRS随着dx12 ultimate以及若干游戏的应用,在PC上算是进入一个比较好的成熟期。
在手机平台,比较新的GPU上面也开始逐渐支持这个,是非常值得关注和逐渐投入使用的点;
文章开头提到魔兽世界升级到dx12,然后稍微用一些dx12的多线程command list generate, async copy queue等,帧数50->80;very happy;
然后是正文,来的vrs;
VariableRateShading
VRS是VariableRateShading的简写,最初是用于VR设备。
后来在vulkan,dx12中成为标配,陆续在各种GPU里也有支持,也是dx12相比dx11重要的技术优势。
可以提供在不同的区域以不同的比例来做shading(也就是一个像素的shading用于多个像素);比如这样:
这样在一些图像变化低频区域或者视觉不敏感的区域(比如VR中的视觉边缘的地方),就可以用1x2甚至2x2的VRS,进而优化性能。
VRS的优势
这里可能有的同学会觉得和低分辨率渲染particle比较像,这里就涉及到VRS的优势:
• 可控性高
• 边缘处理比较好
可控性
VRS主要有几个控制方式,可以在屏幕上非常精准的启用:
• DrawCall:可以只针对一个drawcall启用
• 屏幕mask:可以在屏幕上生成一个mask(比如mask出天空,然后对天空使用)
• primitive attribute:可以在vertex/geometry shader里输出attribute来控制启用所以可见这个可控性是非常好的
边缘处理
VRS的时候是fragment shading是可以减少变成1x2,2x2这种,但是depth buffer还是一个1:1的状态;
加上shading策略是这样的:
也就是在边缘上有很好的的处理。
常规我们在处理低分辨率渲染的,upscale的时候都要各种bilateral filter处理(还不干净),这个相比之下就干净多了
具体挑战
毕竟这个是一个降低分辨率的活,那么具体用在哪里是一个摸索尝试的过程。
msdn的建议里包括:
• ui覆盖的场景
• motion blur,dof等
• 天空等
手机其实也有支持
这个现在比较新的mobile gpu上也逐渐有支持,手游开发者可以和具体gpu厂商联系询问。
魔兽世界里的应用
暴雪表示红色部分都是可以尝试的,不过考虑到魔兽毕竟贴图精度,画面风格各方面。。。
简言之大家还是在自己游戏里各种都尝试,最后暴雪的结论是:
• 在地形,dof,motionblur,远景物件上用都挺好的
• 而且这个vrs的切换也非常的不容易看出来,很平滑
• 相比低分辨渲染,边缘处理的更好
• 特效会有blocky的感觉(这里根据vrs的原理也比较好推测,毕竟是少了linear filter这种)
reference
For the Alliance! 'World of Warcraft' and Intel discuss an Optimized Azeroth (Presented by Intel Corporation)
Variable Rate Shading Tier 1 with DirectX12 from Theory to Practice (Presented by Intel)
Variable-rate shading (VRS) - Win32 apps
腾讯北极光工作室群招聘:Call For HardcoreDeveloper
作者:安柏霖
原地址:https://zhuanlan.zhihu.com/p/138024983
|
|