网站首页 > 技术文章 正文
游戏软件的优化和一般软件是有一些区别。
游戏通常是软实时(soft real-time),就是说运行上有时间限制,但没有硬实时般严格。
先谈固定硬件的游戏平台,如游戏机和街机。在这些平台上,通常会设置固定的帧率目标,例如30 FPS(即每帧33.3毫秒)。游戏开发者希望在这个时间限制下,尽量提升游戏的品质,例如更精细的角色和场境、加入更多效果、提升人工智能水平等。优化的目的除了令游戏顺畅,也是提升游戏品质的必要条件之一。
对于PC或手机平台,因为硬件的性能有很大差异,优化就没有一个具体的目标,而是希望尽可能在大部分平台上都能做得最好(虽然PC游戏有几百FPS的情况,但实质上几乎不能增加流畅性)。
从玩家角度,我认为游戏的性能指标大概有这几方面:
- 平均帧率
- 流畅性(不要「卡」,专业地说就是少spikes)
- 互动延迟(输入后至看到反应的时长)
- 等待时间(读盘、写档、网络连接等)
- 内存用量
- 游戏体积
- 网络流量(主要是移动平台)
- 耗电量(主要是移动平台)
而在开发的角度来说,我认为优化方法可以分为无损和有损的。无损是指不影响品质,纯粹通过技术上的优化去提升整体性能。而有损是指通过简化、近似化去改善性能,例如简化着色器(shader)、要求美术降低某角色的三角形数目、要求关卡设计师减少一些NPC等。
优化前我们要先进行性能剖析(profiling),找出性能问题的核心,然后再看看有什么方法可以尝试。主要可分为算法上的和底层的优化方法。不详细说明,就举个例子吧。
例如,在二维弹幕射击游戏中,需把大量子弹与飞机做碰撞测试(相交测试)。如果有n颗子弹,m个可被击中的目标,蛮力法需要mn次测试。我们可以看情况,使用一些空间分割的算法,把子弹和目标分配到不同的空间范围里,只需对每个范围里的物体做测试。而在底层方面,我们可以考虑使用多线性、SIMD指令,并考虑到缓存一致性等方面去优化。
上述例子主要是在CPU上进行的游戏逻辑方面的优化,而许多游戏中也需要在CPU/GPU上对图形方面进行优化。在PC/手机平台上,因为瓶颈不固定,游戏开发者通常会尽力优化每一个部分。
有空再补充。
— 完 —
- 上一篇: 算法-分治法
- 下一篇: 搜索算法之深度优先、广度优先、约束条件、限界函数及相应算法
猜你喜欢
- 2024-11-18 软考系统分析师知识点十六:系统实现与测试
- 2024-11-18 第16篇 软件工程(四)过程管理与测试管理
- 2024-11-18 编程|实例(分书问题)了解数据结构、算法(穷举、递归、回溯)
- 2024-11-18 算法-减治法
- 2024-11-18 笑疯了!巴基斯坦首金!没有技巧全是蛮力!解说:真远啊!笑死!
- 2024-11-18 搜索算法之深度优先、广度优先、约束条件、限界函数及相应算法
- 2024-11-18 算法-分治法
- 2024-11-18 思考不能靠蛮力,带你领悟高效工作精髓
- 2024-11-18 搜!一个都不能放过!暴力枚举法
- 2024-11-18 隋唐四大遗失的绝技:失传的伍家七绝枪、遗忘的六十四路宣花斧
你 发表评论:
欢迎- 11-18软考系统分析师知识点十六:系统实现与测试
- 11-18第16篇 软件工程(四)过程管理与测试管理
- 11-18编程|实例(分书问题)了解数据结构、算法(穷举、递归、回溯)
- 11-18算法-减治法
- 11-18笑疯了!巴基斯坦首金!没有技巧全是蛮力!解说:真远啊!笑死!
- 11-18搜索算法之深度优先、广度优先、约束条件、限界函数及相应算法
- 11-18游戏中的优化指的的是什么?
- 11-18算法-分治法
- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)