[gdc20]6 years of optimizing world of tanks
gdc20上为数不多的讲完整项目的talk,和intel一起做的,所以谈intel的技术偏多一些,谈了坦克世界6年的优化经验,作为从业者来说,其中的历程比文中的一些技术更加宝贵。
开发商是白俄罗斯的游戏开发商“WarGaming”,旗下有战舰世界等战争游戏(和studio名字还真是相当匹配)。
CoreEngine的6年的升级之路
坦克世界用的是in house的core engine,于2010年上线的。
然后上线之后保持一个持续升级,本文是覆盖了14年到现在的持续升级。
其中包括了:
- 14-15年为ultrabook优化
- 16-17,升级dx11以及优化CoreEngine,并且正式发布大型补丁,游戏也是正式命名为《World Of Tank 1.0》
- –这个版本里重制了29张地图(每张图里的物件多了4倍),一张新图,增加ultra 画质
- 18: 多线程渲染,havok destruction,avx2指令集
- 19 raytracing shadow
我们在《天涯明月刀》《无限法则》上线之后也是历经了持续的升级。
可以说共鸣感非常的强。
相比之下,文章列的具体技术点其实都是很小的点,对项目组痛感小,真正厉害的是:
- 做项目级别的持续资源升级才是比较致命的
- 项目级别的代码升级,而且保证项目运转正常,这需要非常强的整体把控力,这与具体技术点有质变的区别
WarGaming在这点上可以说做得很不错,品质放到2020年依旧是不错的。
14-15 UltraBook优化
这里主要针对intel集成显卡,包括:
- 动态分辨率(UI分辨率不降)
- 植被多一个stencil pass
16 CoreEngine 5.0升级
dx11升级,支持dx9和dx11两个版本;
通过抽象公共接口来处理两套API的问题,是与Unreal的RHI一样的概念,这个可以说从xbox时代,开发商要面临多图形API就要做得事情了。
值得一提的具体feature:
- terrain with virtual texture
- adaptive shadow maps
- havok destruction
然后重制了地图。
多线程部分,使用intel thread building block等部分都比较正常,略去。
ISPC
ispc,后面会有一个汇总,这里我们可以看到world of tank使用sse到avx2到ispc的性能变化。
可见ispc的战斗力。
RayTracingShadow
这里WarGaming在dx11上使用非RayTracing硬件实现了针对软阴影的实现;
这里raytracing这块如果直接使用RayTracing的硬件以及对应dx12的api,应该说是非常直接的过程。
如果是monte carlo系的技术,会在denoise方面遇到挑战。
但是在dx11上用compute/pixel shader做就还是有点绕的。
先走过程
raytracing流程
这里是一个monte carlo+temperal的标准流程:
- ray的分布:根据uniform cone分布来做ray jitter,这是一个类似TAA的temperal的过程
- 然后做ray-triangle intersection
- temperal积累
- denoiser(基于SVGF:也就是nvidia的Spatiotemporal Variance-Guided Filtering
) - temperal aa
cpu+compute shader的工作
这里因为要用非raytracing硬件做,所以就是:
- cpu端用embree建立BVH树(在nvidia gpu上就是rtcore来做这个)
- compute/pixel shader做求交,denoiser,temperal等工作
优化
- 是只有tank才有高质量的raytracing软阴影
- 真正做raytracing的部分,只在阴影的边缘,类似一个老游戏《赛车总动员》(https://blog.****.net/toughbro/article/details/6773388)里的这个做法
最终效率