我所遭遇过的游戏中间件--Havok

Havok是我接触的第一款游戏中间件,那是在五,六年前,我刚刚毕业,对游戏开发还是个菜鸟.我记得先是对游戏场景中的地形和其他静态物体生成刚体,然后做角色的Ragdoll就是模拟人死之后顺着地形躺下,然后又做车辆模拟,后来还做过破碎.下面先一一枚举下我做的事情:
      (1)地形刚体是每次场景加载时实时生成的.
      (2)场景中的所有静态物体生成一个巨大的组合刚体,每一个静态物体都是刚体的一个Shape,然后将该刚体保存到文件中.
      (3)创建出一堵刚体所组成的墙.然后可以用物体砸它.
      (4)Ragdoll搞的很辛苦,因为当时我还不太了解骨骼动画,还没吃透游戏引擎中的动作模块.然后Havok又有一套Animation模块,如果要做Ragdoll则需要用到Animation.
      (5)穿刺处理.当搞出Ragdoll之后,发现如果角色死在墙边时,手部有可能插入到墙内,那么这时变成Ragdoll后,手部刚体就会在墙内.这种情况下死相有些难看,需要做动态刚体穿刺处理.
      (6)车辆模拟,当时搞出来后,在场景编辑器中,随意生成地形,创建场景,自己玩的很起劲.后来我比较了PhysX和Bullet后发现Havok提供了车辆功能最为完善,操作感最好.
      (7)破碎处理.DEMO中有敲玻璃的例子,我就仿着它写,记得当时是有个坦克的车辆,用它发射子弹刚体敲击玻璃.而玻璃破碎的过程是删除旧刚体,生成多个新刚体.
      (8)可分解的刚体,就是做一个小木屋,当有其他刚体碰到时,会坍塌.但坍塌后的刚体有时会嵌入到地面上,左右摇摆不定,这让我很是无奈.
      (9)想做刚体模拟布料效果,当时生成一圈的刚体,围在一个角色腿部.每个刚体与周围四个刚体有约束连接.但效果不行,动作剧烈时或刷帧率低时,膝盖会穿出刚体.
      (10)角色的控制.纯粹就是将Havok的CharacterControl移植到引擎中.引擎中本来就是角色控制的逻辑,没必要用Havok的.
      我在Havok上做的一切没有应用于任何一款游戏,最初觉得有点可惜,但是现在再看看当时写的代码,想想也不可惜,那代码写得太挫了.

Havok不仅仅是物理开发包,正如DirectX不仅仅是3D图形开发包一样.Havok包括一系列图形游戏相关的开发,如AI,Animation,布料,脚本,甚至包括一套图形渲染引擎.但大部分的使用都是在物理方面,就如同大部分对DirectX的使用仅仅是D3D.DirectX的其他模块如Sound,Music还有人在用,而Input,Play之类使用者了了无几.与Havok竞争的一款物理引擎PhysX,感觉它们两个的关系很像DirectX和openGl.DirectX的装包有500多M,openGl的安装包大约有几十M.Havok大而全,提供了很多与物理相关的功能,它的安装包也很大,总共要几个G,安装过程也挺麻烦的.PhysX的安装包则只有100M不到.Havok提供了起码几百个的DEMO,而PhysX的官方DEMO也就二十几个.Havok大气滂沱,PhysX简洁精悍.

Havok的所有DEMO都堆集在一个工程中,这个工程十分庞大,这是我至今为止见过的代码量最大的单个工程,感觉相当霸气.DEMO涉及到Havok的方方面面,除了物理和碰撞方面的,还有内存管理,多线程管理,文件读写.如果能再集成几个物理小游戏就好了.

Havok有一套Animation模块,也是免费的,这个因为不太用,所以我研究地不深.记得当时有个DEMO是实现动作混合的,不知道这个模块现在发展成什么样了.现在游戏中有角色间交互的需求,比如角色受到攻击时,攻击点不同,攻击力度不同应该有不同的反映,希望能有解决方案.这需要物理,Animation,IK三种技术.

Havok的布料模块,这个模块很奇怪,它与物理模块没有关系,或者说它有自己的物理模块.如果你要实现一个角色穿着布料的情况,你需要为布料再创建出一套碰撞体来.但角色身体上可能已经给他创建出刚体了.而布料的最大问题是有很大的不确定性,当角色播放剧烈的动作时,布料会穿出碰撞体.比如你的角色穿着一条裙子,当一套动作做完后,大腿穿出了裙子,整个裙子跑到屁股后面了.后来Nvdina提供了一套基于PhysX的中间件Apex,实现了物理布料与骨骼动画的融合处理,使布料在受物理影响时,也受到骨骼动作的影响,解决了这一难题.从而我便从Havok转到了PhysX.

Havok AI这个不免费,我没接触过.Havok物理中有个DEMO是角色在场景中自由漫游且相互避让.其实寻路,碰撞,物理,IK总有些耦合性.

Havok的相关工具还是挺不错的,Havok的Max导出插件在导出模型时,可以自由地设置其矩阵变换;而PhysX导出插件则不能.MAX中的建模坐标系为Z轴右手坐标系,而通常游戏中为Y轴向上的左手坐标系.那么对模型的坐标系变换就很是需要.Havok的VisualDebugger工具要比PhysX的更好用.我记得可以很轻松地设置VisualDebugger的视角与游戏视角一致,而PhysX的PVD中,我始终没有实现这一功能.不过VisualDebugger我不太常用,相对于重开一个进程对物理进行调试数据的显示,我更喜欢直接将物理对象绘制在游戏中,这样做更为直观方便.

