我所遭遇过的游戏中间件--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接口进行 ...
随机推荐
- Bazel
Using Bazel on Windows Google软件构建工具Bazel FAQ
- 虚拟机hadoop集群搭建
hadoop tar -xvf hadoop-2.7.3.tar.gz mv hadoop-2.7.3 hadoop 在hadoop根目录创建目录 hadoop/hdfs hadoop/hdfs/tm ...
- 超实用 Git 使用方式介绍
都说程序员若是不知道 GitHub 就不是一个合格的程序员,其实这话说的过分了,不知道就学嘛,今天我们就来说说 Git 和 GitHub 到底是什么. 我们在开发软件的时候,常常是需要多人协作完成,这 ...
- iOS Sprite Kit教程之真机测试以及场景的添加与展示
iOS Sprite Kit教程之真机测试以及场景的添加与展示 IOS实现真机测试 在进行真机测试之前,首先需要确保设备已经连在了Mac(或者Mac虚拟机)上,在第1.9.1小节开始,设备就一直连接在 ...
- python opencv3 人脸识别的例子
一个人脸识别的例子 程序中用到了公共数据集, 欢迎去我的git上下载源码,源码里带有数据集 git:https://github.com/linyi0604/Computer-Vision 脚本中一个 ...
- luoguP3235 [HNOI2014]江南乐 数论分块 + 博弈论
感觉其实很水? 题目就是一个Multi SG游戏,只需要预处理出所有的\(sg\)值即可\(O(Tn)\)计算 对于计算\(sg[n]\)而言,显然我们可以枚举划分了\(x\)堆来查看后继状态 那么, ...
- HDU 4348 To the moon 主席树 在线更新
http://acm.hdu.edu.cn/showproblem.php?pid=4348 以前做的主席树没有做过在线修改的题做一下(主席树这种东西正经用法难道不是在线修改吗),标记永久化比较方便. ...
- bzoj 3262
题意:给你一些三维上的点,对于每个点,统计三个坐标都小于等于该点的点数. 如果点的范围在300以内,可以用三维树状数组搞,但这题坐标范围太大. 考虑将所有点按照x坐标排序,从左到右,相当于在一个二维平 ...
- python日常碎碎念
关于取命令行中参数的方法 1,sys.argv 这个方法自动获取参数,并split.一般情况下第一个元素是程序的名字.即 python script.py arg1 arg2 然后sys.argv返回 ...
- python开发_tkinter_单选菜单_不可用菜单操作
在之前的blog中有提到python的tkinter中的菜单操作 python开发_tkinter_窗口控件_自己制作的Python IDEL_博主推荐 python开发_tkinter_窗口控件_自 ...