纪元180_纪元1800_纪元1800地图种子

本文通过引用Intel与育碧工程师的优化介绍文章,以及对介绍育碧旗下著名策略游戏,讲述如何将游戏优化到即使是Gen11核显,也能从原本低画质10fps的游戏帧数变成1080P低画质下30fps游戏的原因和背后性能分析的努力,了解游戏特效优化的一些必经之路,性能优化部分内容是Intel/育碧的工程师角度叙述的。

ANNO系列

电脑游戏历经多年发展,已经有了众多历经数十年不衰的系列游戏,比如我们熟知的古墓丽影,极品飞车,FIFA/PES,刺客信条等,自1998年推出,开启ANNO系列序幕,就成为了当时受到众多好评和销量出色的策略游戏,当时,还是即时战略游戏的黄金时期,ANNO系列最令人印象深刻的就是结合历史背景打造的城市建筑,细致而复杂的发展路线,并融合了即时战略的作战夺港口的战斗,但也因此使得其没有成为一个真正的国民性战略游戏,因为其上手难度较大,玩家需要花费大量的熟悉成本,而且过于具体的历史背景有时不太能被广为接受,但毫无疑问,其系列的质量是非常出色的。

纪元1800地图种子_纪元180_纪元1800

2009年推出的是开创性的一代,1404的风格也在今天要说的中起到承上启下的作用,的地图建设范围,相关建筑的发展,物产的组合,资源的利用乃至画面质量都开启了ANNO系列的新时代,而且故事背景设置在大航海时代前夕,有非常文艺复兴的历史痕迹,画质也绝对是非常的栩栩如生,勾勒出那个时代的城市风貌

纪元180_纪元1800地图种子_纪元1800

而纪元系列的开发团队之后觉得相关背景已经足够出色,2011年的Anno 2070 不仅使该系列进入了科幻氛围,使玩家可以在海底建造未来主义的大都市,而且,由于随着游戏进入数字版发行的时代,全世界越来越多的玩家玩到了纪元系列游戏。紧随其后的是2015年的Anno 2205,充满科幻和未来气息的城市,但上手难度不高,反而令老玩家有些不满。

纪元180_纪元1800_纪元1800地图种子

纪元1800再次回到了历史背景题材,最新的纪元1800将时代放在了1800年代,由于纪元系列的年代数字是相加总和为9,所以出现的年份数字不代表具体年份,而是指代这个时期,1800也就是19世纪,这个时期人类科技和社会发展空前快速,从农业文明快速进入第一次工业革命后随即开启第二次工业革命,并且发展出了发达的资本主义金融体系,这使得玩家要在游戏里从农业发展到工人工匠,再到工程师,投资人的多个社会阶级和发展历程走完,一个岛,一个城显然是无法满足需求了,甚至一个地图也不够了,玩家需要到另外的世界(游戏里称为新大陆,暗指美洲),甚至北极(DLC内容)中去开发资源发展自己的现代企业,堪比东印度公司,因为玩家还会需要保护贸易和攻打其他同时发展的玩家/Ai,争夺资源和地盘,所以还会有一支强大的海军。而海军是即时战略作战的,玩家可以操作这些舰船,进行攻击和撤退,针对风帆战舰的特点,甚至有逆风顺风的考量,玩家通过抢到更好的射击位,从而取得海战的胜利。

纪元1800_纪元180_纪元1800地图种子

纪元1800_纪元180_纪元1800地图种子

纪元1800地图种子_纪元1800_纪元180

当然,在发展中遇到的问题是不可避免的,提高工人,农民,工匠,工程师等不同阶级的人的满意度和需求也是不一样的,越高端的职业阶级,需要的产品要求越高,比如农民只需要烈酒(马铃薯酿造),只需要普通的制服,而工人需要专门的啤酒(啤酒花和小麦),需要有肥皂和香肠,工匠则需要牛肉罐头这样的产品,穿的衣服也要毛皮大衣,家里也要有缝纫机这样的产品才能提高满意度,工程师更需要自行车,眼镜,这样的产品,投资人需要葡萄酒,咖啡,当然城市方面,公共设施如医院,消防局,警察局,博物馆,动物园,各类港口,工业基地,铁路,发电厂,原油和矿产开采,令玩家目不暇接,对城市规划的要求也非常高,更重要的是稍有不慎,一旦相关产品没有跟上,人民不满,生产减缓,恶性循环,万劫不复。

