`
izuoyan
  • 浏览: 8945741 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

模型动画系统设计的一些心得

阅读更多

模型动画系统设计的一些心得:

模型系统是一个渲染引擎里的重要组成部分。它的质量直接关系到引擎的渲染效率,和开发效率。

我觉得评价一个模型系统主要包含两个方面:
一: 算法。
算法这东西其实是挺透明的。网上到处可以找到这些东西的资料。其中比较有用的技术有:骨骼动画,表情动画,材质动画,布料(柔体)系统等。这些东西没什么好讲的。讲也讲不过各位大大。

二:系统设计。
系统设计一般是做工程人的才会考虑。网上这方面的资料相对就少的多。这段时间我一直在做角色系统,花的时间最多也就是这块。我总结出一些初步想法。列在下面。请大家提意见。
我的设计目标是一个灵活,两个简单。
1: 美术策划使用我这个模型系统简单(导出模型简单,策划程序在组织整个游戏的数据的时候简单)。
2: 程序员在使用这个模型系统的时候简单。
3: 自己在以后扩展系统的时候灵活。比如能够方便的集成一些新的算法如IK动画之类的。


根据以上三个部分,我将我的模型系统分成以下几个部分。
一:数据组织模块:
二:数据呈现模块:
三:数据控制模块:
四:数据加工模块:(尤其感谢宋L疆的modifier的尝试,给了我做这个模块的信心)

1):数据组织模块.
目前我仅仅完成了数据组织模块。我认为所有的模型系统的资源(Mesh,skeleton , action data等)都应该有资源管理器来统一调度。比如一个模型里有多个Mesh,多个action。那么这些Mesh,action都应该有对应的管理器来管理。
同时,我认为,所有的资源能灵活的组合起来。比如你可以往一个Model里加入不同的Mesh。加入不同的Action。并能把这些Mesh绑定到特定的骨架上面。

所以我加入了以下的Resource manager:
CoreMesh Manager: 所有的Mesh都从这里加载 (CoreMesh和Mesh的分别为一个是数据,
一个是可以直接面向用户的对象)
Action Manager : 所有的动作都从这里加载。
CoreModel Mananager : CoreModel里保存了骨架等信息
Model Manager : 管理对应的Model,Model由Mesh,CoreModel,Action等组成。
以上四个管理器能做到从打包/非打包的文件系统里加载任何需要的资料。
接口上,用法为:
XModelManager modelMgr;
HXModel hModel = modelMgr.loadModel("actor",false);
hModel->addMesh(modelMgr.loadMesh("dress/red_cloth" , "actor");
或者如下(加载一个完整的模型)
XModelManager modelMgr;
HXModel hModel = modelMgr.loadModel("npcWolf",true);

2) 数据加工模块.
也就是老宋现在的vModifier系统。
CoreMesh/CoreModel里保存了模型的数据。vModifier对这些数据进行修改(CPU或者GPU的)。
然后产生一个新的容纳数据的对象xMeshObject.

3) 数据呈现模块.(似乎这块不完全属于模型系统)
该模块负责和渲染器的材质系统进行接口,从Modifier的堆栈里把加工过的最终xMeshObject取出来,然后根据附加载模型上的材质,来生成一个或者多个xDrawElement丢到渲染器里进行渲染。

4) 模型的控制模块.
到以上模块为止,模型还没有动作的概念。数据控制模块负责对骨架之类的进行控制。主要分以下几类。
(a)骨架控制:能用动作数据来混合骨架,配合SkinModifier来完成骨骼动画。
并能完成走帧,动作过渡,动作融合等。
(b)顶点动画的控制,如果Mesh是一个顶点动画,那么这个控制器可以控制顶点动画的走帧等功能。
(c)表情动画控制。
(d)柔体的计算控制,似乎也可以用一个对应的柔体计算的修改器。

暂时能想到的就这些。今天把一个静态模型的加载到管理的代码基本写通能运行了。看来第一块数据组织基本已经通过了。有什么意见欢迎大家提给我,争取在下面几个模块能做的好用一点。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics