
随着硬件的发展,我们可以看到GPU的计算能力远远的把CPU抛在后面,因此可以说业界一直在努力把更多的CPU计算放到GPU方面。。
长期以来,draw调用的删除和提交都是由CPU完成的。一方面,CPU的计算能力差只能做非常粗糙的。另一方面,消费量相当高,这导致国内游戏行业在性能方面谈抽签次数。
这部分离GPU很近,所以当然要先下手了。
其实早在PS3时代,强劲的spu,一定程度上我们可以理解为是一个更通用的GPGPU,就承担了这个任务,更激进的剔除和替代cpu进行drawcall提交,都让性能在cpu有质的飞跃,gpu也同时受益。
从dx11开始,都支持渲染的对象的部分参数由GPU来生成,可以说GPGPU来做这个事情的条件就也成熟了。
整体上在性能上的收获是非常大的:
- <刺客信条>,应该说几个paper里面受益最少的,但也非常的可观,标题图里的海量建筑
- cpu 比前一座,10x的obj,但是cpu却快了25%
- gpu也少渲染了20%到80%的triangle
<farcry5>的地形
- gpu把quadtree traverse到lod map以及各种cull,0.1ms搞定。。。比cpu真是绝对优势
从15年的siggraph开始,ubi和EA都相继做了不少的分享,到了今年(2018)继续有新的游戏和引擎把这块用的更加成熟:
- siggraph15, < GPU-Driven Rendering Pipelines> @ ubisoft
- gdc16, < Optimizing the Graphics Pipeline With Compute> @ EA
- gdc18, TerrainRenderingFarCry5 @ ubisoft
- ...

总的看来,GPU driven pipeline是有两个部分:
- 剔除--不只是offload了cpu的工作,进一步在gpu上做更aggressive的cull
- 提交--目标是一个drawcall结束战斗,根据实际情况进行折中了
这部分是通过gpgpu来先对要渲染的object进行剔除,这里ubi和ea都分成两个level来做,cluster和triangle

把mesh分成固定的一些cluster,比如6400 vertices就分成100个cluster,每个cluster 64vertices,然后进行bound和orientation的cull。
这里的backface,small area triangle都是老生常谈。
depth buffer这个,可以
- 在pc上使用cpu software rasterizer
- depth prepass, 然后downsample
- 使用上一帧的depth buffer做一个reprojection
使用其中的1个或几个组合。
项目旧代码有一些常见的问题,如果是dx12或一个真正的基于纹理的项目,那么这样做更容易。
简言之,如果要绑定的资源非常不同,那么仍然很难将它们放在一起呈现。
这里< assassin''s creed:unity >就是没法改的彻底,所以还是依据material来batch,那么可以说gpu driven的就相当不彻底。
而redlynx,pipeline是有比较重的virtual texture,farcry5的地形有virtual texture,那么资源就不需要改变绑定,那么就可以一个drawcall搞定一切,达到一个更彻底的gpu driven的程度。
dx12对此有更好的支持,可以更彻底的gpu driven了。
- 刺客信条,应该说几个paper里面受益最少的,但也非常的可观
- cpu 比前一座,10x的obj,但是cpu却快了25%
- gpu也少渲染了20%到80%的triangle
farcry5
转载声明:本文来源于网络,不作任何商业用途











IOS下载
安卓下载
小程序