时间:2014-10-28 13:16:23 来源: 复制分享
Model 究竟是什么?它们怎样存在?
Model 可以做很多很多事情, Model 就像一个迷你场景,或者说子场景。基本上,一个 Model 可以包含一个场景所能包含的任何元素。
需要注意的是, Model 不可以包含 Pass、Layer 或者 Library,而往往认为 Pass、Layer、Library 也是场景的一部分。但如果剔除这些特殊的元素,则可以把剩下的部分即 Scene_Root 看作是狭义的场景。假如这样看待,你会发现, Scene_Root 其实根本就是一个 Model ,而我们手工新建的 Model 是这个 Model 的子物体。
这样,已经有了一个粗略的认识了 Model 是一个子场景(或者迷你场景)。
在 XSI 中,Model 分为两类:一类是外部 Model,一类是内部 Model。
外部 Model 独立于场景而存在,存在的形式是 *.emdl 文件,其中“e”代表 Externeal(外部的),mdl 就是 model。在任何场景使用一个外部 Model 时,场景仅仅是简单地引用这个 Model 文件。既然多个不同的场景可以引用同一个外部 Model,自然的,我们利用外部 Model 可以实现数据共享,这对于工作组协同完成任务意义尤为重大。
内部 model 是场景的一部分,一般的,可以存储在场景文件(*.scn)文件的内部,而不单独形成一个文件。
但是,很可能 Model 很复杂,数据量很大,或者场景包含的 Model 数量很多,这时候,*.scn文件会非常庞大,加载和处理都会很不方便。Matrix(骇客帝国)中,单单一个 Sensor 的 Model 文件就达 25MB。打开它需要大约 5 分钟!想像一下,一个 80MB 的 scn 文件,每次加载会有多慢,并且带来的内存开销也将是惊人的。这时候,为了让 *.scn 文件更“苗条”,可以让这个场景所包含的内部 Model 以外部的方式来存贮,并且仅在需要加载的时候才加载这些数据。也正是因为这样,每个内部 Model 的存储选项都有 Internal 和 External 两种。但要记住,不论选择 Internal 合适 External,这个 Model 都是内部 Model。假如一个内部 Model 被迫以 External 方式保存,那么会在对应的场景文件(*.scn)所在的文件夹下出现一个*.mdl 文件(注意,不是*.emdl 文件)。
Model 还有一个关键的特点,只有 Model 可以包含 Mixer - 动画混合器,Mixer 是 XSI 引以为傲的动画工具,是它的非线性动画模块的灵魂。由于我们把 Scene_Root 也看作是一个 Model,那么 Scene_Root 可以包含一个 Mixer 也就不必看作是一种例外了。
典型的,我们用 Model 来做什么?
内部 Model 是场景的一部分,使用上没有特别要求。外部 Model(*.emdl 文件)的使用方法有两类:
一是将其导入场景,变成一个内部 Model,图标为黑色小人。这时候,外部 Model 的数据会完全复制到场景中,即转变为一个内部 Model,场景和该外部 Model 已经没有联系。
二是在场景中通过建立一个叫做 Model Source(Model 源)的对象,来调用这个外部 Model。这才是外部 Model 最重要而典型的用法。这时候,外部 Model 作为这个 Source 的一个“实体”来被场景使用(或者说引用)。并且,由于这时候外部的 Model 文件是被场景内的 Model Source 引用的,我们把这个被引用的外部 Model 叫做 Referenced Model,意为“被引用的 Model”,简称“引用 Model”。
简单地说,在场景中创建了一个 Model Source(源),那么这个源作为一个概念存在,场景可以以外在的一个或多个 emdl 文件为实体来表达这个概念(或者说填充这个源)。
比方说,要创建一个角色叫“Andromeda”,但不确定其实际的造型或者行为,那么可以在场景中建立一个叫“Andromeda”的 Source,之后,你可以让场景使用一个或多个外部 Model(即一个或多个 emdl 文件)来实际呈现这个名叫“Andromeda”的角色。因而,同样是一个叫“Andromeda”的角色,你可以让她看上去像一个迷人的仙子,亦可以让她看上去像一个肥胖的农妇,还可以是身着光彩圣衣的仙女座圣斗士,或者干脆让她(它)变成一个优美的水晶花瓶。
可以很清楚的看到,“Andromeda”(Model Source)是一个概念,也是一个角色。而实际的“仙子”、“胖妇”、“圣斗士”和“花瓶”都会被保存为一个个外部 Model,供“Andromeda”任意选用(引用),它都是实体。
这样一来,场景仅仅是引用这些外部 Model 作为实际展现“Andromeda”时的一个个参考模版,在每一个参考的基础上,都可以分别继续做某些层面的改动,例如添加动画。而每当外部的 Model 文件被修改时,引用这些外部 Model 的场景的内容也会自动得到更新。
例如,建模部门生产了一个机器恐龙的模型,将其导出为一个外部 Model(一个 emdl 文件),立刻,动画部门可以引用这个 emdl 文件,每当建模部门修改恐龙模型,并将其重新导出为外部 Model 覆盖旧有的 emdl 文件时,动画部门也会得到最新的模型,而不丢失任何动画设置。
于是,可以看到,尽管 Model 可以做很多很多事情,但首先,它是一个角色!
换句话说,比较典型的用法是,把一个 Model 当作一个角色看待。当在 XSI 里面建立了一个角色之后,可以把关于这个角色的所有元素(多边形外壳、骨架、组、甚至材质)都包含在一个 Model 里,作为该 Model 的子物体,使得它们被作为一个整体(即一个角色)来看待。
然而,绝不仅仅是父子关系这么简单! Model 比一般的父物体有着更多奇特的功能。首先,显然一般的物体不可以包含组、材质。其次,有了前面阐述的外部 Model 的典型用法,不难想象,XSI 允许你为同一角色(Model Source)应用高中低三种不同的精度的内容(不同的 Referenced Model)。例如,高精度的 Model(精确地说是 Model Source 所采用的高精度的外部 Model)可以有细密精美的网格,繁复的控制骨架、精心设计的纹理、甚至完美的动力学模拟。中等精度的 Model 也许只包含一个少量细节的网格模型、一个粗略的骨架。当然,具体包含些什么,有你自己决定。而低精度 Model,通常的,只需要包含一个示意性的网格即可。当然,具体内容还是有你决定,也许你也愿意为低精度的网格设置一个简易骨架。总之,为一个 Model Source 采用的三种不同精度的外部 Model 建立有区别的内容,以使得同一个 Model Source 能够适用与不同的场合。
最后,应该指出,内部 Model 不可以有不同精度。这一点很自然,因为内部 Model 与 Model Source 不同,内部 Model 本身就既是一个角色,也是这个角色的实体,它是一个具体的事物。同一事物怎么又可能有多个实体呢?
Model Source 的图标一般为深红色小人。这时候说明已经为该 Model Source 加载并在使用一个 Referenced Model。
如果没有为创建好的 Model Source 加载任何外部 Model 作为实体,那么 Model Source 的状态被称为“Off Loaded(未加载状态)”,这时图标将变成粉红色小人。
Model Source(源)可以挂接三种精度的 Reference 有何作用或者说意义?
我们已经详细讨论了外部 Model 的用法被 Model Source 引用,并且,不同的外部 Model 可以同时充当用一 Model Source 的不同精度状态的实体。那么,为同一角色区分三种不同精度的内容有何意义呢?
我们知道,XSI(包括 Maya)是为大型团队合作而设计的软件,至少首先是为大团队设计的。
想象一下,制作一部电影,建模部门需要建立十分精细的模型(角色、环境);动画部门的任务则是为每一个具体的角色调整生动的动作;也许还有一个高级动画部门来承担群体动画或者场景的拼合;更大的团队甚至有专门制作材质和纹理贴图的小组。对于不同的工作环境,同一个角色应当采用不同精度的模型才能提高工作效率。建模部门需要面对十分精细的网格,不停地根据艺术总监的要求进行修改;动画部门需要根据动画导演的意图去调整动画,这时候,很可能高精的网格动画起来是非常消耗资源的,采用高精模型来动画,工作效率将大大降低;群体动画部门需要面对成百上千的数字角色(想一想一场机器人战争或者指环王,当然,指环王的群体动画并不是 XSI 做的),即使处理中等精度的模型也会使得工作进度变得十分缓慢,这时候,他们需要很低进度的模型,只需要示意性的查看整个数字角色群体是否正常的演出即可。
Model Source 正好是应这样一种要求而诞生的。对于同样一个角色,各个部门都采用同一个 Model Source,但却可以在工作组的网络中分发三种精度的 Model 文件(*.emdl 文件),各个部门各自选择需要的模型。在最终完成影片时,由 XSI 自动的管理好各种信息,把高精度的建模信息、精美的角色动画以及恢宏的群体动画结合到一起。很明显, Model 大大的优化了整个工作团队的流程!
Model 仅仅可以用于划分角色的精度吗?
不是的。 Model 还可以从另一个角度去优化整个团队的工作流程,大大提高整体工作效率。
建模部门只需要花半个小时即可以建立好一个低精度的模型,传递给动画部门,建立一个粗略的骨架,然后传递给高级动画部门。立刻,高级动画部门就可以开始制作高级动画了。
与此同时,建模部门继续工作,稍稍多花一点时间,一个带有少量细节的模型诞生了。这个中等精度的 Model 被传递到动画部门,以帮助他们在接下来的工作中进一步的处理细节动画。动画部门也正在试图建立一个复杂的骨架系统,应付各种特殊镜头的需要。同时,这个中等精度的模型可以传递到灯光材质部门,即使不适合立刻开始制作精细的贴图,至少一些简单的灯光的设置工作和基础的材质设计工作已经可以开展了。
最后,建模部门开始花费很可观的时间去建立令人瞠目结舌的网格。个其他几个部门也可以不受影响地追赶自己的deadline。
在大家看的很清楚,只需用花不足一个工作日的时间,若干个部门就开始同时工作了!根本不需要先等待建模部门把所有的模型都创建好,动画部门和视效部门才可以开工作,之后再轮到高级动画部门开工。每当,对任何一个精度的模型有任何修改的时候,其他部门都可以通过 Update(更新、刷新)动作来得到最新的数据,而不影响自己已有的成果。 Model Source 和外部 Model 共同带来的好处不言自明。
Model 对于非团队的工作有何意义呢?
Model 首先是角色,但不仅仅是角色。既然 Model 可以包含几乎任何元素,甚至 Model 还可以包含 Model ,那么它们可以做的事情还很多。首先, Model 可以共享数据。例如让一个 Model 包含一组材质,然后分发这个 Model ,那么这个 Model 工作起来就像是一个材质库,而且可以动态的自动更新!又比如一个CGer制作好了一个完美的粒子系统,由于粒子系统涉及的繁多的参数,通常的方法(例如分发场景文件)很难做到把粒子分发出去而又做到一定程度的灵活性或者保密性。把做好的粒子系统包含在一个 Model 里面,可以变通的元素或者需要隐藏的细节可以不放进 Model 。那么你完全可以生成奇妙的一个粒子库!