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

Autodesk HumanIK游戏中间件,为游戏创建更加可信、真实的角色动画。该中间件的全身逆向运动(FBIK)系统支持角色真实地与所在环境及其它角色进行交互。通过动态地将FBIK信息分层置于运行中的现有视频中,创建、修改和重新利用角色动画,以此来节省动画师宝贵的时间。

以上语句拷贝自HumanIK广告手册.所谓IK(反向动力学)就是相反于正常的骨骼动作播放,提供骨架上某几根骨骼的变换状态,让骨架动态的摆出合理的位置.举个具体应用的例子,如果要实现两个高度不定的角色间的握手,不使用IK只能为每两种高度的角色编辑一套动作,这样做工作量和数据量都很大.如果游戏中的角色高度是用玩家任意设置的,那么不使用IK是办不到的.

凭心而论,HumanIK是我接触的Autodesk的三款中间件中最让我省心的,另外两款是Scaleform和Kynapse.省心的原因是它的复杂程度比其他两款小很多,更为重要的是,我做的项目压根没用使用到HumanIK.所以我对HumanIK的研究只是停留在写了几个Demo的测试阶段.这已经是两年前做的事了,由于时间过久,很多细节已经忘却了.

HumanIK的需要自己一套文件数据,HumanIK提供了Maya的导出插件可以编辑生成该数据.但也可以使用现成的骨骼动作生成该数据.HumanIK提供了这方面的接口,当然开发者可以不保存该数据的文件,而是每次创建动作时生成该数据.骨骼动作的关节间有个自由度范围,在其Maya导出插件中,可以编辑该范围,而自动生成的范围则采用默认参数.当时有个小坑是,角色的腿分为两类,一种是普通的膝关节,另一种膝关节是反的,用于鸟类.我直到搞了HumanIK才意识到鸟类的膝关节是反的,之前吃了那么多鸡腿都没有注意过.

HumanIK的集成比较容易,依照其Demo,按照流程,可以轻松创建一个HumanIK的对象HIKCharacter.
    //Step 1: Define which joints my character use.
    // 步骤 1. 创建HIKCharacterDefinition
    //Step 2: Create a HIKcharacter for my definition.
    // 步骤 2. 根据HIKCharacterDefinition创建 HIKCharacter
    //Step 3: Setup my character geometry, T Stance.
    // 步骤 3. 设置HIKCharacter的几何体
    //Step 4. Set up Degrees of Freedom (optional)
    // 步骤 4. 设置自由度(可选)
    // 通过自由度,可以增加针对特定角色的这些内置旋转限制,以创建对骨架灵活性的其他约束。
    //Step 5: Characterize your character geometry.
    // 函数完成角色化之后,无法随时更改自由度
   
       记得去年夏天,有个师弟来我家,他在上海一家游戏公司,混的比我好,早已经是项目经理了.想实现角色握住门把手,或者拿起桌子上的东西的功能.我给他推荐了HumanIK,不知道他现在搞的怎么样了.但如果他是今年问我这个问题的话,我一定不给他推荐HumanIK,这个功能用三角形的余弦定理,可以实现.余弦定理是已知三角形的三个边长求三个内角.具体调试起来有点麻烦,我大概花了一天的时间搞定.可以修改骨架的胳膊或腿的两级骨骼,虽不像HumanIK那样能修改骨架的N级骨骼,以及设置关节间的自由度,但也能满足需求.

由于时间过久,对HumanIK的记忆有点模糊,我记得它的DEMO中有个爬梯子的小人,具体的实现代码却没有细看.但游戏中对IK的需求并不只是爬梯子这么简单,策划更希望能实现角色间的动态交互,这与物理有些关系.比如,角色受到攻击时,根据被攻击的位置和力度动态地做出不同的反应.但这种功能,在HumanIK中没有,在三个物理的中间件中也没有.我曾经在一款游戏中见到这种功能,还自己写算法简单模拟过.当角色某一部位受到攻击时,让相关骨骼向后做一点旋转,将就着还凑合吧,没有细调.但要实现角色受攻击时,退后几步再回来,有点麻烦.希望有朝一日,HumanIK或者物理的中间件能提供个解决方案.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    我所遭遇过的游戏中间件--Havok Havok是我接触的第一款游戏中间件,那是在五,六年前,我刚刚毕业,对游戏开发还是个菜鸟.我记得先是对游戏场景中的地形和其他静态物体生成刚体,然后做角色的Ragd ...

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

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

随机推荐

  1. Oracle数据库的基本查询

    本文用的是Oracle 10g数据库,利用PL/SQL Developer的集成开发环境(安装可以自行百度) Oracle数据库  ---> 数据库实例  --->  表空间(逻辑单位)( ...

  2. c语言程序与设计第三版-苏小红--第一轮学习笔记、难点整理

    ---恢复内容开始--- 1> 编程:需求分析.设计.编写程序(编码.编辑.链接.运行).调试程序 2> 指数形式:e的左边是数值部分(有效数字),不能省略,但可以表示成 .e-4:等等: ...

  3. URL的组成

    饮水思源 http://blog.csdn.net/ergouge/article/details/8185219 http://www.cnblogs.com/kaituorensheng/p/37 ...

  4. 关于php上传文件过大的表单回填

    也许标题有点绕口,有点无法让人理解.请原谅博主,语文学的不好,都赖体育老师. 问题场景重现:在某次迭代中,接到这样一个需求:当新建或编辑一个Bug(包含附件以及其他字段)上传附件过大时,退回到编辑页面 ...

  5. 订单超时、活动过期解决方案:php监听redis key失效触发回调事件

    Redis 的 2.8.0 版本之后可用,键空间消息(Redis Keyspace Notifications),配合 2.0.0 版本之后的 SUBSCRIBE 就能完成这个定时任务的操作了,定时的 ...

  6. Spring的模块组成

    Spring的模块组成 1.核心容器:核心容器提供 Spring 框架的基本功能(Spring Core).核心容器的主要组件是 BeanFactory,它是工厂模式的实现. BeanFactory ...

  7. 【20181102T1】优美的序列【二分+ST表】

    题面 [正解] 相当于是 \(GCD_{i=L}^{R} A_i = min_{i=L}^{R} \{A_i\}\) 然后GCD可以用ST表实现\(O(log A_i)\)查询 并且GCD是递减的,所 ...

  8. CSS选择器复习

    通用选择器:* 选择到所有的元素 选择子元素:> 选择到元素的直接后代(第一级子元素) 相邻兄弟选择器:+ 选择到紧随目标元素后的第一个元素 普通兄弟选择器:~ 选择到紧随其后的所有兄弟元素 伪 ...

  9. Python知识(1)----基础入门和进阶总结。

    今天把Python的语法过了一遍,学习了慕课网上的教程,简单易懂,1个小时就可以入门Python了.Python有两个主要的版本,Python2.7,Python3.5,后面的版本,改动较大,编写的程 ...

  10. GCC 4.9.0 公布,提升 C++11 和 C++14 特性

    from :http://www.oschina.net/news/51084/gcc-4-9-0 GCC 4.9.0 公布,此版本号是个主要版本号更新,包含了 GCC 4.8.x 系列和之前的 GC ...