游戏画面也是异常精致,数十个生产链,数百个建筑,成千上万的居民,都在游戏引擎下被细致的渲染出来,大海上的舰船和岛上的风光,也显得栩栩如生。

纪元180_纪元1800_纪元1800地图种子

纪元1800_纪元180_纪元1800地图种子

纪元1800地图种子_纪元180_纪元1800

纪元180_纪元1800地图种子_纪元1800

所以,并不是每个玩家都有非常强大的硬件,但策略游戏非常适合休闲养成玩家游玩,可以随时随地的玩上半小时或者几小时,然后保存起来,过段时间再继续玩,如今非常多样的轻薄笔记本没有非常强大的GPU,这使得游戏优化到即使是核显都能玩的地步是扩大这类游戏受众的重要一步。

初步绩效分析

优化工作始于由和Intel工程师共同组成的 Mainz办公室。最初的测试表明,在英特尔的集成显卡上,游戏以最低的每秒10帧(fps)的速度运行。这比主流笔记本电脑上需要的基本游戏体验所需要的30fps相去甚远。

工程团队决定深入研究确定性能问题以及如何解决这些问题。了解3D应用程序性能的第一步之一就是发现它此时这种表现是受GPU还是CPU限制。两者都可能使游戏成为瓶颈,并且有多种评估方法。

英特尔使用全面的图形性能分析工具包:英特尔图形性能分析器(英特尔GPA)包括功能强大的敏捷工具,使游戏开发人员能够充分利用其游戏平台的全部性能潜力,包括但不限于英特尔酷睿。处理器和英特尔处理器图形。英特尔GPA工具可视化应用程序中的性能数据,使用户和开发人员能够理解从系统级到单个框架性能的问题。

植被渲染

使用英特尔GPA系统分析器实验,很明显该游戏完全受GPU限制,因此该团队投入了框架分析。该工具迅速突出显示,大部分帧时间都花费在渲染植被上。深入研究这些绘制调用,我们发现性能低下的原因是特定于硬件的问题。

植被在缓冲区中写入,以及在像素着色器中使用clip()指令进行alpha测试。而Gen11之前的Intel HD/UHD核显。已发现无需使用模板缓冲区即可达到相同的植被渲染质量。经过一些小的代码更改后,游戏现在可以正常运行了,这次的性能约为20fps;是以前的两倍。

纪元180_纪元1800地图种子_纪元1800

当游戏在低质量设置(458个三角形)中运行时,依旧显示最高细节的树状网格

我们还必须通过减少低画质中的树木数量来减少植被对性能的影响。事实证明,这在游戏的“新大陆”地图中特别有用,这是一种南美风格的地图,该岛的大部分地区都被密林覆盖。我们还需要禁用自动生成草地的渲染器,该生成器通常将成千上万的草和灌木网格分散到空白区域和森林边界周围,这也具体取决于玩家视角摄像机的视图。这些许多小物体过分用力地压榨GPU的三角形吞吐量和像素填充率的性能。

物体对象剔除( )

Anno 1800的建筑等物体涉及屏幕上许多小的视觉细节。玩家从头开始创建和管理自己的城市,但是他们往往不会具体管理到每个建筑上的细节,更希望沉浸在他们创作的整个城市的总体情况下。对于我们的引擎而言,这是一个严峻的挑战,因为每帧都需要勾选并渲染成千上万个动态对象。屏幕上几乎所有事物都是动态的:游戏的建筑物由数十个较小的子对象组成,这些对象需要视觉变化,便于游戏美术师易于使用,以及开发游戏相关的动画和效果。对于游戏中到处行走的居民,野生生物和车辆也是如此。我们还需要分别处理树木,灌木丛和草丛,因为在玩家的城市发展过程中必须动态添加或删除它们。大量的具体的物体会严重影响游戏的帧速率性能。

