3

游戏性能优化杂谈(九)

 3 years ago
source link: https://zhuanlan.zhihu.com/p/272724165
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

游戏性能优化杂谈(九)

GPU端的优化,其实就和通下水道是类似的。所以GPU端优化师,基本就是一个水管工。

GPU的工作方式,与工厂当中的自动生产流水线非常类似。生产线这头是生料(primitive)进去,而生产线的那头就是成品出来(frame)。在生产线上还会有很多组装过程当中需要的辅料、粘着剂、包装材等等,等待在产线各个阶段的供料台上面,当组装中的产品到达时,被自动加进去。

而在这个过程当中CPU的作用,就好像运营监视流水线的工人。前期是设置流水线上各个环节机器的参数,并将各种辅料放置到自动供料台上。之后启动流水线,在一旁观察运行状态并适时进行必要调整。

一条流水线的整体生产效率,是由最薄弱的那个环节决定的。这就好像下水管的流速,是由最堵的那段决定的。找到这段,然后疏通或者扩容,这差不多就是GPU优化的全部。

当然,如果不熟悉管线的连接和布置,分不清管线当中液体的流向,那么是很难定位问题所在的。GPU优化其实并没有很难,难的是GPU现在远没有CPU那样标准化、透明化。在公开领域很难找到能够具体到管线布置的线路图,大部分只是一个概念图。更不要谈管线原始的设计图,标有管线内径外径以及设计流速,弯道的曲率等详细数据的图了。

所以,对于诸如PC或者移动平台,这种开放式平台,GPU优化会显得比较困难。但是在主机平台这种封闭的,定制化硬件平台,这些都不是事儿。当然,前提是要遵守平台的保密协议。

但是,即便不知道很多技术细节,在一些基本的理念和思想方面,其实各个平台,各个GPU型号都是有很多共通点的。

现代的图形渲染管线,从大的方面来说,基本上包括以下几个阶段:

  1. 预处理阶段。一般包含一些渲染前的准备,比如GPU端的遮挡剔除计算、骨骼动画计算、蒙皮计算,以及前置Z Pass、阴影贴图渲染等等。
  2. 几何阶段。将CPU传递过来的生料(顶点数据)进行加工形成产品(画面)的阶段。
  3. 后处理阶段。将产品打磨抛光包装(通过P图算法进行画面美化)的阶段。

这3个阶段在GPU一帧的渲染时间当中的占比,不同的游戏区别很大。根据笔者近5年上百款项目的经验来说,大致上,阶段1在0%~10%的样子;阶段2在30%~70%的样子,阶段3在70%~30%的样子。并且总体上3阶段占比与游戏A评级的数量有一定正比关系。往往独立系游戏因为资源制作水平和成本问题2阶段会很重,3A反而因为美术资源优化得很好且追求画面效果是3阶段占大头。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK