|
最近工作中需要在osg系统中使用一点骨骼动画的功能,简单了解了一下osgAnimation和osgCal2,由于osgAnimation目前还不能从max导出,所以最终还是选择了osgCal2(虽然它已经很久不更新了,而cal3d的max导出插件只支持max8,也只能暂时将就用了)。在经历了种种失败后,终于在osgCalViewer中成功看到了期待的人物动画,下面把从网上找到的相关资料和自己的一点经验贴出来,希望可以帮到有同样需要的人
虽然Cal3D用的也算是挺多的,但是很奇怪的是这个项目已经有两三年没有更新了。同时官方文档的描述也很简单,唯一一个官方的教程居然绝大部分篇幅是将如何在3ds max中制作骨骼动画,关键部分如何使用Cal3D插件只有简单的两段话。对于第一次使用Cal3D的人来说肯定会被它搞得一头雾水,而且各个步骤中有一个地方错了都会导致最终的骨骼动画不正确。这里把我试验正确的d导出步骤贴出来:
- 导出骨骼
a. 选择骨骼根节点bip01
b. 打开Figure Mode
c. File->Export Cal3D Skeleton
d. 选择所有骨骼,通常默认即可 - 导出材质
a. 所有纹理必须使用tga格式
b. 选择骨骼根节点bip01
c. 打开Figure Mode
d. 打开材质球,将所有材质命名为material[0], material[1]这样的名称
e. File->Export->Cal3d Materials
f. 选择导出的材质(每一种材质分别需要导出一次) - 导出模型
a. 打开Figure Mode
b. 选择需要被导出的模型
c. File->Export Cal3d Mesh - 导出动作
a. 关闭Figure Mode
b. File->Export Cal3D Animation
c. 选择之前导出的谷歌文件
d. 选择骨骼,默认即可
e. 选择导出动作的起始结束帧号,帧速和displacement(不知道有什么用?) - 创建xxx.cfg文件,格式如下:
scale=1.0
skeleton=skeleton.csf
animation=walk.caf
mesh=worker.cmf
material=mat1.crf 注意事项:
- Cal3D的导出插件只能支持3ds max 8。如果你是用的9或者更高版本,虽然你已经看了不少内容但是你也只能放弃了:(
- 导出时必须严格按照上面所说的顺序依次导出骨骼、材质、模型和动作
- 最后创建的.cfg文件中等号左右不要留空格,否则在某些解析程序中(比如说OsgCal中)会导致错误。这应该算是OsgCal的一个小bug。另外OsgCal要求配置文件中scale, skeleton等的顺序不能变,否则也会出错。
补充一点:
我用的osgCal2,加载cal3d提供的一些示例模型时没有问题,但加载自己从max导出的模型失败,提示找不到插件,而且插件名为osgdb_.dll(可以推断是程序中试图加载无扩展名的文件所致),DEBUG发现是osgCal::Material类的构造函数中有点问题,修改如下,红色的是增加的代码。
if ( prefix == "DiffuseMap:" || prefix == "" )
{
if (suffix == "<none>")
continue;
diffuseMap = concatPaths( dir, suffix );
} |
|