2019独角兽企业重金招聘Python工程师标准>>>
ogre 的作为开源界最好的图像渲染引擎,被很多游戏使用,比较有名的一款arpg 火炬之光,使用的就是ogre。
围绕ogre有很多第三方开发的插件,其中比较著名的有一个 粒子系统,还有一个叫做CEGUI的UI系统。 我在很多别的游戏源码中都看到了克隆这个粒子系统的影子~ 例如unity上面有一款xffect特效插件,以及gameloft开发的地牢猎手游戏里面的粒子系统。
不过今天主要关注的时ogre的模型导入,包括mesh的导入,骨骼动画的导入和材质的导入。
准备工作包括搜集ogre模型资源,这个暂时借用火炬之光的模型资源,这套资源制作精良,资源完备,非常适合练手。 接着需要搜索一下是否有别人已经做过类似工具了。在google上面主要搜到两个工程,都是将ogre模型导入到blender中的,其中一个只支持模型和贴图导入,另外一个支持骨骼导入,不过可惜两个工具年代久远,已经不能在当前版本的blender上面正常工作了。
接下来指定目标计划: 1 首先参考第一个工具,结合当前blender API,重写一个工具支持模型和贴图导入; 2 参考第二个工具,写骨骼动画的导入 3 根据自身需求,增加一些其它功能
模型和贴图导入比较简单,模型主要就是顶点坐标和uv坐标以及 face网格的导入, 基本上属于简单的 数据读取。
骨骼比较麻烦一些,首先3d游戏骨骼系统分为两种, 1基于bone的 2 基于joint的
blender 建模中采用的是基于bone的模型,bone 对照人体骨骼来讲就是 骨骼的棍状部分,有长度等属性,在棍子的两头有joint部分,负责连接不同的bone。 ogre中使用的是joint,一个joint连接两个bone。
如何将joint系统转化为bone系统着实费了一些脑细胞。其实原理很简单,joint可以看做是一个个小的bone,这些bone的长度对系统没有影响, joint 之间通过父子 关系建立连接。
这样就非常简单的将 ogre里面的骨骼系统转化成了blender的骨骼系统了。
后面导入骨骼动画,主要麻烦在于区分 局部坐标和世界坐标中的骨骼变换。 blender中有个pose模式,在这个模式下面,调整每个骨骼位置,然后插入关键帧, 最后就可以做出一个动画了。
最后将模型导出为fbx 就可以在其它工具中使用了。
当然如果没有上面两个工具作为参考,我是很难想到的~
代码附上 https://gist.github.com/liyonghelpme/e64b88d6ebb93ca90e20
这个是最新版本的代码:
http://git.oschina.net/liyonghelpme/blenderOgre
blender使用 2.74版本
注意修改代码的导出log路径 以及 要使用 ogre command tool 这个工具的路径
脚本中会操作:
1:ogre command tool 转化.mesh文件 为 xml
2:脚本将 .xml 和 骨骼导入
3:脚本将导入的对象导出为 fbx 模型 放到 对应目录的fbx 子目录下