纪元1800_纪元1800地图种子_纪元180

仓库建筑物,其组成的子对象已着色。大部分子对象是根据相机距离选择的。

这些对象中的相当一部分对象只有在近距离观察时才被玩家注意到。我们会尽早根据对象的大小主动删除它们。对于每个对象,我们根据其边界球状检测,比例,摄像机视角的距离和摄像机视场(FOV)估算其最终大小,设置阈值。明显超过阈值会剔除足够小的对象。几乎达到该阈值的对象会通过alpha混合淡出,从而呈现柔和的外观而不是直接剔除,因为部分对象如果直接被剔除会太明显,且有可能让人分散注意力。而通过抖动渲染到阴影贴图中,对象阴影会呈现褪色。

游戏主动利用几何实例化在一个绘制调用中渲染多个对象实例。这使得它可以用更少的实际绘制调用来渲染成千上万的对象。例如,可能是一个村庄中同一时间的所有建筑物。这也带来了另一个挑战。这些物体并不总是在空间上彼此靠近。如果没有进行主动的平截头体剔除,则可能会出现某些渲染对象完全不在屏幕上,但仍被GPU发送和转换的情况。

英特尔GPA帧分析器的下面两个图突出显示了其中一些与剔除有关的问题。它们显示了渲染建筑物的两次绘制调用。可视视口是中间红绿线条组成的正方形。显然,多个实例完全在视口之外。这些实例将在剔除渲染阶段被剔除,但之前的所有阶段,包括几何抓取和VS处理,都将在GPU上执行。甚至在被发送至GPU之前,通过优化实例和对每个实例的边界框进行更好的CPU剔除,可以节省多个 GPU 时钟周期。

纪元1800_纪元180_纪元1800地图种子

纪元1800地图种子_纪元1800_纪元180

初始Intel GPA几何视图,该视图显示次优对象的剔除。

下图显示了硬件指标,可用于Intel GPA Frame 中的每个绘图调用。第一个指标显示调用的总数,第二个指标显示剩余的基本数量。在上文植被渲染图中提供的示例图中,从最初的190 K起只剩下大约4万个多边形。略大于20%,其中80%的提交作品被剔除。

纪元1800地图种子_纪元1800_纪元180

阴影优化

在以前的Anno游戏中,使用的是级联的阴影贴图(CSM, maps),该贴图通常由CPU代码进行管理,并针对最坏的情况进行了手工调整。到,我们切换到使用SDSM技术,也就是 Maps(分布式阴影贴图示例),在该示例中,计算着色器通过在Z-(CPU预先景深计算)完成后分析深度缓冲区来动态调整每帧的阴影级联。在几乎所有情况下,这样能够提高阴影的清晰度。例如,在之前的游戏中,阴影总是有点偏移,而且与小投影者(比如居民)断开,因为我们为了处理其他问题情境,需要大量的调整和偏移。SDSM 能够显著改善这些情况,并将阴影和投影者连接起来。

但是,切换到SDSM却导致了一个严重的问题:我们不再能够将对象划分为CPU上的影子级联,因为我们无法再访问级联的拆分平面位置。最初,我们只是将这个问题推后处理,始终将所有阴影投射对象渲染到每个级联中,从而导致严重的性能下降,尤其是在GPU上。我们尝试从显存(VRAM)读取拆分平面位置,并将其用于CPU分区。但是,由于数据滞后了几帧,这样数据的处理太过时了,因此结果并不令人满意。

最后,我们决定使用计算着色器在 GPU 上进行分区。我们在结构化缓冲区中填充所有投影对象的相关信息:Axis-- Box (AABB)、变换和着色参数。计算着色器使用该缓冲区,测试每个对象的阴影级联分割平面纪元180,然后写入至两个输出缓冲区。对象的变换和着色参数附加到第二个结构化缓冲区中,而字节地址缓冲区中填充绘制参数。最后,我们用 () 替换常用的 () 调用来进行阴影贴图渲染、使用字节地址缓冲区的绘制参数,并从结构化缓冲区(而非常量缓冲区)读取着色器中每个对象的参数。

