我所遭遇过的游戏中间件--Havok
我所遭遇过的游戏中间件--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的更多相关文章
- 我所遭遇过的游戏中间件--PhysX
我所遭遇过的游戏中间件--PhysX PhysX现在是Nvidia的物理中间件.其特点是简练且功能强大.当我最初拿到PHYSX的SDK时,就发现这个物理中间件比Havok要小很多,但该有的功能都有,甚 ...
- 我所遭遇过的游戏中间件---SpeedTree
我所遭遇过的游戏中间件---SpeedTree SpeedTree是一个专门用于渲染植被的中间件,并提供了一套完善的植物编辑工具.在它官方提供的DEMO中,你会看到高度逼真的树木和植物,在风的影响下树 ...
- 我所遭遇过的游戏中间件---nvDXTLib
我所遭遇过的游戏中间件---nvDXTLib nvDXTLib是Nvidia提供的一套用于DXT纹理压缩SDK.接口十分简洁,就是提供了几个纹理压缩的函数,其中我使用最多的函数是: DXTLIB_AP ...
- 我所遭遇过的游戏中间件---HumanIK
我所遭遇过的游戏中间件---HumanIK Autodesk HumanIK游戏中间件,为游戏创建更加可信.真实的角色动画.该中间件的全身逆向运动(FBIK)系统支持角色真实地与所在环境及其它角色进行 ...
- 我所遭遇过的游戏中间件--Kynapse
我所遭遇过的游戏中间件--Kynapse Autodesk Kynapse游戏中间件是一款面向游戏开发.非玩家控制角色实时模拟的领先的人工智能解决方案.Kynapse具有先进的路径查找功能,比如三维路 ...
- 我所遭遇过的游戏中间件--Scaleform
我所遭遇过的游戏中间件---Scaleform Scaleform帮助开发人员利用现代系统的三维硬件加速性能创建电影品质的菜单.游戏内HUD,动画纹理.迷你游戏以及移动游戏与应用.Scaleform作 ...
- 我所遭遇过的游戏中间件---Redux
我所遭遇过的游戏中间件---Redux 一.关于Redux Substance Redux 是一款纹理处理软件加中间件,专门用于纹理生成和压缩.具其用户指南介绍,它能够对纹理集进行优化,可以将现有压缩 ...
- 我所遭遇过的游戏中间件--Apex
我所遭遇过的游戏中间件--Apex Apex是PhysX的扩展中间件,它是在PhysX的基础上封装了一层.用于实现布料,粒子,破碎这三种物理效果.我只研究其布料处理.使用Apex做物理最大的好处是:它 ...
- 我所遭遇过的游戏中间件--FlashOcx
使用Flash做游戏界面的另一种方式是通过Abode提供flash.ocx处理Flash界面.将Flash图像通过GDI绘制出来后,再将图像数据拷贝到一个D3D的纹理结构中,最后由引擎的D3D接口进行 ...
随机推荐
- slf4j logback pom
pom: <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding&g ...
- 16bit C & ASM 如何混合编译?
起源: 今天在看以前没看完的一本书<图形程序开发人员指南>,在做里面的例子. 第一章就出问题了,一个例子“L1_2.c, L1_3.asm" ,这是C程序和ASM汇编程序的混合编 ...
- 全文搜索引擎 Elasticsearch (二) 使用场景
1.场景—:使用Elasticsearch作为主要的后端 传统项目中,搜索引擎是部署在成熟的数据存储的顶部,以提供快速且相关的搜索能力.这是因为早期的搜索引擎不能提供耐用的存储或其他经常需要的功能 ...
- ARM Linux 驱动Input子系统之按键驱动测试
上一篇已经谈过,在现内核的中引入设备树之后对于内核驱动的编写,主要集中在硬件接口的配置上了即xxxx.dts文件的编写. 在自己的开发板上移植按键驱动: 1.根据开发板的原理图 确定按键的硬件接口为: ...
- Entity Framework Core 入门(2)
安装 EF Core 将 EF Core 添加到不同平台和常用 IDE 中的应用程序的所需步骤汇总. 分步入门教程 无需具备 Entity Framework Core 或任何特定 IDE 的原有知识 ...
- C# 序列化简单格式XML
问师傅反序列化和序列化到底是什么, 然后师傅鄙视一下我的智商,让我做个反序列化解析XML. 一边听着师傅在旁边跟女朋友打电话收到暴击伤害,一边写,搞了一个半小时. XML文件: <?xml ve ...
- Power OJ 2605 SPFA+dp思想
题目链接[https://www.oj.swust.edu.cn/problem/show/2605] 题意:给出包含N(N <= 5000)个点M条边的有向图,然后求1 - N在满足距离小于T ...
- 【10.17校内测试】【二进制数位DP】【博弈论/预处理】【玄学(?)DP】
Solution 几乎是秒想到的水题叻! 异或很容易想到每一位单独做贡献,所以我们需要统计的是区间内每一位上做的贡献,就是统计区间内每一位是1的数的数量. 所以就写数位dp辣!(昨天才做了数字统计不要 ...
- CodeForces 32C. Flea 水题
C. Flea time limit per test 2 seconds memory limit per test 256 megabytes input standard input outpu ...
- newtonsoft动态修改JObject
直接上代码: var data = new { mobile = ", company = ", isTravel = ", invoiceId = ", se ...