《游戏引擎架构》读书心得(三)

一.动画系统

(1)动画系统的演变:

a)传统的帧动画:2D游戏中,将动作逐帧播放。好吧,我只停留在这个水平。

b)动画纹理:与帧动画差不多,使用面向摄像机的四边形,贴上一连串的纹理。虽然很挫,但是现在仍有应用,特别远距离的物体还是可以使用这种动画方式的。

c)刚性阶层式动画:将角色拆分为各个部分,可以按照关节运动,但是由于是刚性运动,三角形不会有所拉伸,因而会有“裂缝”,看起来不是很真实。

d)每顶点动画:蛮力方法,为每个顶点添加随时间改变的动作信息,虽然三角形会有变化,但是由于存储量太大,不常用。

e)变形目标动画:与上面的方法大致相同,都是存储顶点信息,但是存储量较少,用于极端情况,运行时将两种或以上的姿势混合,就可以生成动画。通常用于面部动画。

f)蒙皮动画:最常用的动画系统。兼具刚性阶层动画和顶点动画的优点。由刚性的骨头和外部圆滑的三角形网格皮肤构成,顶点会追踪关节,当关节移动时,蒙皮可以自然的拉伸。

关于动画数据,一定要进行压缩,不然会过于庞大。

(2)动画系统,由于GPU和CPU的负载,不可能像电影那样锁定帧率,所以游戏的帧率是不稳定的,因而动画系统必须要能够调节时间比例,可以根据帧数采样,帧数不仅限于整数,可能是小数,甚至可以根据是负数来形成倒转的动画。

(3)局部时钟和全局时钟:动画自身有一个局部的时间线,而角色有全局时间线。最简单的就是直接使用动画的局部时间线来控制动画,但是有可能会出现多个角色动画不同步的问题。使用全局时间线,协调不同角色之间的动画。

(4)选择性载入动画,由于动画较大,一次性载入肯定不现实。一般采取的方法是初始化时载入一组核心的动画集,比如角色移动的动画。其余的按需求载入。有的引擎把动画打包成逻辑组,以此单位载入及卸载。

(5)动画系统的架构:

a)动画管道:用于产生动画,设置动画播放参数等等,并根据骨骼,动画片段等等数据,计算产生动画。这里产生的动画貌似是一些原子动画,可以组合。

b)动作状态机:置于动画管道之上,通常为有限状态机,通过状态来控制播放哪个动画。如果有同时播放几个动画的情况,可以通过状态层使用多个独立的状态机来控制。每个状态对应一个或者几个动画管道产生的原子动画,将其混合。关于这个状态,最好使用脚本来控制,因为动画的编辑,一定要尽快看得到状态,所以也有很多引擎提供了可视化的动画编辑器。当然,除了要根据状态显示不同的动画之外,还要注意不同状态之间的过渡,

c)动画控制器:相当于控制动画状态机的一层,实现更高层的动画控制,具体负责一个动作的动画。

二.碰撞检测系统(collisiondetection system)及刚体动力学(rigid body dnamic)

(1)一些常用的物理SDK如Bullet和PhysX,Havok等。以后打算去看一看PhysX

(2)碰撞检测系统:判断世界中的物体是否有接触,每个逻辑对象用一个或者多个几何形状代表,通常用简单的几何体来代表。检测在某些时刻是否有相交,其实碰撞检测系统就是一个几何体相交检测器。

(3)碰撞物理世界:collision world,碰撞引擎通常通过一个碰撞世界的数据结构管理所有的可碰撞实体。相比将碰撞信息存储于游戏对象本身,将碰撞数据统一管理,可以免去管理多余数据结构,并且有效封装,从可理解性,可维护性,可重用性来说都有好处。

(4)碰撞原型:

a)球体(最高效)

b)胶囊体(比圆柱体和长方体高效)

c)传说中的AABB,(axis-alignedbounding box)中文叫轴对齐包围盒。6个面都与坐标系的轴平行,可以很方便的由两个点定义,一个是盒子在主轴上的最小坐标,另一个是最大坐标。优点在于可以很高速的测试和另一个AABB相交与否。但是要求比较高,AABB最好是保持与轴对齐,一旦物体旋转,其逼近形状很差,不能很好的适应物体。

d)OBB(orientedbounding box)定向包围盒。使用半长,半宽,半高,以及一个变换用来定位盒子的中心位置和方向。比较常用。

还有一些,不过对我来说简直太高大上了,还是先看看基础的吧。

