年底总结之六:洗心革面终点站,深度优化之君子善假于物

原创 2011年01月20日 23:34:00

游戏画面很棒,可玩性也不错,但是这时却发现大部分机器跑起来都不到30帧。相信很多公司都遇到过这种尴尬的情景。偶的上家公司很大程度上就是死在性能上。那么既然优化这么重要,为什么不一开始就重视起来呢。哈哈,不是不重视,原因有很多种,下面列举一些:

 

1、由于进度鸭梨太大,程序们来睡觉的时间都没有,优化见鬼去吧,先把功能实现吧。

2、美术与程序的较力,美术经常在不知不觉中添加N个能突出场景画面的粒子特效等程序无法忍受的东东。

3、引擎本身的承载鸭梨不够。

 

相信很多人都遇到过上面的情况。引擎架构就这样,时间就几个月,美术就这水平,策划就是这样要求。请问各位看官,这时老大把你叫到小黑屋跟你说“这次测试后,反响不错,也发现咱们游戏现在的命门就是性能,不过我相信你的能力,你有信心在1个月搞定吗?”,相信各位都会跟我一样,咬咬牙,坚定的回答“没问题”,(鬼知道是否会不会搞的定),没办法,只能硬着头皮优化了。下面我给大家提供的方法,能用的用,不能用的欢迎拍砖。

 

1、针对明显的性能瓶颈进行重点突破,这个花的时间会最多,但是成效会最明显。我们的瓶颈就是地表渲染,我重写后能提高1/4的性能;

2、整理感觉有问题的代码,通常一定会有问题,也会有意想不到的收获。

 

3、开启NV pref,分析是CPU瓶颈还是GPU瓶颈(一般都是CPU的问题)。

 

4、语法级别的优化。

 

5、针对不同级别的显卡指定不同的策略。

 

下面我针对3提到的CPU瓶颈和GPU瓶颈进行重点分析:

 

CPU瓶颈几乎是100%会遇到的。可以使用  Intel  的 vTune (30天免费),或 AMD 的 CodeAnalysis(免费) 来分析具体哪些函数调用耗时,列出来一个优先级列表,然后一一搞定。

 

下面列为我们游戏当时的前几位的瓶颈:

 

1、地表渲染(CPU部分);

     重写地表渲染算法,重点在于减少dp和pass数目;

2、骨骼动画(CPU计算);

     把骨骼动画的计算改在VS中计算;

3、倒影;

     针对性地减小倒影范围;

4、memcpy;

     寻求快速内存拷贝算法;

5、sqrt;

     寻求更快的开平发算法。例,卡马克算法;

6、场景管理;

     实现四叉树管理;

 

GPU瓶颈,重点就是优化shader,尽量不要使用分支语法。

 

目前提到的都是在游戏开发后期的优化,虽然感觉挺简单的,但的确能起到一定的作用,不至于使游戏因为性能夭折。

 

但是敝人认为,上医治未病,如果我们能在开发早期就指定一个优化方案,那将会事半功倍。

 

可以分以下几个部分来制定:

 

1、引擎架构层的优化。前提是自己写引擎,或对引擎有超强的控制力。这部分可以参考NV的优化策略,及zbufferoptimizations和Real-Time Rending Pipeline Optimization等相关文章。

2、指定严格的代码规范,尽量避免性能差的代码;

3、指定美术模型标准,每个模型的面数范围,及同屏的面数范围;

4、针对不同配置的机器,提前设计不同的显示策略;

相关文章推荐

君子性非异也,善假于物也 - Threejs 引入TrackballControls 查看场景

君子性非异也,善假于物也 - Threejs 引入TrackballControls 查看场景
  • sleks
  • sleks
  • 2014年07月25日 21:44
  • 4627

第三章 地势坤,君子以厚德载物 ——《箴言》第一章读书笔记之三

梁先生从未入门到入门,不知是看的那一本无字天书,他没有“和盘托出”给我们,只是打发我们“可以去任何一个书店去找一本书回来自己看就可以了”。而现在未入门的我们“即使去书店找n本书,天天背它,你也不会成为...
  • ZSY2012
  • ZSY2012
  • 2011年01月06日 05:18
  • 1329

2014年底总结

这是第一次写年底总结,其实每年一直都有年底写总结的想法,可总是手头的事情很多,最终计划赶不上变化,最后写总结的想法就不了了之了。今天手头上没有什么工作,趁着现在有些空闲的时间,赶紧开始动笔了。其实很多...

年底总结

此刻突然不知道该用什么语言来开始这一年的工作总结,我多想起一个响亮的名字,多想有一个不俗的开头,却发现自己的语言是那么匮乏,竟找不到一句合适的词来表达自己的心情。    曾经为了一句话整个夏天我独自...
  • hmt123
  • hmt123
  • 2012年01月30日 16:26
  • 345

连载《一个程序猿的生命周期》- 43.新公司这一年,我都发生了哪些变化。--- 年底干货总结!!!

摘要:1.写作的水平明显提高了一大节。    2.更注重身体的健康了。  3.越发感觉时间的重要性。4.整合资源的重要性,(1)不怕说出自己的想法,寻找志同道合的人,(2)尽量去帮助别人,寻找将来可能...

2011年底总结

这一年,负责了操作票、防误操作、配电保供电的V3.0的分析工作。到广州感受了一下与客户现场的压力。也觉得怎么把一问题委婉地表达给对方,让客户接受你的意见。怎样引导客户使用我们开发的系统。也能从客户的角...

2015年底总结

1.终于知道明确的下步努力方向 过去的两年多,因为大部分时间在为项目加班、看电影、学唱歌,总觉得有些编程基础底子,就学这个学那个,虽学习方法略有长进心得,但是编程技术没有大多的提升,为项目忙前忙后,技...

洗心革面重新开始

我决定从今天起洗心革面不再水了,从最基础的代码走起,打好底子。今天写了链表,上传到这里起个监督作用。希望坚持下去!加油#include #include using namespace std; #i...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:年底总结之六:洗心革面终点站,深度优化之君子善假于物
举报原因:
原因补充:

(最多只允许输入30个字)