关闭

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

528人阅读 评论(0) 收藏 举报

游戏画面很棒,可玩性也不错,但是这时却发现大部分机器跑起来都不到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、针对不同配置的机器,提前设计不同的显示策略;

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:50550次
    • 积分:883
    • 等级:
    • 排名:千里之外
    • 原创:36篇
    • 转载:3篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论