您当前所在位置: > 爆料站 > 君子堂

《戴森球计划》:游戏性能优化

时间:2021-01-14 17:06:14  来源:  作者:网络转载
WiFi性能测试

WiFi性能测试

大小:8.0M更新:2020-07-24

分类:系统工具

戴森球与行星级生产基地

目前这个存档的游戏时间是118小时。

游戏玩到后期卡吗?这也许是大家最关心的问题之一。

数千艘运输机在忙碌,数千座设施在运作,数万个太阳帆在环绕,数十万货物在运送,斗转星移,地面上所有太阳能板都面朝着太阳… 这计算量可不是闹着玩的!而以上还只是这一个星球。

本篇我将主要介绍为了保证游戏的流畅性,我们是如何实现游戏性能优化的。由于该话题涉及的内容与技术细节实在太多,所以我打算将优化系列分为三篇开发日志,粗略的谈一下我们所用的方法与技术。

游戏的帧率机制

游戏中的帧率分为渲染帧和物理帧:

渲染帧主要负责渲染游戏画面;

物理帧主要负责运行游戏逻辑。


我们在游戏中制作了帧率计数器以监控实时性能,其中左边的数字是渲染帧,右边的数字是物理帧。也可以在设置面板中设定渲染帧的帧速率。当开启垂直同步时,渲染帧速率会和显示器刷新率一致。


帧速率越高,GPU 的使用率也就越高,当使用率接近100%时,就会自动降低画面帧率。

在游戏的生产系统中,我们需要一套能精确量化,服从“决定论”的逻辑,即同样的操作只能导致同样的结果。要抛开帧率带来的影响,首先是游戏中所有的时间必须按物理帧计数,例如制造时间为3秒的“电弧熔炉”,其实在内部逻辑里就是180个物理帧。再例如360kW的工作功率,在内部逻辑里其实是每个物理帧消耗6kJ的能量,颇有一种“量子化”的感觉。


根据以上的逻辑,负责游戏逻辑的物理帧必须相对稳定,不能被渲染帧率所影响,否则玩起来就会感觉时间一会快,一会慢,所以我们将物理帧率锁定为60帧,只有当渲染帧率太低时,才会折减物理帧率,以免塞帧。


使用 DOP 来代替 OOP

DOP和OOP分别指“面向数据编程”和“面向对象编程”。具体的比较可以写好长一篇文章,而且前人已充分讨论,所以这里就不赘述了。简单来讲,在面对游戏中大量物件的情况下,面向对象会造成许多不必要的开销,造成性能低下,而面向数据编程则将对象中的属性逐一拆分出来,形成紧密排列的数组,使得相关逻辑能够更快速的进行遍历,甚至一些数据还能直接传给 GPU 来处理。

那么为什么大家不都用DOP来代替OOP呢?这是因为“面向对象”更符合人们的认知和代码书写习惯,也便于项目管理,而“面向数据”的代码写起来有一些反人类,有时甚至相似的结构写好几遍,不方便管理,但实际运行效率却极高。所以为了游戏的优化,我们还是选择了“面向数据”来作为该项目的编程核心思想与框架。

读起来太晦涩了吗?那实在不行的话我们就这样吧!

不开玩笑了,回到正题

物理帧的大部分工作是由 CPU 来完成的,要维持60的帧率,一个物理帧允许的 CPU 处理时间不能超过16ms(毫秒),除开提交DrawCall渲染的时间和其他必须的开销,只有大约11ms可用于一帧的游戏核心逻辑。

单核游戏?多核游戏?都不是,这是一个 GPU 游戏!

目前 CPU 的性能发展遇到了瓶颈,已经没办法再大规模提升单核性能,只能靠提升核心数量。而在很多实际应用的情况下,对核心数量的提升,远不如增加一点点单核频率提升的性能多。

