我所遭遇过的游戏中间件---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. Server sent passive reply with unroutable address. Using server address instead

    最近在linux服务器安装vsftp服务.经过一轮设置,终于可以连接上了,用winSCP连接,刷新目录就提示这个错误. 解决办法: vim /etc/vsftpd.conf  ,编辑配置文件,最后加上 ...

  2. 8-1 Stacks of Flapjacks UVA120

    题意:  有一叠煎饼在锅里 n n<=30张  每张都有一个数字 代表它的大小    厨师每次可以选择一个数k  把从锅底开始数第k张上面的煎饼全部反过来  即原来的在上面的煎饼现在到了下面   ...

  3. mysql关于数据库表的水平拆分和垂直拆分

    最初知道水平垂直分表的时候是刚参加工作不久的时候,知道了这个概念,但是公司用户量和数据量始终没上来,所以也没用到过,知道有一天到了一家新公司后,这些才被应用到实际开发中,这里我就大概说说关于水平和垂直 ...

  4. MXNet——symbol

    参考资料:有基础(Pytorch/TensorFlow基础)mxnet+gluon快速入门 symbol symbol 是一个重要的概念,可以理解为符号,就像我们平时使用的代数符号 x,y,z 一样. ...

  5. 01-学前入门VS各个组成部分

    1)快捷打开运行窗口(Windows+R) 里面输入devenv命令快捷打开VS 2)解决方案,项目及类之间的关系(解决方案包含项目-项目包含-类) 例如可以这样比喻: 解决方案:相当于公司 项目:相 ...

  6. luogu4595 [COCI2011-2012#5] POPLOCAVANJE 后缀自动机

    看着就像后缀自动机.... 然后搜了一下,网上一大把的\(AC\)自动机 嗯...... 不管了,打一个试试 然后就过了\(QAQ\) 我们考虑对于每个点\(i\)求出它往前最长能匹配的子串的长度 可 ...

  7. [BZOJ4557][JLOI2016]侦察守卫(树形DP)

    首先可以确定是树形DP,但这里存在跨子树的信息传递问题,这里就需要“借”的思想. f[i][j]表示i子树内所有点都被覆盖到,且i以外j层内的点都能被覆盖到 的方案数. g[i][j]表示i子树内离i ...

  8. 2 Scala基本语法

    1 变量和函数 变量: Scala 有两种变量, val 和 var. val:常量,类似于 Java 里的 final 变量.一旦初始化了, val 就不能再赋值了. va: 如同 Java 里面的 ...

  9. 【10.6校内测试】【小模拟】【hash+线段树维护覆盖序列】

    一开始看到题就果断跳到T2了!!没想到T2才是个大坑,浪费了两个小时QAQ!! 就是一道小模拟,它怎么说就怎么走就好了! 为什么要用这么多感叹号!!因为统计答案要边走边统计!!如果每个数据都扫一遍20 ...

  10. Codeforces Round #360 (Div. 2) B. Lovely Palindromes 水题

    B. Lovely Palindromes 题目连接: http://www.codeforces.com/contest/688/problem/B Description Pari has a f ...