【Unity3D】 Blender2.9+二足角色FPS(TPS)手臂的IK骨骼绑定经验总结

  • 1. IK骨骼绑定
    • 1.1 如何给骨骼设置Custom Object
    • 1.2 如何将左手的Vertex Group镜像给右手(在不改变mesh的情况下)
    • 1.3 骨骼权重镜像的方法
      • 1.3.1 骨骼命名规范
      • 1.3.2 骨骼权重镜像流程
    • 1.4 关于自动权重(Auto Weights)的注意事项
    • 1.5 使用Bone Groups更高效地管理骨骼
    • 1.6 如何用Armature Layers(骨架层)将骨骼在视图中分开
    • 1.7 如何避免拖动武器时,双手紧握枪而不发生除位移之外的其他变化
  • 2. 感想
  • 3. Next Step
  • 资源 & 参考文献

希望西安疫情尽快过去,西安加油!


再过几天就全面进入考试周了,估计大半个月都不会碰blender了,所以是时候把这一周的实践所学好好总结一下,以供以后的自己和大家参考。

笔者用的blender版本是2.93.6,做IK骨骼绑定的目的是制作角色手持武器的动画,包括射击、换装弹匣等,作为Unity3D TPS Multiplayer游戏项目的骨骼动画素材,最终目标是实现人物重定向动画和武器切换功能(尽管现在还不是很清楚该怎么做)。因此也可以把本篇视为笔者TPS网络游戏开发日志中的一部分,之后笔者会陆续分享其余工作流的实践记录。

本次实践选用官方公开的原神可莉作为角色模型,它是面向MMD的,因此导入blender时需要通过CATS插件对模型作适当转换,具体操作见此链接的pmx转fbx小节;武器模型是在Unity3D的Asset Store中免费下载的,即Modern Weapons Pack;另外,武器的fbx文件导入时可能有编码问题,解决方法参考此链接。

1. IK骨骼绑定

IK骨骼绑定时最好找一个比较好的项目作为参考,观察人家怎么做的,并结合具体情况进行变通。

笔者由于要给Humanoid角色制作射击动画,于是参考FPS手臂的骨骼绑定 —— Leather Gloves,对自己之前绑定的IK手臂进行了修改。

下面将实践过程中学到的东西分享给大家,其中的很多问题已经有了很不错的解答,笔者也在相应地方以链接形式给出,就不赘述了。

1.1 如何给骨骼设置Custom Object

给骨骼设置Custom Object主要是为了方便操纵手的IK骨,实现流程见Blender绑定模块:为骨骼设置自定义物体(Custom Object)。

设置Custom Object前、后的骨骼如下图所示:

(a) 使用Custom Object前的骨骼显示 (b) 使用Custom Object前的骨骼显示

1.2 如何将左手的Vertex Group镜像给右手(在不改变mesh的情况下)

由于顶点选择通常比较麻烦耗时,所以考虑能否把左(右)手的顶点组镜像给右(左)手。

关于这个我找了很久,首先是在Vertex Group面板那里做文章,但它的Mirror Vertex Group似乎不能正常工作,具体的错误有人也同样遇到过(见链接)),似乎没有好的解决办法。

然而,在不断的摸索中,我找到了解决方案,该方法正常工作的前提是确保源对象和镜像对象的Mesh是完全镜像的,具体操作如下:

  1. 选中角色的Mesh,进入EditMode,选择Properties面板下的绿色三角形(Object Data Properties),展开Vertex Groups,并找到要镜像的顶点组,点击Select选择对应的网格,如下图示:

  2. 找到3D ViewPort面板的左上角(有的可能是左下角)的Select按钮,点选Select Mirror,即可发现镜像位置的顶点被选中了

  3. 接着在Vertex Groups的中新增一个顶点组,重命名为镜像的名称(Left改为Right,L改为R等等),然后点击Assign即可把选择的顶点作为新顶点组。

其余的部分都可以按照上面的步骤进行,不过说明的是此方法不会将权重镜像,1.3节的方法能镜像骨骼权重,不过代价是可能不会获得对称的顶点组,各有优劣,视具体情况来选择方式,但通常1.3节对于不爱刷权重的小伙伴是更棒的选择。

最后再提醒一下:Remove是作顶点集合的差,因此要清空顶点组,Remove前顶点组的网格应该是当前所选网格的子集;Assign是作顶点集合的并,而不是替换,所以Assign新顶点集之前要用Remove清空顶点组。

1.3 骨骼权重镜像的方法

1.2介绍了顶点组的镜像方法,但由此方法生成的权重是均一的,要实现权重的镜像,首先确保镜像源对象的权重是已经刷均匀(根据具体情况选择手动或自动分配权重)。

1.3.1 骨骼命名规范

对称骨骼的命名规范见官方文档。

经笔者验证,要确保权重对称命令的正常执行,骨骼命名必须严格符合规范,以ForeTwist.001为例,合法的对称骨骼命名如下(部分):

  1. 后缀:ForeTwist.L.001 ↔\leftrightarrow↔ ForeTwist.R.001 ororor ForeTwist.001.L ↔\leftrightarrow↔ ForeTwist.001.R
  2. 前缀:L_ForeTwist.001 ↔\leftrightarrow↔ R_ForeTwist.001
  3. 前/后缀:LEFT ForeTwist.001 ↔\leftrightarrow↔ RIGHT ForeTwist.001

注:left、right大小写敏感,可大写可小写,但对称骨骼必须保持大小写一致,三种合法情况分别为:全小写,全大写和首字母大写。

另外,笔者从github上找了个重命名插件——Simple Renaming Panel,安装该插件后,就可以根据骨骼名称的Pattern批量修改骨骼命名了。

以将_L后缀改为.L为例,使用流程如下:

  1. 按N打开边栏,切换至Rename选项卡,展开Simple Renaming Panel,Target栏选择Bone,即对骨骼操作,注意最好切换至Pose Mode,确保正常工作

  2. 取消Only Selected以对所有骨骼进行修改,勾选Use Regex开启正则匹配;

  3. Search栏键入_L,Replace栏键入.L,然后点击Search And Replace按钮即可重命名;

  4. _R →\rightarrow→ .R同理。

面板参数和操作结果如下图所示:

有时不同的模型的骨骼命名规范不一样,这时候把Search栏的搜索串改为对应Pattern即可,举个例子,如果要把前缀L_去掉,并在名称末尾加.L,可以首先搜索所有前缀为L_的骨骼,用插件的Add suffix功能在这些骨骼后面加上.L,最后再将L_替换为空串即可。

由于骨骼命名一般很短,不会有复杂的情况,因此简单的正则表达式即可满足需求。

1.3.2 骨骼权重镜像流程

操作前请确保完成了1.3.1节的骨骼命名规范化,这里以将骨骼Right arm的权重镜像至Left arm为例。

  1. 将Left arm的顶点组修改好,尽量不要和Right arm的顶点组有交集,且不要越过X=0,对称骨骼的顶点组和权重如图所示:

  2. 打开3D Viewport编辑板块,进入Weight Mode,找到右上角(或右下角)的镜像栏(如下图),点亮X(非常重要),这样才能保证对称和同步;

  3. 现在将Right arm的顶点组和权重复制到Left arm上,首先切换至绿色倒三角选项卡→\rightarrow→Vertex Groups→\rightarrow→点选Left shoulder,然后点击右边的下箭头按钮,在弹出的菜单中点选Copy Vertex Group,如下图所示:

  1. 接着点亮左上角的Vertex Selection,依次Select Left arm和Right arm的顶点组(选择顺序很重要,总之确保当前选择的是待镜像的权重),如下图所示:

  2. 点击Vertex Groups右边的下箭头,在弹出的菜单栏中点选Mirror Vertex Group,即可发现权重翻转了,但顶点组也发生了变化,如下图所示:

  3. 之后删除顶点组Right arm,将Right arm_copy重命名为Right arm即可。

注:

  • 操作的顶点组不要上锁;

  • 对于不太对称的顶点组,骨骼的权重镜像时也不是完全对称,而且可能会修改顶点组,但一般来说影响不大,只要保证异常顶点的权重为0即可;

  • 效果不太好时,选择1.2节的方法,保证顶点组完全对称,然后手动刷权重。

1.4 关于自动权重(Auto Weights)的注意事项

  1. 自动权重操作前最好保存一个副本,以供出现不可逆错误时可以回溯;

  2. 自动权重的顺序:先选择Mesh,然后是其骨骼;

  3. 自动权重时界面左下角会弹出Make Parent选项卡,注意不要勾选X Mirror,否则会将锁定的顶点组的网格和权重改变;

1.5 使用Bone Groups更高效地管理骨骼

本次实践的对象是手臂骨骼,可以把手臂骨骼按左右手分为Left Hand和Right Hand两部分,方法和Vertex Group几乎一致,只不过Vertex Group是在网格对象(Mesh)的Edit Mode中进行Assign、Remove、Add、Delete等操作,而Bone Groups是在PoseMode中进行这些操作。

它可以帮助我们迅速选择对应的骨骼,并进行一些操作,还可以给不同骨骼组上不同的色,增加区分度。

Bone Groups详情见官方文档。

1.6 如何用Armature Layers(骨架层)将骨骼在视图中分开

本次实践中,骨架层的作用在于将手臂相关的骨骼移动至另一个层中,这样可以避免操作手臂骨骼时对其余骨骼进行误操作,视图也会更干净,提高编辑效率。

笔者大致将骨骼划分至四个层中,分别为手臂骨骼层、武器骨骼层,前臂骨骼层(主要是一些不便于选中但又不太需要选择的骨骼,)和其余骨骼层(避免误操作,所以与手臂分开)。

注:给骨骼分层只是改变了视图的显示,并不会对骨骼的属性或父子关系产生影响。

有关骨架层的介绍,详见此链接

1.7 如何避免拖动武器时,双手紧握枪而不发生除位移之外的其他变化

一般来说会给手腕的骨骼添加一个Copy Rotation Constraints,以复制手IK骨的旋转,但注意这里要用World Space →\rightarrow→ World Space,因为我们不希望在移动武器主骨时,紧握的双手还会受到反向动力学的作用而发生旋转(在IK作用下,世界坐标系下的位移是可能影响局部坐标系下的旋转的)。

这里通过动图展示一下Local Space →\rightarrow→ Local Space 和 World Space →\rightarrow→ World Space的区别:

(a) Local Space to Local Space,此时手掌有旋转,运动不正常 (b) World Space to World Space,此时手掌只有位移,运动正常

2. 感想

笔者不懂美术,之前也从未接触过3D模型动画制作,更不用说骨骼绑定了,学习过程中也在网上找了很多资料,甚至跟着教学视频一步步地照着操作,然而一系列意料之外的问题一次又一次地挫败了我的兴致和信心,尤其是绑定IK、FK骨时,我发现复杂的约束关系会让手的运动十分诡异,于是经历很多次的推倒重来。。。好在都坚持了下来,终于是对IK骨骼绑定有了些感觉,同时熟练了blender的基本操作。

从结果来看,我的7天实践中可能只有最后2天是有效的,然而这个无效过程正是笔者摸索的过程,有时是不可避免的。这一周中我最深刻的感悟如下:

  • 学习新事物时,首先是了解它的基本原理和操作,在此基础上一定要找一些既有的实例去参考,思考其中的设计,并灵活地用在自己的项目中;这样之后才是拓展和创新。如果笔者能尽早参考一个绑好IK骨骼的手臂模型,可能就不至于浪费那么多时间了。

  • 简单有时往往效果更好。笔者一开始是IK、FK骨一并采用,并且给很多骨骼都加了约束,以模拟真实情况,然而手臂的运动非常奇怪(就是1.3节介绍的问题)。当然主要原因是笔者当时不知道是什么原因导致的问题,因此折腾了半天。之后笔者把FK骨及很多不必要的约束去掉,才慢慢发现了问题所在。

  • 做大动作前一定要备份一下,以供发生不可解决的问题时可以回溯。

  • 必要时可以去外网的社区寻找答案(比如Blender Stack Exchange),往往能满足你的需求(国内对blender的讨论比较少,难以找到解决方案)。

3. Next Step

  1. 修正一些不正常的顶点组和权值,至少现在发现蝴蝶结是分离的;

  2. 制作换弹、射击、走(跑)动等动画;

  3. 导入Unity3D,设计角色控制器。

资源 & 参考文献

  • 官方可莉模型资源

  • Leather Gloves FPS手臂blender资源

  • Modern Weapons Pack

  • Blender add-ons - Simple Renaming Panel

  1. 【游戏开发实战】下载原神模型,PMX转FBX,导入到Unity中,卡通渲染,绑定人形动画(附Demo工程)

  2. Blender fbx从ascii格式导入 | 经验摘录

  3. How to rig fps arms and gun in blender 2.8 - YouTube

  4. How to make FPS Animations in Blender 2.8+ - YouTube

  5. Blender绑定模块:为骨骼设置自定义物体(Custom Object)

  6. Blender官方文档-Bone Groups

  7. Blender官方文档-骨骼命名规则

