开启左侧

[教程] 游戏引擎中的动画拉伸效果怎么做?- 上篇

  [复制链接]
## 1.0  - 3ds MAX 中的拉伸效果

004-1596354445726.png



创建一根骨骼 ,在尾骨处创建一个Help ,然后把尾骨位置约束到这个help ,再把这一节骨骼注视约束到这help ,就完成了一个基础拉伸结构

lashen006.gif



下图就是一个用这种方法创建的拉伸绑定,一个球,三节骨骼,都是Bone骨骼的默认拉伸效果,没有做缩放处理的。

lashen002.gif


在来看下直接导出FBX资源后在Ue4 引擎中的效果

lashen003.gif



这里是录屏GIF,而且动画比较简单,所以对比不太明显,但是能看出来蒙皮效果差别还是很大的。


下图是处理骨骼结构和缩放之后的动画效果。

lashen005.gif



同是第11帧两者蒙皮变形效果对比:


004-1596356120638.png 004-1596355495143.png 004-1596355389779.png


注意以上截图中,动画都是一样的,从一个MAX文件导出的,只是一个是正常的一级链一级的骨骼链接层级,另一种是打断链接的平级骨骼链。


----


## 1.1 - 为什么3ds MAX里拉伸缩放效果到引擎之后就出问题呢?


### 1.2 - 拉伸


因为游戏引擎不支持3ds max 中的Bone骨骼链拉伸效果,这个拉伸效果FBX也导不出来。


为什么? 因为Bone骨骼的那种用后一节骨骼位置来控制前一节骨骼的拉伸效果他不是缩放,(bone骨骼拉伸属性 Bone.stretchTM)  所以在导出FBX资源之后,你在MAX看到的那节拉伸骨骼其实是没有缩放动画的,只有后一节骨骼的位移动画。


### 1.3 - 缩放


那为什么Biped骨骼的缩放动画,导出FBX到引擎也会出问题呢?


Biped骨骼添加缩放控制之后,虽然在MAX里,父级骨骼的缩放是不影响子级骨骼,但是在引擎里,父级骨骼的缩放是会影响子级骨骼的,当然了 Bone骨骼也是一样的,这涉及到引擎里骨骼动画计算方式,这里不提。


----


## 2.0 - 那些游戏里的拉伸效果是怎么做的?


*   从骨骼结构入手,总用最后一节骨骼缩放,不用Bone骨骼的拉伸效果,另寻方法用缩放拉伸效果。


*   引擎里后处理骨骼动画再实现。



### 2.1 - 打断骨骼链


所有骨骼都是平级的,只有一个BoneRoot根骨骼,这样缩放的总是骨骼链的最后一节骨骼,绝对不影响子级骨骼了,不管你怎么缩放那肯定是没问题的,而且Biped主体骨骼是可以随意改变链接关系的,也不会影响动画,当然这样做之后,在引擎里肯定是没法使用Ik之类的。

004-1596359281640.png



### 2.2 - 再加一节骨骼,


主体骨骼结构还是正常的,但是给每节需要缩放的骨骼再加一个子骨骼,蒙皮也从主骨骼上替换到这个子骨骼上,这样主骨骼负责主要动画,用这个子骨骼来缩放拉伸。

004-1596359574168.png




### 2.3 - 用Bone的拉伸控制另一根骨骼的缩放


将需要缩放骨骼的缩放控制改为  scale script . 创建一个变量boneMax ,把该变量指认为那根拉伸的骨骼,然后填上表达式即可, 具体操作如下图。

004-1596360977318.png


缩放控制表达式


    [boneMax.stretchTM [1] [1],boneMax.stretchTM [2] [2],boneMax.stretchTM [3] [3]]


当然了这种不能保持体积的缩放拉伸效果也不太好,但是一般用用也是不错了,更复杂的保持体积拉伸这里就不说了。



### 2.4 - Bone拉伸转缩放工具

004-1596361806648.png


先选择需要转换的骨骼(pick bones),再选择蒙皮的模型(pick skinned object)。然后点 转换(Convert and reskin )


会直接创建新的骨骼替换旧骨骼并且自动替换蒙皮权重。但是会改变链接关系,骨骼结构会变成平级结构的,动画不变。



### 2.5 - UE4 缩放动画约束


直接在动画蓝图中使用  constraint 约束节点,锁定不需要缩放的骨骼,可以避免骨骼受到父骨骼的缩放影响。


004-1596452761253.png


Bone to Modify : 即需要锁定缩放的骨骼 受约束对象。


Target Bone : 约束的目标,选一个全程无缩放的骨骼。


其他设置自己可以测试下(我也没用过,不太清楚其他参数)


我这个案例动画是缩放了 spine_01 第一节脊椎,所以我选 pelvis 盆骨 为目标,第二节脊椎 spine_02 为约束对象,就可以让 spine_02 的缩放是跟着 pelvis 的,而不是他的父级骨骼 spine_01 。这样就实现了父级骨骼缩放但是不会缩放子级骨骼。在不更改骨骼层级关系的情况下实现缩放拉伸。


004-1596452674700.png


原始动画

lashen009.gif


加了约束节点之后的动画效果

lashen008.gif


StretchyBonesTutorial.rar 已购买

603.17 KB 售价: 2 张CG券
下载

StretchyBonesConverter.ms 已购买

4.13 KB 售价: 2 张CG券
下载



参考资料












点击标签,内容一促即达。

4698to
https://github.com/4698to  邮箱联系:738746223@qq.com
江西省
其他作品 (23)

游戏引擎中的动画拉伸效果怎么做?- 上篇

3503 9 3年前
您需要登录后才可以回帖 登录

全部评论
干货
3年前 回复
牛B
3年前 回复
好帖  讲的很清楚明白
2年前 回复
大佬 ,CS有缩放导入UNITY中有好的办法吗, constraint 约束节点UNITY中有类似的不?
2年前 回复
yangzx8411 发表于 2021-7-26 15:22
大佬 ,CS有缩放导入UNITY中有好的办法吗, constraint 约束节点UNITY中有类似的不?

文章写的这么清楚了,还问缩放怎么导引擎,算是我白写
2年前 回复
4698to 发表于 2021-7-26 20:58
文章写的这么清楚了,还问缩放怎么导引擎,算是我白写

导入 UNITY动作整体没问题,就是有那么几贞缩放的地方产生了非正常的缩放,导致模型都拉伸了。总之谢谢你,贴子很棒。
2年前 回复
求这个拉伸转缩放工具,哈哈
2年前 回复
火钳刘明
2年前 回复
谢谢谢
1年前 回复
没有更多评论了
快速回复 返回顶部 返回列表