最近要做一个3d引擎的动画性能测试,所以得为各个引擎导出骨骼动画,其中就包括使用了Cal3D的Crystal Space和OSG。其中Crystal Space本身就可以直接读取Cal3D的骨骼动画,而OSG则是得是用一个名为OsgCal的插件才可以。此外在网上还看到有人在Ogre中使用Cal3D来渲染骨骼动画。

虽然Cal3D用的也算是挺多的,但是很奇怪的是这个项目已经有两三年没有更新了。同时官方文档的描述也很简单,唯一一个官方的教程居然绝大部分篇幅是将如何在3ds max中制作骨骼动画,关键部分如何使用Cal3D插件只有简单的两段话。对于第一次使用Cal3D的人来说肯定会被它搞得一头雾水,而且各个步骤中有一个地方错了都会导致最终的骨骼动画不正确。这里把我试验正确的d导出步骤贴出来:

  1. 导出骨骼
    a. 选择骨骼根节点bip01
    b. 打开Figure Mode
    c. File->Export Cal3D Skeleton
    d. 选择所有骨骼,通常默认即可
  2. 导出材质
    a. 所有纹理必须使用tga格式
    b. 选择骨骼根节点bip01
    c. 打开Figure Mode
    d. 打开材质球,将所有材质命名为material[0], material[1]这样的名称
    e. File->Export->Cal3d Materials
    f. 选择导出的材质(每一种材质分别需要导出一次)
  3. 导出模型
    a. 打开Figure Mode
    b. 选择需要被导出的模型
    c. File->Export Cal3d Mesh
  4. 导出动作
    a. 关闭Figure Mode
    b. File->Export Cal3D Animation
    c. 选择之前导出的谷歌文件
    d. 选择骨骼,默认即可
    e. 选择导出动作的起始结束帧号,帧速和displacement(不知道有什么用?)
  5. 创建xxx.cfg文件,格式如下:

scale=0.1

skeleton=skeleton.csf

animation=running.caf

material=material.crf

注意事项:

  1. Cal3D的导出插件只能支持3ds max 8。如果你是用的9或者更高版本,虽然你已经看了不少内容但是你也只能放弃了:(
  2. 导出时必须严格按照上面所说的顺序依次导出骨骼、材质、模型和动作
  3. 最后创建的.cfg文件中等号左右不要留空格,否则在某些解析程序中(比如说OsgCal中)会导致错误。这应该算是OsgCal的一个小bug。另外OsgCal要求配置文件中scale, skeleton等的顺序不能变,否则也会出错。