对于复杂的物体,可以先进行整体的包围盒检测,如果检测成功了,再使用更高级的检测方法来检测,或者检测子部分。如果不成功,后面的步骤就可以直接省略。这样大大的提高了效率。

(5)关于碰撞检测,有一大堆高大上的算法。表示数学不好,基本看不懂。不过有一个地方还是要注意一下,关于移动物体的碰撞检测,可能会出现“隧穿”现象。正常我们做碰撞检测采用的是碰撞世界“快照”的方式,即每隔一段时间,查看有没有碰撞。但是就有可能出现类似子弹穿纸的情况,在时间间隔内,已经走过了范围,然而的确是碰到了。解决的办法是使用扫掠形状,比如从上一个位置到下一个位置形成一个胶囊体。检测这个胶囊体和另一个物体的碰撞即可。或者还有一种使用连续碰撞检测的方法,求得最早的冲击时间。

(6)碰撞检测的性能优化:碰撞检测是很耗费cpu的操作。所以一定要进行相关的优化。先进行空间的划分,八竿子打不着的就不检测了。然后进行中间阶段的检测,最后再进行精确检测。

(7)碰撞查询:其实有时候我们做碰撞检测不是要检测真正的物体和物体之间的碰撞,有时候是假想的物体。比如获得在给定范围内所有玩家对象。这样的操作成为碰撞查询。

a)光线投射:ray  cast。貌似就是射线检测,光线投射通过起点p0和方向d,根据方程p(t) =p0 + td t属于【0,1】,t值即碰撞早晚的参数,因为碰撞检测会返回一组结果,通常为t值,击中的碰撞体,接触点的法矢量。

b)形状投射:这个貌似很有用。比光线投射更加精准,而且能传回多个触点。经常用于判断摄像机是否与游戏世界中的物体碰撞。胶囊体投射常用于角色移动。

(8)碰撞回调:可以在碰撞检测中设置回调函数,用回调函数决定怎样处理碰撞。

(9)碰撞材质:这个想法好天才。类似图像的材质一样,将碰撞系统也设置一种材质,不同的材质有不同的碰撞效果,如音效,粒子,物理属性等。

(10)保证摄像机不要穿过物体,不然会穿帮。不过这并不是一件容易的事。通常使用包围球包围摄像机,在碰撞到物体之前,调整摄像机的位置或定向。

(11)物理系统必须定期更新,通常每帧更新一次,有时候可以使用上一帧的碰撞状态,或者接受一帧的延迟。可以单线程,也可以使用基于命令队列的多线程更新。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-05 01:06:21

《游戏引擎架构》读书心得(三)的相关文章

游戏引擎架构读书心得(一)

最近在读<游戏引擎架构>这本书,虽然感觉理论颇多,而且很多很多东西都看不懂,不过还是简单的把一些感觉很好的思想和方法或者概念记录下来. 1.      关于各个部件初始化,一个最简单粗暴的办法就是将各个部件按顺序排列起来,不但可以方便的看到初始化顺序,而且修改也十分容易. 2.      关于内存分配: a)        游戏中最常见的法则是-维持最低限度的堆分配,并且永远不在紧凑的循环中使用堆分配. b)        定制的内存分配器,先预先申请一大块内存,然后构建自己的内存分配器(st

《游戏引擎架构》读书笔记1-游戏引擎中的C++

3月底,我暂时结束了北京的工作,从原来的公司离职,主要是为了学习游戏开发的底层知识和3D引擎相关的内容,并进行技术转型,为了鞭策自己的学习,未来博客更新会比较频繁,现阶段主要是<游戏引擎架构>读书笔记系列和unity学习笔记系列. <游戏引擎架构>在两年前就买了,而且自己也大体的看过一遍,因为自己想学习引擎的底层知识,所以重新又找出了这本书再读一遍,并把根据自己的理解写一些读书笔记在这里与大家交流,另外因为想有一个新的开始,近期都会在博客园这里写技术博客了,前些日子搞了个自己的网站

游戏引擎架构.pdf高清版免费下载

下载地址:网盘下载 备用地址:网盘下载 内容简介编辑[1]  <游戏引擎架构>同时涵盖游戏引擎软件开发的理论及实践,并对多方面的题目进行探讨.本书讨论到的概念及技巧实际应用于现实中的游戏工作室,如艺电及顽皮狗.虽然书中采用的例子通常依据一些专门的技术,但是讨论范围远超于某个引擎或API.文中的参考及引用也非常有用,可让读者继续深入游戏开发过程的任何特定方向.<游戏引擎架构>为一个大学程度的游戏编程课程而编写,但也适合软件工程师.业余爱好者.自学游戏程序员,以及游戏产业的从业人员.通

游戏引擎架构 PDF下载

网盘下载地址:游戏引擎架构 PDF下载 – 易分享电子书PDF资源网 作者: [美] Jason Gregory (杰森.格雷戈瑞) 出版社: 电子工业出版社 原作名: Game Engine Architecture 译者: 叶劲峰 出版年: 2014-1 页数: 800 定价: 128.00元 装帧: 平装 内容简介 · · · · · · <游戏引擎架构>同时涵盖游戏引擎软件开发的理论及实践,并对多方面的题目进行探讨.本书讨论到的概念及技巧实际应用于现实中的游戏工作室,如艺电及顽皮狗.虽

《游戏引擎架构》读书心得(二)

一.调试技巧及工具 (1)基础调试 a)   日志及追踪,有些bug难以用VS自带的调试来进行单步调试,最好的解决方案就是printf调试法,打印一组数据,观察情况.之前我的做法是单独生成一个控制台,不过VS自带了一个OutPutDebugString()的方法,可以打印调试信息.不过这个只支持char*内容,我们可以将这个函数加工一下,使其支持不同类型的数据,甚至可以使其接受可变参数个数. b)   冗长级别:我们有时想要打印,有时又不想打印,所以可以设置打印内容的级别,每个信息设置一个级别,

