我所遭遇过的游戏中间件--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. Ubuntu16.04下HBase的安装与配置

    一.环境 os : Ubuntu 16.04 LTS 64bit jdk : 1.8.0_161 hadoop : mysql : hive : hbase: -hadoop2 安装HBase前,系统 ...

  2. 试水jdk8 stream

    jdk8出来日子不短了,jdk11都出来了,不过用的最多的不过是1.5罢了. 今年终于鼓起勇气认真对待它,在18年记录下学习stream,画上一个圆. 先看个图 Java8中有两大最为重要的改变.第一 ...

  3. UNP学习总结(一)

    本文主要为对UNP第五章部分内容的实验和总结. UNP第五章对一个echo服务器和客户端在各种连接状态下的表现做了详细的分析,包括了: 正常启动和终止: accept返回前连接中止: 服务器进程终止: ...

  4. Reading lists for new LISA students(转)

    Research in General How to write a great research paper Basics of machine learning http://www.iro.um ...

  5. PHP获取目录和文件的方法

    PHP获取当前目录和相对目录的方法<?php //获取当前文件所在目录,如果 A.php include B.php 则无论写在哪个文件里,都是表示 A.php 文件所在的目录 echo rea ...

  6. Android之基于HTTP协议的通信详解

    Android系统中本身是有下载机制的,比如浏览器使用的DownloadManager.可遗憾的是,DownloadManager只提供给浏览器使用,一般的应用程序没法调用它. 另外,如果下载调用频繁 ...

  7. 2016 UESTC DP专题题解

    题解下载地址:http://pan.baidu.com/s/1eSx27Jk 题解下载地址:http://pan.baidu.com/s/1qYDxlhi

  8. Android学习网站(1)

    收集了一些比较好的Android学习网站,希望对大家有所帮助: 1.http://developer.android.com/ Android官方网站,可惜被屏蔽了,需要使用FQ软件 2.http:/ ...

  9. MVC无限级分类01,分层架构,引入缓存,完成领域模型与视图模型的映射

    本系列将使用zTree来创建.编辑关于品牌.车系.车型的无限级分类,使用datagrid显示,源码在github.先上最终效果: datagrid显示所有记录.分页,提供添加.修改.删除按钮,并提供简 ...

  10. org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data;boundary=----WebKitFormBoundaryRAYPKeHKTYSNdzc1;charset=UTF-8' not supported

    原文:https://www.cnblogs.com/yueli/p/7552888.html 最近同事在做一个图片上传功能.在入参 body 中同时传入文件和其它基本信息结果出现如题异常.在此记录下 ...