我们最初仅在较低质量的设置下按比例缩小了阴影贴图分辨率,但在所有其他情况下始终使用全套四个阴影级联。这在低端计算机上引入了一些性能问题。首先,需要检查所有阴影对象,以将它们渲染到这些级联中的哪一个中。其次,所有位于级联边界的对象也需要渲染两次,它们接触的每个级联一次。由于Anno 1800主要是从上到下的角度来播放呈现的,因此在大多数情况下并不需要这么多的级联:从上到下的视图,单个级联就足够了。只有当摄像机视角注视地平线时,我们才需要多个级联以正确分布阴影贴图纹理。

我们根据当前摄像机的间距动态调整了阴影级联的数量(下面四个图)。此外,我们限制了级联的最大数量,仅在最高质量设置上最多使用四个级联。对于低质量纪元180,我们最多限制两个级联,这使得在所有情况下都足够满足需求。

纪元1800_纪元1800地图种子_纪元180

纪元180_纪元1800地图种子_纪元1800

纪元180_纪元1800地图种子_纪元1800

纪元180_纪元1800_纪元1800地图种子

根据相机间距,四个活动阴影级联的彩色视图。第四张图片的远灰色区域没有阴影。

我们还在低画质下禁用了相邻级联之间的软图层混合。在更高画质质量的设置中,蓝噪声抖动模式会混合级联之间的交叉线,偶尔非常明显。在低质量设置下,我们认为这些额外的着色器指令得不偿失。

粒子效果和雾

是一场关于工业革命的游戏,其不可避免会出现的特点是重工业设施的烟雾和污染。这种效果是通过将简单的长方体渲染为1/16设定分辨率的渲染目标来实现的。像素着色器光线穿过2D密度纹理,添加体积噪波,并考虑深度缓冲区。然后,渲染目标被放大并混合到场景中。

纪元1800_纪元1800地图种子_纪元180

纪元1800_纪元180_纪元1800地图种子

纪元1800地图种子_纪元180_纪元1800

无雾和有雾的工业工厂场景。图3显示了用洋红色标识出的雾的体积覆盖。

尽管我们是以较低的分辨率计算的,但在我们的Intel NUC上,光线行进最初需要8毫秒。由于此烟雾效果是游戏内容非常重要的视觉体现,因此我们不能简单地在低质量设置中将其禁用。幸运的是,着色器显示了很多优化的潜力:我们增加了光线行进的步距,并进一步限制了最大步数。我们禁用了体积噪声计算,这在射线行进步骤中节省了两个2D纹理样本和几个ALU指令。最后一个比较重要的一点是,我们禁用了体积阴影,这在每个射线行进步骤中节省了两个阴影贴图样本以及更多的ALU指令。

添加LOD(多层次细节)

如前所示,游戏中的各个对象的绘制可能非常详细,每个对象可能具有数千个多边形。当人们以最高缩放级别仔细观察这些对象时,这会增加很多细节以便玩家看见。美丽的建筑和自然风光使游戏玩家有一种身临其境的感觉,并产生成就感。但是,当玩家将视图缩小以查看更多区域,并因此获得更多对象时,这会给性能带来巨大挑战。甚至可能每个对象的顶点多于屏幕上的实际像素。但是,有一种众所周知的技术可以解决这一挑战,即多层次细节设计(LOD)。根据观看距离,游戏应使用同一模型的不同变体。

出于测试不同画质质量原因,我们的美术设计师手动生成了所有LOD,而不是使用自动生成器工具。在游戏设计结束之前,大多数建筑物还没有完整的LOD链,因为美工首先想确定每种模型的最终外观,然后再努力进行LOD创作。尽管从生产的角度看是合理的,但这使早期的性能测试有些问题。

纪元1800地图种子_纪元180_纪元1800

一个大的draw calls画面,显示出一定数量的建筑实例

纪元1800_纪元180_纪元1800地图种子

一栋建筑的几何形状

纪元1800地图种子_纪元180_纪元1800

另一个高多边形建筑实例

在低画质设置中,我们将所有这方面的渲染限制在缺失大多数中小型几何细节的第三个细节级别。LOD切换更加积极。为了进一步减少三角形数量,我们必须为所有模型引入额外的第五个LOD。

纪元180_纪元1800地图种子_纪元1800

纪元1800地图种子_纪元1800_纪元180

纪元180_纪元1800_纪元1800地图种子

带有6000、2100和200个三角形的建筑物网格的LOD 0、2和4三个等级的效果。

灯光和阴影

我们通常将场景渲染到中间渲染目标中,并在最后应用色调映射。在低画质设置上,我们切换到RGBA8格式以更快地访问内存,但由此造成的伪影可以忽略不计:色带在玩家很少见到的大梯度区域(如天空)中最为明显。我们已经用更简单的变换(仅压缩非常明亮的颜色,而映射曲线的最大部分是线性的)替换了游戏的电影色调映射,这使颜色精度问题降低了。

对于低画质,我们在着色器的照明功能中忽略了各种计算:局部点光源和聚光灯完全禁用;仅考虑定向阳光。我们使用硬编码的辐照度光项,而不是对辐照度立方体贴图进行采样。由阴影纹理样本组成的云阴影也被禁用。我们还尝试简化了Cook-镜面ALU的计算,但是这导致了非常明显的照明劣化,并且没有显示出可衡量的性能优势。

海洋和水面

我们的海浪由三种不同类型的海浪组成:大的开放水域海浪是通过菲利普斯光谱的傅立叶变换产生的。这些波浪平铺在水面上。在远视距下,我们将它们混合成比较简单的噪声波浪,以防止快速傅立叶转换(FFT)波的平铺变得明显。顶部添加了第三种波浪:海岸线、船只和其他对象动态生成的波浪。这些波浪通过简单但高分辨率的2D波浪模拟创建,后者动态集成到每一帧,并馈入(A)水-对象交叉、(B) 渲染到其中的特殊波浪粒子,以及(C)着色器生成的海岸线波浪。在低质量设置下,禁用这些动态波浪,可以为每帧节省几毫秒的GPU时间。

纪元180_纪元1800地图种子_纪元1800

纪元1800地图种子_纪元180_纪元1800

游戏中的海洋场景,其中三种颜色分别表示形成海洋表面的三个不同部分:平铺噪声模式(红色)、平铺 FFT(绿色)和波浪模拟(蓝色)

我们还随水块网格进行了微调。最初,大部分海水也在隐藏在岛屿几何形状下方的区域渲染。这导致出现了许多不必要的顶点着色器调用和三角形栅格化,成本极其高昂,因为有大量细粒度水面网格的顶点。缩小水块并优化地形覆盖检查,有助于我们加快水的渲染速度。我们还试图在顶点着色器中输出NaN(非数),以剔除隐藏在地形下的三角形,但性能没有显著提升,并在一些极端情况下导致出现较小的渲染瑕疵。

纪元1800_纪元1800地图种子_纪元180

矩形水块可视化

结论

最终在临近游戏发布日期时,英特尔和 Mainz工程师进行了最终性能测试。测试结果显示达到了性能标准,游戏在多种移动笔记本电脑配置下均达到了30fps 的运行速度。这是《纪元》系列游戏首次在采用核显的移动 PC上顺畅运行。两个团队非常高兴完成了目标,而且性能比在工作室进行的初始评估提高了3倍!

团队进行的主要性能优化包括:

1,使用集成显卡优化植被渲染,以实现高效运行。

2,提高对象剔除效率。

3,优化和扩大阴影比例。

4,降低光照与着色复杂度。

5,优化粒子效果和雾。

6,为最复杂对象增加几何LOD。

纪元1800_纪元1800地图种子_纪元180

场景与文中第一个图的图像相同,但采用最低画质设置

以上便是intel与育碧工程师对的针对性性能优化,现在,在低画质下,即使是核心显卡也能以30fps下,1080P分辨率运行纪元1800了,而随着搭载的Xe核显的推出,笔记本核显用户有望以60-的性能,非常流畅的运行纪元1800这款反应工业发展的策略3A大作。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注