以上是我的实践总结,如有不对的地方,欢迎各位大佬批评指正,如果有更好的解决方案,也在评论区中分享~

【Unity3D】 Blender2.9+二足角色FPS(TPS)手臂的IK骨骼绑定经验总结相关推荐

  1. Maya游戏角色骨骼绑定学习教程

    流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,48.0 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:5.77 GB |时长:6h 24m 向 ...

  2. Unity3D引擎入门搭建一个FPS游戏Demo

    目录 一.unity3d简介(平台,应用范围,经典游戏) 二.界面,基础操作(界面,创建场景,灯光系统,摄像机,组件,脚本语言) 1.界面 2.基本操作 三.demo制作(坐标系统,视角控制,移动,碰 ...

  3. unity3d 人物对话_角色交互任务对话系统Unity游戏素材资源

    游客,您需要回复才可以查看或下载该资源!没有账号?注册 本游戏资料是角色交互任务对话系统Unity游戏素材资源,大小:38 MB ,格式:unitypackage,使用软件:unity2017.4.1 ...

  4. [Unity3D]Unity3D游戏开发之角色控制漫谈

    各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址blog.csdn.net/qinyuanpei.今天呢,我们来说说Unity3D中的角色控制,这篇文章并非关注于Unity3D中的某项 ...

  5. [Unity3D]基础内容之角色移动编

    目录 文章目录 前言 一.Transform组件 1.Position属性: 2.Translate方法: 二.Rigidbody(Rigidbody2D)组件 1.Position属性 2.AddF ...

  6. Unity3d中角色模型和角色名字保持相对位置

    3D游戏中,经常遇到这样的情况.角色模型上需要显示角色名字或者血条等信息. 如果用一个摄像机会有可能出现名字或血条显示不正常等问题,所以我采用两个摄像机.一个渲染名字或血条等UI,另一个渲染角色模型. ...

  7. Unity3D基础38:角色控制器组件

    前文:https://blog.csdn.net/Jaihk662/article/details/87906156(Input控制面板) 一.CharacterController角色控制器 为什么 ...

  8. Unity3D用状态机制作角色控制系统

    为了让读者对本文知识点有一个比较清晰的了解,我制作了一张结构图,如下图,图中以移动为例子简单的描述了状态机的基本结构,本文不对角色控制系统做全面的讲解,只对状态机的在角色控制系统中是如何运用做出讲解. ...

  9. Unity3D 设置帧频及显示FPS

    Application.targetFrameRate 可以指定游戏的运行帧率, -1 让游戏以最快的速度运行. void Awake(){///设置帧频Application.targetFrame ...

最新文章

  1. 结合项目实例 回顾传统设计模式(九)迭代器模式
  2. SpringBoot @Valid各种注解使用说明
  3. SSL与WildFly 8和Undertow
  4. 工作404-判断浏览器函数
  5. 计算并联电阻的阻值(信息学奥赛一本通-T1015)
  6. Debug日志正常,输出和HTML页面乱码
  7. iOS图片高斯模糊处理
  8. CCReportAdv(高级WinCC报表控件)
  9. MapGIS 数据管理——数据管理与显示模型架构
  10. 服务器密码忘记处理之二:重置密码
  11. Python实战 | 使用代理IP刷CSDN博客访问量
  12. JAVA 腾讯企业邮箱发送邮件
  13. (4层)域名系统 DNS
  14. Mybatis-Plus 基础知识点
  15. 用python使用py2neo时候报“ModuleNotFoundError:No module named 'py2neo'”的错误
  16. 16.面向对象-基础
  17. win10搜索框不能用的解决方案
  18. 备考PMP的程序员注意了!!!13张PMPBook思维导图免费送上,没有套路,直接领取
  19. ubuntu 磁盘管理工具 ---- GParted 图形化分区工具
  20. Linux基础,系统概叙与虚拟机搭建+CentOS系统安装(建议收藏)

热门文章

  1. 判断单链表L是否递增
  2. 行测考试--图形推理
  3. 用 Astropy 拟合数据(一)
  4. spark存储模块之内存存储--MemeoryStore
  5. 算力时代加速狂奔,移动云将携手千万开发者并肩同行
  6. 第一章 函数 极限 连续
  7. 如何将PDF中的A3页面裁剪为2个A4的PDF文档?
  8. 宝塔安装授权源码教程
  9. Mac电脑打开Charles后,无法访问网页
  10. 银河麒麟桌面操作系统V10安装过程