虽然我们在星系的随机生成及模拟、星球地形动态生成、无缝加载等逻辑中使用了多线程来缓解主线程的压力,但是对于游戏逻辑中如此庞大的计算量,就算有100个核火力全开多线程完美配合也未必驾驭得了!

从《戴森球计划》的想法诞生之初,就决定了这是一个 GPU 游戏。看那数万颗太阳帆,每一颗的运动都遵循着万有引力定律,每一颗都在计算发电量,每一颗都能被近距离观看。像大规模并行计算这样的工作,使用 GPU 是不二的选择。


我们将凡是可以并行计算的那部分计算工作,全部交给了 GPU,剩下的那部分计算量,只要 GPU 能在16ms之内按时渲染出来,CPU 就绝不会掉链子!

这同时也意味着,好的 GPU 的确能为《戴森球计划》带来更流畅的体验,而 CPU 的影响则相对较小。

使用 GPU 来渲染大批量动画

在现今主流游戏引擎中,动画大多是靠移动部件或骨骼的位置(Position)、旋转(Rotation)、缩放(Scale)来完成的,如下图:

该建筑的动画是靠旋转移动部件来完成

就是这样一个建筑,它的动画部件已超过50个,其中还包括父子Transform层级的嵌套,假设我们有1000个这样的建筑,那 CPU 需要同时处理的动画子部件就有超过50000个,这显然是 CPU 驾驭不了的,而这还仅仅只是建筑动画,并不是核心逻辑。


用 CPU 去逐一计算这50000个部件的 Transform 的确是相当不划算的,这些动画其实可以并行计算,只要在画面帧结束时,所有建筑的动画均就绪即可,这对于具有强大并行计算能力的 GPU 来说简直就是小菜一碟。

我们在编辑器中将这个建筑的所有动画帧中所有的顶点位置、法线等信息按照一定的顺序,事先录制在一个VERTA文件中。


当游戏加载时,只需要载入这些文件,通过ComputeBuffer将所有信息传递给 GPU,这样 GPU 就拿到了所有建筑动画的预烘焙信息,接下来再将每个建筑的动画状态组成一个数组,传给 GPU。

每个建筑的动画状态数据

最后,还需要在vertex shader中分析这些数据,逐一还原每个建筑在当前帧的建模。

在vertex shader中还原当前帧建模部分代码


按照这个思路,我们成功使用GPU Instancing还原了所有建筑的动画,还顺便使用了建筑状态数据来控制建筑贴图上指示灯的开关。在动画和建筑状态更新方面,CPU 被完全解放。而在 GPU 中,仅仅只是多了 150MB 左右的显存数据用于存储所有建筑的动画数据(仅相当于几张4096贴图)与若干在vertex shader中的寻址与插值计算。可以说是一顿免费的午餐了!

粒子特效

为了将特效渲染纳入上面的框架中,所有的建筑特效均无法使用引擎自带的粒子特效,必须将原本是作为粒子来渲染的特效包含在模型网格中,再使用shader来逐一实现各个建筑不同的特效需求。

特效片元在制作时就包含在模型中

在游戏中,几乎每一个不同的建筑都定制了不同的shader,对于同一个建筑特效的不同片元,我们按照类别涂上不同的顶点色,哪些是辉光,哪些是要拉长的,哪些应该从下至上亮度递增,通过不同的片元顶点色,就能做不同的处理。

整个建筑的动作与特效在一个 shader 中实现

需要时刻朝向太阳方向的建筑,逻辑不能让 CPU 来处理。我们将建筑模型按照“底座”、“横向转动部分”、“俯仰转动部分”涂上不同的顶点色加以区分,再在shader里面计算这些顶点应该如何旋转,从而朝向目标点。

朝向太阳的shader代码节选

有了这套机制,我们就只需要在主线程中计算好每个建筑当前的状态,形成ComputeBuffer,传递给 GPU 来进行统一渲染,在这个过程中,动画、IK 朝向、特效、自发光变化等等,就统统都有了。

Unity Profiler 性能测试

说了这么多,直接上目前的性能测试图吧!

下面是100小时规模的存档在 Unity Profiler 里面的性能测试图


开发机配置

从图中可以看到,游戏主逻辑物理帧 CPU 耗时 5.11ms,也就是说理论上每秒可以跑到 195 个物理帧,所以 CPU 这边肯定是没问题,而最终画面能跑多少帧,就看 GPU 的能力了,我的卡是 660Ti,在畅玩了100小时后,还能跑上40帧,不过我们还将继续不懈的优化,争取将我这张卡的帧率提到 60!

除了物理帧的优化以外,我们还非常看重 C# 的垃圾回收机制的优化,因为过多的内存垃圾会导致游戏时常卡顿,严重影响游戏体验。

一般来讲,每次触发垃圾回收机制都会出现不同程度的卡顿,卡顿出现的频率取决于 GC Alloc 的大小,而每次卡顿的时间取决于数据结构的复杂度。

为了尽可能消除游戏卡顿现象,从立项开始,程序在数据结构上就严格把控,能用数组的地方用数组,尽量少的使用 Dictionary 或 List,凡是物理帧的逻辑除数组扩容等操作以外,均不能产生 GC Alloc,在 UI 逻辑中严格控制字符串的操作,避免不必要的开销。

据测试,目前游戏的 GC.Collect 卡顿时间已控制在 30ms 以内,出现频率为几乎没有。

下图为 100 小时规模下的 GC 性能统计:


游戏主逻辑在物理帧上的 GC Alloc 为 0,只有 UI 上有 132 字节的开销,加上一些引擎必要的开销,每帧总的 GC Alloc 为 5.0KB,目前这个数值处于非常低的水平。


本篇完

在下一篇优化日志中我会介绍物流运输机、戴森云的优化,看看 GPU 是如何轻松达到“数十万”这个数量级!


来源:indienova
原文:https://indienova.com/indie-game ... on-sphere-devlog-4/

资源转载网络,如有侵权联系删除。
相关下载

玩家评论

Win1021H1功能更新RTM版编译完毕:提高性能

  虽然不少工程师提前休假,但是微软并没有放松Windows 10 21H1更新的推进工作。  据外媒Windows Central编辑Zac Bowden爆料, Windows 10 21H1功能更新的RTM版本已经编详情>>

阅读: 3
日期: 2020-12-31
LinuxKernel5.10.3发布:未修复Btrfs性能衰退问题

  Linux Kernel 5.10.3 稳定版正式发布,这也是圣诞节之后 Linux 团队发布的首个维护版本更新。不过,5.10.3 并未修复 Btrfs 性能衰退的问题,这可能会在后续的版本中出现。详情>>

阅读: 2
日期: 2020-12-28
11代酷睿RKL测试结束Intel开始性能优化:1月发布

2020 年马上就要过去了, 2021 年初 Intel 就要发布 11 代酷睿桌面版,代号 Rocket Lake-S (简称 RKL ),这将是 14nm 工艺的终极一战。 与以往的酷睿处详情>>

阅读: 1
日期: 2020-12-28
三星Exynos2100性能曝光媲美骁龙888

  下个月,三星也要放出自家的新一代旗舰处理器了,而它就是Exynos 2100了,其性能是怎么样的呢?  现在有网友晒出了所谓Exynos 2100的Geekbench 5跑分图,整体看上去性能相比详情>>

阅读: 5
日期: 2020-12-23
4年4代:AMDZen3的性能比第一代提升了89%

  Zen架构锐龙处理器已经诞生4年,代际也从Zen、Zen+、Zen2、Zen3一路走来,带动AMD在x86市场的份额节节攀高。  日前,Golem做了一次有趣的评测,一口气找来四代锐龙,包括Ryze详情>>

阅读: 2
日期: 2020-12-22
群晖DSM7.0发布:RAID性能提升70%换硬盘无需停服

  群晖举办2021线上大会,带来了全新升级的DSM 7.0,并优化了数据管理解决方案。  为了减少权限申请流程, 群晖推出二级权限,可以将部分权限开放给指定人员,从而减少权限申详情>>

阅读: 7
日期: 2020-12-09
Geekbench5单核性能排名:苹果M1第一

  很显然,苹果自研处理器上投入的精力越来越多,这也就说明了为什么M1能够有如此不错的表现。  国外网站CPU-monkey统计的数据显示 ,在Geekbench 5的单核性能汇总排名中,M详情>>

阅读: 19
日期: 2020-12-08
3060ti和3070性能差多少 购买哪个更好解答

  今天英伟达正式公布了这个3060ti,从价格上和3070相差的并不是特别多,那么在性能上相差多少呢?有很多玩家不知道该不该买,下面小编就为大家带来这个性能的详情>>

阅读: 10
日期: 2020-12-05
谷歌TensorFlow2.4MacM1优化版发布:性能提升

  谷歌表示,借助 TensorFlow 2,可在跨平台、设备和硬件上实现一流的训练性能,从而使开发者、工程师和研究人员能够在他们喜欢的平台上工作。IT之家获悉,现在,TensorFlow 用户详情>>

阅读: 4
日期: 2020-12-04
最强性能王:iQOO5Pro荣获年度性能旗舰手机

  今日,据iQOO手机微博消息称,凭借15分钟就可将4000mAh的电池充至100%的性能表现,以及全面的软硬件配置, iQOO 5 Pro荣获极客之选2020年度产品评选—年度性能旗舰手详情>>

阅读: 2
日期: 2020-12-04
搭载M1的新Mac运行Win10下性能测试效率高吗?

  今天早些时候我们已经报道,有不少开发者都在尝试在M1处理器上运行Windows 10系统,而运行后的体验也是不错,执行效率非常的高。  得益于Alexander Graf分享的QEMU Virtu详情>>

阅读: 7
日期: 2020-11-28
【赛车介绍】B车探影性能全揭秘

【赛车介绍】B车探影性能全揭秘详情>>

阅读: 6
日期: 2020-11-25
外媒PS5版《原神》性能测试 基本稳定4K下60帧运行

随着次世代主机的发售,一批新老游戏都通过升级补丁加入了PX5、XSX平台,其中也包括了米哈游的新作《原神》。鉴于此前官方1承诺PS5版《原神》将以4K/60帧详情>>

阅读: 2
日期: 2020-11-18
更多创作自由 《灵媒》开发商谈xbox series性能

在最近的延期之后,《灵媒》预计将于2021年1月28日登陆Xbox Series X/S和PC。 详情>>

阅读: 1
日期: 2020-11-18
DSOGaming《神陨》PC性能分析 体验吃显卡性能限制

由Counterplay Games制作,Gearbox发行的次世代游戏《神陨(GodFall)》现已正式发售,登陆PC(Epic)、PS5平台,外媒DSOGaming第一时间体验了游戏,并按照惯例带来了详情>>

阅读: 1
日期: 2020-11-13
AMDRX6800怎么样-AMDRX6800跑分/性能评测

AMD RX6800怎么样?RX6800跑分是多少?性能有什么提高?还不清楚的小伙伴看过来,这里234游戏网小编为大家带来AMD RX6800跑分/性能评测的详细介绍!有兴趣的小伙伴不要错详情>>

阅读: 23
日期: 2020-11-11
AMDRX6900XT怎么样-AMDRX6900XT跑分/性能评测

AMD RX6900 XT怎么样?RX6900 XT跑分是多少?性能有什么提高?还不清楚的小伙伴看过来,这里234游戏网小编为大家带来RX6900 XT跑分/性能评测的详细介绍!有兴趣的小伙伴详情>>

阅读: 43
日期: 2020-11-10
新型狙击枪性能和平精英莫辛纳甘狙击枪性能介绍

原标题:新型狙击枪性能 和平精英莫辛纳甘狙击枪性能介绍 和平精英莫辛纳甘狙击步枪怎么样?很多玩家都不知道,下面小编带大家一起看看和平精英莫辛纳甘详情>>

阅读: 6
日期: 2020-11-09
AMDRX6800XT怎么样-AMDRX6800XT跑分/性能评测

AMD RX6800 XT怎么样?RX6800 XT跑分是多少?性能有什么提高?还不清楚的小伙伴看过来,这里234游戏网小编为大家带来AMD RX6800 XT跑分/性能评测的详细介绍!有兴趣的小详情>>

阅读: 11
日期: 2020-11-09
AMD发布Radeon20.11.1驱动:性能提升7%

  AMD 日前发布了新的显卡驱动,版本号为 Radeon Software Adrenalin 2020 Edition 20.11.1 ,升级内容不多,主要是优化了四款新游戏,其中《 Godfall 》游戏性能提升了 详情>>

阅读: 22
日期: 2020-11-08
Mate40Pro游戏性能实测,打败骁龙无压力_测试

原标题:Mate40 Pro游戏性能实测,打败骁龙无压力 Mate40 Pro配置的麒麟9000处理器作为目前华为最高端的处理器,性能方面也是相当给力,在安兔兔的跑分测详情>>

阅读: 8
日期: 2020-11-02
《轩辕剑7》光追和DLSS测试 性能模式稳定90帧以上

  近日外媒测试了国产单机游戏《轩辕剑7》的光追和DLSS 2.0技术。   测试平台:   i9 9900K   RTX 2080Ti   16GB内存,DDR4 3600Mhz   Windows 10,64位   《轩辕详情>>

阅读: 7
日期: 2020-11-02
外媒《轩辕剑7》光追/DLSS性能测试 2K无法稳定60帧

由大宇资讯旗下DOMO小组开发的经典RPG新作《轩辕剑7》现已在Steam平台发售,据此前介绍,本作支持光追和DLSS 2.0技术。外媒Dsogaming在近日体验了游戏,并详情>>

阅读: 2
日期: 2020-11-02
外媒《轩辕剑7》光追/DLSS性能测试2K无法稳定60帧

外媒《轩辕剑7》光追/DLSS性能测试 2K无法稳定60帧 2020-11-02 08:49:08来源:游迅网编辑:血河评论(0) 详情>>

阅读: 4
日期: 2020-11-02
性能比肩骁龙855的Redmi10X双11降价:1399元起

  一年一度的双11购物狂欢节已经开始预热,不少机型开始降价促销。  今天,Redmi 10X在京东开启定金预售, 支付定金100元可抵100元,11月1日领券再减100元 ,6GB+128GB实际到详情>>

阅读: 8
日期: 2020-10-23
Switch Pro的确存在,性能有望媲美Xbox One

作为一款自带光环的掌机,任天堂 Switch 可谓发布即巅详情>>

阅读: 30
日期: 2020-10-09
内置A14XBionic的设备与16英寸MacBookPro性能相当

  苹果的A14X Bionic将是该苹果公司有史以来最强大的芯片,它的5纳米制程有望率先为iPad Pro提供动力,随后还将以其它变体驱动Mac系列计算机。 如果你还记得A12X Bionic,也详情>>

阅读: 8
日期: 2020-10-05
能够提供模拟A14X性能的AppleTV已下发到开发测试者

  Apple TV 要「起飞」了吗?  此前有报道称,一款内置了 A12X 仿生的 Apple TV 机型即将推出,该机型的性能将是 Apple TV 史上最强。这与在 2018 iPad Pro 中运行的芯片相详情>>

阅读: 4
日期: 2020-10-04
NVIDIA公布GeForceRTX3070官方性能数据

  10月2日, NVIDIA宣布RTX 3070的上市时间将会从原定的10月8日延期到10月29日。理由是为了生产更多的显卡(难道不是为了清理更多的库存?)。  为了平息玩家的情绪,NVIDIA在详情>>

阅读: 6
日期: 2020-10-03
Zen3性能登顶锐龙95900X被曝飙出12核5GHz

AMD CEO 苏姿丰日前表示 Zen3 处理器一定会以最大性能为目标, 暗示着这一代处理器的性能进步很大 ,那到底能达到什么水平? 最新消息称,锐龙 9 5900X 除了 12 详情>>

阅读: 16
日期: 2020-09-29
《CF手游》QSZ92天使性能怎么样 QSZ92天使伤害性能测评

天使系列的武器,在两年前就已经上架在CF手游,但是只有斯泰尔、M4、QBZ95、斩魔剑这几个武器,相信有很多玩家跟我一样,一直想为天使系列武器凑齐一个套装,直详情>>

阅读: 20
日期: 2020-09-21
Linux5.9将改进页面锁以解决性能倒退的问题

  Phoronix 报道称,基于 AMD 霄龙(EPYC)平台的 Linux 5.0 ~ 5.9 内核基准测试表明,开发中的 Linux 5.9 内核在某些工作负载情况下存在性能退化的问题。 据悉,该问题主要出现详情>>

阅读: 0
日期: 2020-09-19
数毛社XSS主机性能简析 或无法兼容运行X1X性能强化版

随着微软Xbox Series X和Xbox Series S两款次世代主机售价及发售日公布,玩家们可以着手准备预购主机了。撇去早已公开规格的Xbox Series X,数毛社Digita详情>>

阅读: 9
日期: 2020-09-12
数毛社XSS主机性能简析或无法兼容运行X1X性能强化版

数毛社XSS主机性能简析 或无法兼容运行X1X性能强化版 2020-09-12 09:04:26来源:游迅网编辑:血河评论(0) 详情>>

阅读: 9
日期: 2020-09-12
索尼PS5性能模拟测试:全面吊打PS4,CPU性能是其4倍

索尼PS5性能模拟测试:全面吊打PS4,CPU性能是其4倍 2020-09-04 11:25:59来源:游戏下载编辑:松鼠骑士评论(0) 详情>>

阅读: 15
日期: 2020-09-04
“KPL官方比赛用机”iQOO5正式开售_性能

原标题:“KPL官方比赛用机” iQOO 5正式开售 2020年8月24日0:00,全新5G“性能旗舰”iQOO 5正式开售,其中8GB+128GB版售价3998元、12GB+128GB版售价429详情>>

阅读: 6
日期: 2020-08-24
十代酷睿i7-10875H新本体验:5GHz超高频,性能满溢

  最近借到了一台亮点颇多的机械师战空F117-FPR27,相信对游戏本有关注的玩家或多或少都已经在网上看过它的评测文章和视频了。极窄的边框、一键加速功能、Wi-Fi6、高素质详情>>

阅读: 9
日期: 2020-08-24
《漫威复联》B测版PC性能测试 2080TI难顶4K/60FPS

《漫威复仇者联盟》开放Bate测试将在今日(8月23日)结束,在这简短的开放时间中,外媒DSOGaming使用RTX 2080Ti显卡对PC版进行了性能测试。而最终结果恐怕令详情>>

阅读: 4
日期: 2020-08-23
《漫威复联》B测版PC性能测试2080TI难顶4K/60FPS

《漫威复联》B测版PC性能测试 2080TI难顶4K/60FPS 2020-08-23 08:41:25来源:游戏下载编辑:血河评论(0) 详情>>

阅读: 12
日期: 2020-08-23
更稳了!Win10v1903/1909获累积更新:性能提升

  虽说微软在力推Windows 10的5月更新,但依然有很多用户坚守v1903/1909版本,因为足够的稳定。  面向Windows 10 Version 1903/1909功能更新,微软今天向后兼容 WSL2 (Wind详情>>

阅读: 5
日期: 2020-08-22
精彩推荐