游戏常常所谓的“优化”,是怎样的一个过程?

0 条评论


  • 12

    汪汪仙贝世界架构爱好者,文化厚重爱好者

    MoriaRed黑狗布雷特面纸 等 12人赞同

    优化有很多种途径,总的来说就是通过修改程序结构提升软件在特定条件(用户的使用条件)下的效率的行为都叫优化。在此先以个人软件经验(和一部分道听途说)来回答一下问题。

    优化工作

    1. 确定顶级表现:

    也就是说首先要确定优化前后所要保持一致的部分。这也是最后测试时验证的标准。

    2. 确定使用条件

    确定此优化行为所针对的使用场景。这个场景的描述是多种多样的,目的是找出尽可能多的可优化点。可以包括用户集中的软件平台,操作系统,硬件型号,可以包括游戏进行时的资源分配情况,产生的游戏体验影响等等许多内容。

    3. 设计优化行为

    从使用条件中找出“适合优化”的点,设计对应的优化方案。

    4. 覆写程序逻辑

    按照设计重新编写程序的部分内容。

    5. 测试表现

    根据顶级表现要求测试优化后的版本是否保持一致,同时测试优化后的版本在特定环境下是否达到了优化的目的。

    如何优化?

    世上没有免费的午餐,优化也是一样。当某一方面的执行效率提升的时候,势必会影响其他方面的性能。最常见的影响是降低程序的可读性、可移植性等。

    换句话说,优化就是要牺牲掉一部分优势,去提升另一部分。因此根据使用场景的不同,优化方式甚至会互相完全相反。

    常见的优化理念有:

    空间换时间:牺牲存储资源(内存、硬盘),提升计算效率(CPU、GPU)。主要方式是尽量多地缓存可能需要的显示资源,避免在需要时临时演算。

    应用此理念产生的技术有:

    法线贴图:在低模(面数较低的模型)上通过添加高度属性和计算光线来产生模拟光照的高度效果的贴图,能用低模模拟出高模(面数较高的模型)的效果。由于3D模型渲染效率与面数关系很大,此举能提升整体的计算效率。

    天空球(远景图):通过将整个远景渲染为一张静态图片并包围游戏视角的方式处理游戏中需要的远景,提升计算效率。

    CG动画:通过预先渲染并输出视频的方式播放,对玩家的计算性能要求大大降低。

    时间换空间:牺牲计算资源(CPU、GPU),提升存储资源(内存、硬盘)。主要方式是尽量以程序方式描述显示过程,避免将其存储在存储介质中。

    应用此理念产生的技术有:

    矢量图:Flas***当年为了适应较低的网速和网页播放的环境,在Flash工具中绘制的图形默认采用矢量图方式存储。矢量图是一系列描述图形的代码,因此其存储空间往往要大大小于位图。得益于此项技术,Flash生成的二维矢量动画可以以轻巧的体积放上网页,并让用户可以轻松加载观看。在相同内容下的矢量动画体积不到无压缩视频文件体积的千分之一,但是Flas***复杂的舞台内容会严重影响播放效率甚至造成卡顿,而视频不同的画面内容对播放几乎不会产生任何影响。

    即时演算动画:与矢量图的思想类似,将游戏中的动画存储为一系列的指令,使用游戏内的模型、镜头语言来演算。同样可以消耗计算资源,减少存储占用。

    特定平台优化:避免调用框架API,尽量使用特定平台和硬件的底层API(或使用高效率语言如C自行实现底层API)实现程序效果。由于底层API在不同的平台中存在差异,此举牺牲可移植性,提高执行效率。

    跨平台优化:与上条相反,避免调用底层API,尽量使用框架API,由于跨平台框架自行实现了底层的多平台逻辑,此举牺牲执行效率,提高可移植性。

    国际化(代名*):为文本预留出丰富的排版、调整结构接口,以便于切换不同编码的语言。消耗额外的执行效率和存储资源,提高可移植性。

    本地化(代名*):仅为特定语言进行设计,降低可移植性,提高执行效率和存储资源。

    注*:由于本地化与国际化本身与所描述的内容与此处有所差异,此处用这个名词代称这种优化的方式。

    以上,不正之处欢迎指出讨论。

    发布于 2016-12-02 13:26:03 0 条评论


  • 3

    BCCBlink Studio;DOTS汉化组

    RinGBow_VIE浑身难受DAI 赞同

    举个简单的例子:

    以前的超级马里奥**1,因为卡带容量有限。

    所以很多模型是重复的,换了个颜色而已。

    比如云朵和草丛。


    再比如你用UNITY创建1个CUBE你不会觉得卡,可是如果是1000个呢??

    于是UNITY有个功能,不需要你每次单独创建CUBE,你可以复制原CUBE。

    从而降低运算需求。

    更新于 2016-12-02 15:45:40 0 条评论


  • 1

    拉普拉斯的饿膜苦逼程序员/游戏品鉴师

    浑身难受 赞同

    这种时候仙剑6就派上用处了、、、

    举个栗子,游戏有个水晶洞,每个水晶都会发光,那么,我们势必得给每个水晶设置个光源。如果100个水晶100个光源,但是每个光源默认除了自发光外,还会对别的物体产生倒影,数个还好弄,全弄了绝壁崩盘。因此优化就要去除相应的规则。

    另外,还有,我地图场景什么时候加载,就比如GTA5,一进游戏并不是加载整个城市,而是加载你周身多少范围内的城市,多少范围外的粗模,多少范围外的看不见。

    还有硬件上的优化,就比如仙剑6,对又是仙剑6,为啥人家双路泰坦都崩,人家测试下来,因为内存占用率就占用了一个显卡的,另一个显卡一点事情都没有。还有可以使用一些显卡厂商支持的提升性能的方式。

    其实还有很多种方式,但是优化也有个度,一旦超过了一个度,就是要以游戏性或者画质为代价的了。

    发布于 2016-12-02 23:59:56 0 条评论


  • 0

    串烧鸡翅我只是一个玩家

    上面各位大佬都详细说了程序性能的优化,这里拓展下思路,权当抛砖引玉。

    其实游戏里优化不只是性能的优化,还有游戏设计(玩法)上的优化,游戏交互上的优化,游戏(运营)策略的优化等...

    拿dota2举例...

    性能优化:bug修复和程序上性能优化,加入对新图形接口的支持等。

    设计优化:英雄设计上,每个版本会平衡各个英雄数值;地图设计上,增加更多的树林暗道,更新roshan的位置等。

    交互优化:支持旧快捷键和自由改键共存的交互,加入玩家可对hud界面元素的各种开闭控制,把需要控制台指令的改动放到设置面板上等。

    (运营)策略优化:引擎从起源1更新到起源2,加入了hud的扩展性(本本里的各种活动),支持玩家自制地图(类似war3 rpg,也可以理解成很多游戏的后续版本更新里加入mod制作工具)等。

    发布于 2016-12-03 20:03:54 0 条评论


  • 0

    面纸女装码农_面纸

    游戏的运行过程中,主要会占用电脑的CPU运算,GPU运算以及内存地址,代码中运算越复杂,占用就会越高,从而对配置的要求就越高,优化就是去让程序中使用的算法更加合理化更加简单化,在最恰当的时机去施放占用的内存。
    顺便吐槽一下。。。OW的CPU占用简直爆炸,暴雪把有的没的全都做进去了,地图外一大堆吃CPU的怪物QAQ
    发布于 2016-12-02 12:21:46 0 条评论

  • 登录奶牛关账号即可参与讨论

{{question['follower_count']}} 个玩家关注

...

相关元素

相关问题

学习游戏开发应该从何入手?

34人关注 9个回答

中国的游戏开发者,应该做本土化的题材吗?

36人关注 20个回答

有哪些 PC 独占的单机游戏大作?

10人关注 10个回答