您的位置:首页 > 运维架构 > 网站架构

Game Engine Architecture by Jason Gregory:1.6 实时游戏引擎架构(3)

2011-03-10 22:01 399 查看
1.6.9 性能分析及调试工具(Profiling and Debugging Tools)

游戏是实时系统,因此,游戏引擎开发者一般需要查看分析他们的游戏的性能以作性能上的优化。另外,内存资源经常紧缺,所以开发者也很认真的对待和使用内存分析工具。如图1.23所示,性能查看和调试工具层,包含前面所提到的东西,另外还包括其它的调试工具,如调试用绘制(debug drawing),游戏内菜单或控制台(in-game menu/console),然后还有作为测试及调试用的记录及回放游戏的能力。

有许多好的通用的软件分析工具,如:

* Intel's VTune

* IBM's Quantify and Purify(part of the PurifyPlus tool suite)

* Compuware's Bounds Checker

不管怎样,大多数游戏引擎伴随着一套自定义的性能查看及调试工具。例如,它们可能包括下列其中一个或多个:

* 一个手动分析代码的机制,以便计算某段特定代码的运行时间

* 一个当游戏在运行时能够把分析数据显示在屏幕上的工具

* 一个能把性能情况转存到文件文件或者Excel表格中的工具

* 一个能检测多少内存被引擎使用,具体哪个子系统又用了多少的工具,并能以各种不同形式显示在屏幕上

* 一个能在游戏结束或者运行中把内存使用情况,峰值,及泄漏情况转存的机制

* 能通过代码改变调试输出状态,打开/关闭调试输出种类及控制输出详细程度的工具

* 记录游戏事件并回放的机制。这个比较难做好,不过做得恰当的话将会是一个很有价值的追踪bug的工具

1.6.10 碰撞及物理

碰撞检测对每个游戏来说都是很重要的。没有它,物体之间就会相互渗透,不可能跟虚拟的3D世界进行任何合理的交互。有的游戏还包含了一个真实世界的或者接近真实世界的动态模拟。在游戏业中我们称之为“物理系统”,不过“刚体物理”(rigid body dynamics)这个概念更准确,因为我们一般只考虑刚体的动作(运动学上的)及引起这个动作的力和扭矩(力学上的)。这一层如图1.24所描述。

碰撞和物理经常非常紧密的成对出现。这是由于碰撞的被检测,往往是物理上受力约束及综合逻辑的结果。今天很少有游戏公司写他们自己的碰撞/物理引擎,代之以将第三方的SDK整合进引擎。

* Havok. 今天业界的黄金标准。非常丰富的特性及全面的优异的性能

* PhysX. NVIDIA的。这是另外一个卓越的碰撞及物理引擎。它被整合进Unreal Engine 3,还是PC游戏开发的一个独立的免费产品。PhysX本来是设计为Ageia的新的物理加速芯片的接口的。SDK现在被NVIDIA所有并发布,他们修改PhysX让它跑在了公司的最新的GPU上。



图1.24 Collision and physics subsystem

也有开源的物理/碰撞引擎。可能最为有名的是Open Dynamics Engine(ODE). 更多信息请参见: http://www.ode.org.
I-Collide, V-Collide, 还有RAPID是另外的有名的非商业碰撞检测引擎。这三个都是由University of North Caolina(UNC)开发的。更多信息请参见:http://www.cs.unc.edu/~geom/I_COLLIDE/index.html, http://www.cs.unc.edu/~geom/V_COLLIDE/index.html, http://www.cs.unc.edu/~geom/OBB/OBBBT.html.

1.6.11 动画(Animation)

任何有有生命的或者类似有生命的角色的游戏(人类、动物、卡通角色,甚至机器人),都需要一个动画系统。游戏中用到的动画系统有五种:

* 精灵/图片动画(sprite/texture animation)

* 刚体层级动画(gigid body hierarchy animation)

* 骨骼动画(skeletal animation)

* 顶点动画(vertex animation)

* 形态目标(morph targets, MT)

骨骼动画允许一个细致的3D角色模型的网格能被一个由动画师用一个有关联的非常简单的骨骼定位。当骨骼移动,这些3D模型网格上的顶点也随之移动。尽管有些引擎中使用MT及顶点动画,骨骼动画是今天的游戏中最流行的动画制作方式。因为,它将作为本书的重点。

你可能注意到图1.11中,骨骼网络渲染(Skeletal Mesh Rendering)是分开的渲染器跟动画系统之间的桥梁。这儿有一个非常紧密的协作,不过接口是良好定义了的。动画系统为骨骼中的每一根骨头计算出一个位置,然后将位置作为矩阵系列(palette of matrices)之一传递给渲染引擎。渲染器对每个顶点用矩阵系统中的一个或多个矩阵进行坐标变换,作出一个最终的混合的顶点位置。这个过程被称之为蒙皮(skinning)。

动画和物理系统之间也有一个紧密的关系, 比如当使用布娃娃(rag doll)的时候。布娃娃是一个柔软的(一般是没有生命的)动画角色,它的身体的动画由物理系统模拟。物理引擎将它的身体的各个部件看作是一个有限定关系的刚体,然后算出它们的位置及朝向。动画系统计算出渲染引擎需要用来将角色绘制到屏幕上去的矩阵系列.

1.6.12 人机设备接口(Human Interface Devices(HID))

任何一个游戏都需要处理玩家的输入,它们由以下各种HID获得:

* 键盘及鼠标

* 游戏手柄

* 其它特殊的游戏控制器,如方向盘, 钓鱼杆,跳舞毯, Wii遥控器,等等。

有时候我们称这个部件为用户I/O组件,因为我们也通过HID给玩家以输出,如游戏手柄的力反馈/震动,或者Wii遥控器发出来的声音。

HID引擎组件有时候架构成将某个流行的硬件平台上的底层游戏控制跟上层游戏控制分离开来。它转发硬件传来的原始数据,为游戏手柄的每个摇杆中间划出一个不活动区域,检测按钮按下和松开事件,双击按钮事件,突发的和平缓的加速输入(如PS3的sixaxis手柄),等。它一般提供一个可以自定义物理输入和游戏功能映射的机制。它还经常包含一个检测"合弦"输入(多个按键一起按下),序列输入(在某个限定时间内以一定次序按键),和手势(对按键、摇杆、加速器的序列输入).
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: