[gdc20]6 years of optimizing world of tanks

[gdc20]6 years of optimizing world of tanks

gdc20上为数不多的讲完整项目的talk,和intel一起做的,所以谈intel的技术偏多一些,谈了坦克世界6年的优化经验,作为从业者来说,其中的历程比文中的一些技术更加宝贵。
开发商是白俄罗斯的游戏开发商“WarGaming”,旗下有战舰世界等战争游戏(和studio名字还真是相当匹配)。

CoreEngine的6年的升级之路

坦克世界用的是in house的core engine,于2010年上线的。
然后上线之后保持一个持续升级,本文是覆盖了14年到现在的持续升级。
其中包括了:

  1. 14-15年为ultrabook优化
  2. 16-17,升级dx11以及优化CoreEngine,并且正式发布大型补丁,游戏也是正式命名为《World Of Tank 1.0》
  3. –这个版本里重制了29张地图(每张图里的物件多了4倍),一张新图,增加ultra 画质
  4. 18: 多线程渲染,havok destruction,avx2指令集
  5. 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

[gdc20]6 years of optimizing world of tanks
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)里的这个做法
    [gdc20]6 years of optimizing world of tanks
    最终效率