《游戏引擎架构》读书笔记(四)

一.游戏性系统 (1)游戏世界一般分为静态元素和动态元素,静态元素和动态元素有时候没有特别明显的分界线.但是静态元素消耗资源较少,可以用笔刷等工具绘制静态元素. (2)游戏世界一般分为各个组块,如关卡,地图,地区等.建立在这之上的是高级游戏流程,即玩家的目标,比如任务. (3)游戏动态元素通常以面向对象的方式进行设计,通常称为游戏对象(Game Object),实体(entity),演员(actor)或者代理人(agent)等. a)游戏对象通常会扩展引擎本身的语言,加一些高级功能比如反射,并且

游戏引擎架构学习

本书的主页第一部分 基础 第1章 导论1.1 典型游戏团队的结构 工程师:艺术家:游戏设计师:制作人:其他工作人员:发行商&工作室 1.2 游戏是什么 71.3 游戏引擎是什么 101.4 不同游戏类型中的引擎差异 111.5 游戏引擎概观 221.6 运行时引擎架构 271.7 工具及资产管道 46第2章 专业工具 532.1 版本控制 532.2 微软Visual Studio 612.3 剖析工具 782.4 内存泄漏和损坏检测 792.5 其他工具 80第3章 游戏软件工程基础 833.

游戏引擎架构

游戏编程分为游戏逻辑和游戏引擎.游戏引擎是一套可重复利用的底层框架.包括渲染引擎.声音引擎.网络引擎等等.现提供一套游戏架构,从底层向上分别为: 硬件.驱动.操作系统. 第三方软件开发包:DirectX.OpenGL,Boost.STL库,Granny.Havok.Animation等. 平台独立层:集合.迭代器.文件系统.网络传输层.线程库.物理碰撞包裹类. 核心系统:模块启动终止.断言.单元测试.内存分配.数学库.调试用打印及日志.性能剖析.引擎配置.异步文件. 资源(游戏资产):三维模型资

游戏引擎架构笔记之基础

此书获誉无数,第一版没看过,直接看的第二版,然后大致看了一眼作者提到的和第一版的区别: 1.C++语言方面的最新进展,也就是C++ 11的标准:第八代主机游戏的架构,XBOX ONE和PS4 2.鉴于音效机制的巨大作用,作者增加了几章关于音效方面的内容. 3.修复了第一版中的一些错误. 我室友才买这本英文书没多长时间,就出新版本了,不知道杂说好,只能说好贵. 作者期望这本书能包括以下内容 1.工业级的游戏引擎是如何架构出来的? 2.游戏开发团队是如何被组织起来的,如何运转的. 3.世间有无数的游

《游戏引擎架构》笔记十二

碰撞及刚体动力学 一些碰撞/物理系统:http://www.gamedev.net/community/forums/topic.asp?topic_id=463024 I-Collide:http://cs.unc.edu/I-COLLIDE SWIFT: ODE:http://www.ode.org Bullet:http://code.google.com/p/bullet/ TrueAxis:http://trueaxis.com/ PhysX: Havok: PAL:http://ww