软骨编辑器
1. 作用及简介
软骨功能提供了一种基于物理模拟的驱动骨骼运动的方法,该功能独立于物理系统,是一个简化版的物理模拟。软骨功能的实现基于两个要素:
是指定一串相互连接的骨骼为软骨,作用是通过一定的物理公式,使其具有动态效果;
是指定附着于骨骼之上的骨骼碰撞体,作用是防止软骨与模型发生穿模现象。
其中,软骨保存为.softske文件,骨骼碰状体保存于模型自带的ske文件中。
补充:模型的骨架信息需要美术同学在3DsMax等建模软件中创建,而制作好的模型若需要软骨属性信息和骨骼碰撞体属性信息,需在软骨编辑器中完成。
2. 编辑器界面概述
2.1. 进入软骨编辑器
用户可由主编辑器菜单栏上的“窗口”-“软骨编辑器”进入软骨编辑器,如下图:
2.2. 软骨编辑器界面
编辑器主界面主要分成五部分:工具栏、骨骼节点列表、预览区、属性栏,动画资产列表
- 工具栏
- :打开一个mdl文件,进入编辑骨骼碰撞体模式
- :打开一个mdl文件,进入编辑软骨模式
- :仅编辑软骨模式有效,打开一个已有的softske文件
- :保存当前编辑文件,如在编辑骨骼碰撞体体模式,则保存ske文件,如在编辑软骨模式,则保存softske文件
- :仅编辑软骨模式有效,仅用于预览。设定当前打开的软骨是否与自身模型的骨骼碰撞体起作用。
- :打开曲线编辑其,编辑curve文件,可应用于软骨参数。
- 骨骼节点列表 骨骼节点列表展示当前模型的骨骼信息,同时用于添加\删除骨骼碰状体和指定\取消软骨。
- 预览区 预览区展示当前模型的渲染效果,同时可以显示骨骼碰撞体和软骨的包围球。
- 属性栏 用于编辑骨骼碰状体和软骨的参数
- 动画资产列表 展示当前模型所有的动画资产,可以播放动画,查看软骨动态效果。
3. 骨骼碰撞体工作流
骨骼碰撞体的作用是通过指定模型上的一个或多个碰撞体,防止软骨运动后出现穿模现象,下面以一个实际例子来演示骨骼碰撞体的作用(样例模型来自网络,侵删):
- 用户点击 按钮,选择一个mdl文件打开,进入编辑骨骼碰撞体模式,如下图:
- 用户分析模型特点,选定需要添加碰撞体的骨骼,要求是数量尽可能少,同时能够覆盖所有可能的穿模处,由于本模型的软骨(头发)部分较大,可能与模型多处产生交叉,因此最终选定需要添加骨骼碰撞体的骨骼为: Bip001 Spine01 Bip001 Head Bip001 L UpperArm Bip001 R UpperArm Bip001 L Forearm Bip001 R Forearm Bip001 L Thigh Bip001 R Thigh Bip001 L Calf Bip001 R Calf 下面以Bip001 Head和Bip001 Spine01为例,展示编辑过程。
- 选择Bip001 Head节点,右击,弹出“添加碰撞体”菜单,点击,如下图:
- 此时骨骼树上出现了1个红色节点,表示添加的骨骼碰撞体,点击后在右侧显示碰撞体的属性,如下图: 其中位置,旋转表示碰撞体在骨骼控件的相对坐标,半径与高度表示胶囊体的半径和两球心之间的距离,外部约束选中表示胶囊体会把软骨限制在外部,取消则表示限制在内部。
- 勾选上“渲染选项”中的渲染碰撞体按钮,编辑参数,如下图,注意到高度值为0,此时碰撞体是一个球形,适用与头部等接近球体的部位。
- 选择Bip001 Spine01,右击,弹出“添加碰撞体”菜单,点击,按照同样的方式编辑参数,需要注意的是,身体因为比较细长,需要通过调整高度和旋转参数使其完全包裹住身体,如下图:
- 按照步骤,依次编辑好所有的骨骼碰撞体,如下图:
- 此时,骨骼碰撞体已经编辑完毕,点击保存按钮,完成编辑。
4. 软骨流程
紧接着上一个例子,我们继续编辑同一个模型上的软骨。需要注意的是,在某些应用场景中(挂点、换装),骨骼碰撞体和软骨往往不是针对同一个模型而制作。
- 用户点击 按钮,选择一个mdl文件打开,进入编辑软骨模式,如下图:
- 用户分析模型特点,选择需要指定为软骨的根节点,本模型中,头发需要有动态效果,因此选择头发根部的Bone004为软骨根节点。选择该节点,右击,弹出“添加软骨”菜单,点击,如下图:
- 此时,Bone004及其所有子骨骼被设定为软骨,以蓝色表示。点击后在右侧显示该串软骨的属性,如果勾选了渲染软骨选项,还会在预览窗口中显示软骨的碰撞体,如下图:
- 软骨的属性主要有:
阻尼:骨骼运动的能力,左图阻尼=0.1,中图阻尼=0.5,右图阻尼=1.0
弹力:将每个骨骼返回到原始位置的力,左图弹力=0.1,中图弹力=0.5,右图弹力=1.0
刚度: 骨骼保持原始位置的能力,左图刚度=0.1,中图刚度=0.5,右图刚度=1.0
惰性: 软骨跟随角色位置移动的能力,左图惰性=0.1,中图惰性=0.5,右图惰性=1.0
半径:每个软骨的碰撞体大小(每个软骨也有一个碰撞体,与上文的骨骼碰撞体不是一个概念,软骨碰撞体与骨骼碰撞体之间会互相碰撞,防止软骨穿模) 阻尼/弹力/刚度/惰性/半径曲线:这5个属性分别有一条曲线与之对应,用途是指定一串软骨由根部到稍部的数值变化,其中,曲线横轴的0表示根部,横轴的1表示稍部。最终每个软骨属性的具体值=属性值*曲线插值得到的值 末端长度:如果不为零,则在变换层次结构的末尾生成额外的骨骼,将在此长度上乘以最后两个骨头的距离。 更新频率:骨骼的更新频率,如果为0则每帧更新一次,单位次数/s 末端偏移:如果不为零,则在变换层次结束时生成额外的骨骼,offset是局部空间的偏移。 重力:世界空间的重力 附加力:世界空间的附加力 是否随距离失效:摄像机离物体一定距离后,软骨效果是否自动失效 失效距离:摄像机离物体多远后软骨效果自动失效 碰撞体骨骼:与绑定模型上哪些骨骼碰撞体进行碰撞
补充:新版本添加了面碰撞属性
-
开启面碰撞,软骨的碰撞范围由3d变为2d,可设置相应的面碰撞属性使软骨的碰撞范围更加贴合近似平面的模型。
按照步骤,依次编辑好所有的软骨参数,保存。
- 注意事项:可以添加多条软骨,但软骨之间不能有父子关系,同时所有软骨骨骼数量不能超过40
5. 曲线编辑流程
上文提到,软骨参数中有5个参数可以选择曲线.软骨编辑器提供了曲线编辑功能,用户点击按钮,打开曲线编辑器,可以编辑与保存曲线文件(扩展名.fcurve),编辑好的曲线可直接应用于曲线参数。 曲线的编辑方法与引擎其他地方相同,此处不再进行说明。
6. 效果预览
编辑完成后,可以在动画资产列表中选择一个动画资产,双击进行播放,预览效果,如下图: