4698to 发表于 2020-8-2 18:24

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

## 1.0- 3ds MAX 中的拉伸效果



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



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


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



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

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



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



注意以上截图中,动画都是一样的,从一个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之类的。



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

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




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

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


缩放控制表达式

    ,boneMax.stretchTM ,boneMax.stretchTM ]

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


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


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

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


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

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



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

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

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

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



原始动画


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






参考资料

*   [Tutorial - How to export stretchy bones from 3ds max to unity]

*   [Stretchy Bones Converter]

*   

*   [Unity_Forums - Importing scaled bones animation]



白菜菌 发表于 2022-4-23 13:47

谢谢谢

一塔西 发表于 2021-7-28 22:40

火钳刘明

吃鱼的猫。 发表于 2021-7-28 18:31

求这个拉伸转缩放工具,哈哈

yangzx8411 发表于 2021-7-28 18:11

4698to 发表于 2021-7-26 20:58
文章写的这么清楚了,还问缩放怎么导引擎,算是我白写
导入 UNITY动作整体没问题,就是有那么几贞缩放的地方产生了非正常的缩放,导致模型都拉伸了。总之谢谢你,贴子很棒。

4698to 发表于 2021-7-26 20:58

yangzx8411 发表于 2021-7-26 15:22
大佬 ,CS有缩放导入UNITY中有好的办法吗, constraint 约束节点UNITY中有类似的不?

文章写的这么清楚了,还问缩放怎么导引擎,算是我白写

yangzx8411 发表于 2021-7-26 15:22

大佬 ,CS有缩放导入UNITY中有好的办法吗, constraint 约束节点UNITY中有类似的不?

Lollipop薰 发表于 2021-4-21 11:20

好帖讲的很清楚明白

素真 发表于 2020-10-15 11:34

牛B

CGQueen 发表于 2020-9-28 14:32

干货
页: [1]
查看完整版本: 游戏引擎中的动画拉伸效果怎么做?- 上篇