|
地板

楼主 |
发表于 2011-6-26 11:55:24
|
只看该作者
第 4 部份 模型与动画,细节级别
1.角色建模与动画
你的角色模型在屏幕上看起来怎么样,怎样容易创建它们,纹理,以及动画对于现代游戏试图完成的`消 除不可信`因素来说至关重要。角色模型系统逐渐变得复杂起来,包括较高的多边形数量模型,和让模型在 屏幕上移动的更好方式。
如今你需要一个骨骼模型系统,有骨架和网格细节层次,单个顶点骨架的评估,骨架动画忽略,以及 比赛中停留的角度忽略。而这些甚至还没有开始涉及一些你能做的很好的事情,像动画混合,骨架反向运 动学(IK),和单个骨架限制,以及相片真实感的纹理。这个清单还能够继续列下去。但是真的,在用专 业行话说了所有这些以后,我们在这里真正谈论的是什么呢?让我们看看。
让我们定义一个基于网格的系统和一个骨骼动画系统作为开始。在基于网格的系统,对于每一个动画 幀,你要定义模型网格的每个点在世界中的位置。举例来说,你有一个包含 200 个多边形的手的模型, 有 300个顶点(注意,在顶点和多边形之间通常并不是 3个对 1个的关系,因为大量多边形时常共享顶点–使用条形和扇形,你能大幅减少顶点数量)。如果动画有 10幀,那么你就需要在内存中有 300个顶点 位置的数据。 总共有 300x10=3000顶点,每个顶点由 x,y,z和颜色/alpha信息组成。你能看见这 个增长起来是多么的快。QuakeI,II和 III都使用了这种系统,这种系统确实有动态变形网格的能力,比 如使裙子摆动,或者让头发飘动。
相比之下,在骨骼动画系统,网格是由骨架组成的骨骼(骨架是你运动的对象)。 网格顶点和骨架本 身相关,所以它们在模型中的位置都是相对于骨架,而不是网格代表每个顶点在世界中的位置。因此,如
果你移动骨架,组成多边形的顶点的位置也相应改变。这意谓着你只必须使骨骼运动,典型情况大约有30个左右的骨架—很明显极大地节省了内存。
2.骨骼动画附加的好处
骨骼动画的另一个优点是能够根据影响顶点的一些骨架来分别“估价” 每个顶点。例如,双臂的骨 架运动,肩,脖子而且甚至躯干都能在肩中影响网格。当你移动躯干的时候,网格就活像一个角色一样移 动。总的效果是 3D角色能够实现的动画更加流畅和可信,且需要更少的内存。每个人都赢了。
当然这里的缺点是,如果你想要使有机的东西运动且很好,比如说头发,或者披肩,为了让它看起来 自然,你最后不得不在里面放置数量惊人的骨架,这会抬高一些处理时间。
基于骨骼的系统能带给你的一些其他事情是‘忽略’特定层次骨架的能力 --说,"我不关心动画想要 对这块骨架所做的事情,我想要让它指向世界中的一个特定点"。这很棒。你能让模型着眼于世界中的事 件,或者使他们的脚在他们站着的地面保持水平。这一切非常微妙,但它可以帮助带给场景附加的真实感。
在骨骼系统,你甚至可以指定"我需要把这个特别的动画用於模型的腿,而一个不同的携枪或射击动 画在模型躯干上播放,且那家伙(角色)叫喊的不同动画效果在模型的头部播放"。非常妙。Ghoul2(在 SoldierofFortuneII oubleHelixandJediKnightI:Outcast中使用了 Raven的动画系统 )拥有所 有这些好东西,且特别被设计为允许程序员使用所有这些忽略能力。这对动画的节省像你一样难以相信。 像你一样的动画上的这次救援不相信.Raven有一个角色行走的动画和一个站立开火的动画,并在它同时 行走和开火形下把这两个动画合并,而不是需要一个动画表示角色行走并开火。
3.MoreSkeletonsintheCloset
先前描述的效果可以通过具有层次的骨骼系统来完成。这是什么意思呢?意思是每块骨架实际上的位 置相对于它的父亲,而不是每个骨架直接位于空间中的地方。这意谓着如果你移动父亲骨架,那么它所有的子孙骨架也跟着移动,在代码上不需要任何额外的努力。这是让你能够在任何骨架层次改变动画,而且通过骨骼其余部分向下传递的东西。
创建一个没有层次的骨骼系统是可能的 --但那时你不能忽略一个骨架并且预期它工作。你所看到的 只是身体上的一个骨架开始了新动画,除非你实现了某种‘向下传递信息’的系统,否则在该骨架下面的 其它骨架保持原来的动画。首先由一个层次系统开始,你就自动地获得这些效果。
许多今天的动画系统中正开始出现一些比较新的特征,如动画混合,从一个正在播放的动画转变到另 外一个动画需要经过一小段时间,而不是立即从一个动画突然转变到另外一个。举例来说,你有个角色在 行走,然后他停了下来。你不是仅仅突然地转变动画,让他的腿和脚停在无效位置,而是一秒钟混合一半, 这样脚似乎自然地移到了新的动画。不能够过高的评价这种效果 --混合是一个微妙的事情,但如果正确的 运用,它真的有些差别。
4.反向运动学
反向运动学 (IK)是被许多人们丢弃的一个专业术语,对它的真实含义没有多少概念。IK 是如今游戏 里面一个相对比较新的系统。使用 IK ,程序员能够移动一只手,或一条腿,模型的其余关节自动重新定 位,因此模型被正确定向。而且有模型的关节新位置的其馀者他们自己,因此模型正确的被定向。比如, 你将会说,"好,手 ,去拾起桌子上的那个杯子"并指出杯子在世界中的位置。手就会移动到那里,且它后面 的身体会调节其自身以便双臂移动,身体适当弯曲,等等。
也有和 IK相反的事情,叫做前向运动学,本质上与 IK 工作的次序相反。想像一只手,手附着在手臂 上,手臂附着在身体上。现在想像你重重地击中了身体。通常手臂像连迦般抽动,且手臂末梢的手随之振 动。 IK 能够移动身体,并让其余的四肢自己以真实的方式移动。基本上它需要动画师设定每种工作的大 量信息 --像关节所能通过的运动范围,如果一块骨架前面的骨架移动,那么这块骨架将移动多少百分比,等等。和它现在一样,尽管很好,它是一个很大的处理问题,不用它你可以有不同的动画组合而脱身。值得注意的是,真正的 IK 解决办法需要一个层次骨骼系统而不是一个模型空间系统 --否则它们都耗时太多 以致无法恰当地计算每个骨架。
5.LOD几何系统
最后,我们应当快速讨论一下与缩放模型几何复杂度相关的细节级(LOD)系统(与讨论 MIP映射时 使用的 LOD相对照)。假定如今绝大多数 PC游戏支持的处理器速度的巨大范围,以及你可能渲染的任何 给定可视场景的动态性质(在屏幕上有一个角色还是 12个?), 你通常需要一些系统来处理这样的情况, 比如,当系统接近极限试图同时在屏幕上绘制出 12个角色,每个角色有 3,000个多边形,并维持现实的 幀速率。 LOD 被设计来协助这样的情景中。最基本的情况,它是在任何给定时间动态地改变你在屏幕上 绘制的角色的多边形数量的能力。面对现实吧,当一个角色走远,也许只有十个屏幕像素高度,你真的不 需要 3000个多边形来渲染这个角色 --或许 300个就够了,而且你很难分辨出差别。
一些 LOD 系统将会需要你建立模型的多个版本,而且他们将会依靠模型离观察者的接近程度来改变 屏幕上的 LOD级别, 以及多少个多边形正被同时显示。更加复杂的系统实际上将会动态地减少屏幕上的 多边形数量,在任何给定时间,任何给定的角色,动态地 --Messiah和 Sacrifice包括了这种风格的技术, 尽管在 CPU 方面并不便宜。你必须确信,与首先简单地渲染整个事物相比,你的 LOD 系统没有花较多 的时间计算出要渲染那些多边形(或不渲染)。 任一方式都将会工作,由于如今我们试图要在屏幕上绘制
的多边形数量,这是件非常必要的事情。注意, DX9就会支持硬件执行的自适应几何缩放(tessellation)。
|
|