我所遭遇过的游戏中间件--Havok的更多相关文章

  1. 我所遭遇过的游戏中间件--PhysX

    我所遭遇过的游戏中间件--PhysX PhysX现在是Nvidia的物理中间件.其特点是简练且功能强大.当我最初拿到PHYSX的SDK时,就发现这个物理中间件比Havok要小很多,但该有的功能都有,甚 ...

  2. 我所遭遇过的游戏中间件---SpeedTree

    我所遭遇过的游戏中间件---SpeedTree SpeedTree是一个专门用于渲染植被的中间件,并提供了一套完善的植物编辑工具.在它官方提供的DEMO中,你会看到高度逼真的树木和植物,在风的影响下树 ...

  3. 我所遭遇过的游戏中间件---nvDXTLib

    我所遭遇过的游戏中间件---nvDXTLib nvDXTLib是Nvidia提供的一套用于DXT纹理压缩SDK.接口十分简洁,就是提供了几个纹理压缩的函数,其中我使用最多的函数是: DXTLIB_AP ...

  4. 我所遭遇过的游戏中间件---HumanIK

    我所遭遇过的游戏中间件---HumanIK Autodesk HumanIK游戏中间件,为游戏创建更加可信.真实的角色动画.该中间件的全身逆向运动(FBIK)系统支持角色真实地与所在环境及其它角色进行 ...

  5. 我所遭遇过的游戏中间件--Kynapse

    我所遭遇过的游戏中间件--Kynapse Autodesk Kynapse游戏中间件是一款面向游戏开发.非玩家控制角色实时模拟的领先的人工智能解决方案.Kynapse具有先进的路径查找功能,比如三维路 ...

  6. 我所遭遇过的游戏中间件--Scaleform

    我所遭遇过的游戏中间件---Scaleform Scaleform帮助开发人员利用现代系统的三维硬件加速性能创建电影品质的菜单.游戏内HUD,动画纹理.迷你游戏以及移动游戏与应用.Scaleform作 ...

  7. 我所遭遇过的游戏中间件---Redux

    我所遭遇过的游戏中间件---Redux 一.关于Redux Substance Redux 是一款纹理处理软件加中间件,专门用于纹理生成和压缩.具其用户指南介绍,它能够对纹理集进行优化,可以将现有压缩 ...

  8. 我所遭遇过的游戏中间件--Apex

    我所遭遇过的游戏中间件--Apex Apex是PhysX的扩展中间件,它是在PhysX的基础上封装了一层.用于实现布料,粒子,破碎这三种物理效果.我只研究其布料处理.使用Apex做物理最大的好处是:它 ...

  9. 我所遭遇过的游戏中间件--FlashOcx

    使用Flash做游戏界面的另一种方式是通过Abode提供flash.ocx处理Flash界面.将Flash图像通过GDI绘制出来后,再将图像数据拷贝到一个D3D的纹理结构中,最后由引擎的D3D接口进行 ...

随机推荐

  1. POJ 2260 Error Correction 模拟 贪心 简单题

    Error Correction Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6825   Accepted: 4289 ...

  2. Initramfs 原理和实践

    Linux系统启动时使用initramfs (initram file system), initramfs可以在启动早期提供一个用户态环境,借助它可以完成一些内核在启动阶段不易完成的工作.当然ini ...

  3. 回顾2014 Java发生的5件大事

    回顾2014 Java发生的5件大事 1.2月1日:RedMonk分析师确认并宣布Java是最受欢迎和多样化的语言! 2014年,Java生态圈伴随着引擎的轰鸣起步,随着FOSDEM年会的Free J ...

  4. Django基础-Lesson1

    web框架概念 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统. 对于所有的Web应用,本质上其实就是一个socket服务端, ...

  5. Openstack_通用模块_Oslo_vmware 创建 vCenter 虚拟机快照

    创建虚拟机快照 vSphere Create Snapshot 文档 Snapshot 是虚拟机磁盘文件(VMDK)在某个点及时的复本.包含了虚拟机所有虚拟磁盘上的数据状态和这个虚拟机的电源状态(on ...

  6. 如何正确使用 Django的User Model

    阅读目录(Content) django——重写用户模型 1.修改配置文件,覆盖默认的User模型 2.引用User模型 3.指定自定义的用户模型 4.扩展Django默认的User 5.自定义用户与 ...

  7. 理解Django的makemigrations和migrate

    在你改动了 model.py的内容之后执行下面的命令: python manger.py makemigrations 相当于在该app下建立 migrations目录,并记录下你所有的关于modes ...

  8. 【BZOJ 2721】 2721: [Violet 5]樱花 (筛)

    2721: [Violet 5]樱花 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 599  Solved: 354 Description Input ...

  9. 洛谷.4512.[模板]多项式除法(NTT)

    题目链接 多项式除法 & 取模 很神奇,记录一下. 只是主要部分,更详细的和其它内容看这吧. 给定一个\(n\)次多项式\(A(x)\)和\(m\)次多项式\(D(x)\),求\(deg(Q) ...

  10. 谁是最快的Go Web框架

    根据Julien Schmidt测试框架中测试到的go web框架,在加上lion,fasthttp,一共测试了下面的web框架. default http macaron go-json-rest ...