游戏引擎:游戏引擎剖析( 4)

原文作者:Jake Simpson
译者: 向海
Email:[email protected]  


第4部份: 模型和动画细节级别


角色建模和动画
  你角色模型在屏幕上看起来如何样,怎样容易创建它们,纹理,以及动画对于现代游戏试图完成`消除不可信`原因来说至关重要角色模型系统逐渐变得复杂起来, 包括较高多边形数量模型, 和让模型在屏幕上移动更好方式

  如今你需要个骨骼模型系统有骨架和网格细节层次单个顶点骨架评估骨架动画忽略以及比赛中停留角度忽略而这些甚至还没有开始涉及些你能做很好事情像动画混合骨架反向运动学(IK)和单个骨架限制以及相片真实感纹理这个清单还能够继续列下去但是真在用专业行话说了所有这些以后我们在这里真正谈论是什么呢?让我们看看  

  让我们定义个基于网格系统和个骨骼动画系统作为开始在基于网格系统对于每个动画幀你要定义模型网格每个点在世界中位置举例来说你有个包含200 个多边形模型有 300 个顶点(注意在顶点和多边形的间通常并不是3个对1个关系大量多边形时常共享顶点 – 使用条形和扇形你能大幅减少顶点数量)如果动画有 10 幀那么你就需要在内存中有300个顶点位置数据 总共有300 x 10 = 3000 顶点每个顶点由xyz和颜色/alpha信息组成你能看见这个增长起来是多么Quake III和 III 都使用了这种系统这种系统确实有动态变形网格能力比如使裙子摆动或者让头发飘动

  相比的下在骨骼动画系统网格是由骨架组成骨骼( 骨架是你运动对象) 网格顶点和骨架本身相关所以它们在模型中位置都是相对于骨架而不是网格代表每个顶点在世界中位置因此如果你移动骨架组成多边形顶点位置也相应改变这意谓着你只必须使骨骼运动典型情况大约有 50 个左右骨架—很明显极大地节省了内存


骨骼动画附加好处
  骨骼动画个优点是能够根据影响顶点些骨架来分别“估价” 每个顶点例如双臂骨架运动脖子而且甚至躯干都能在肩中影响网格当你移动躯干时候网格就活像个角色样移动效果是3D角色能够实现动画更加流畅和可信且需要更少内存每个人都赢了  

  当然这里缺点是如果你想要使有机东西运动且很好比如说头发或者披肩为了让它看起来自然你最后不得不在里面放置数量惊人骨架这会抬高些处理时间  

  基于骨骼系统能带给你些其他事情是‘忽略’特定层次骨架能力 -- 说,"我不关心动画想要对这块骨架所做事情我想要让它指向世界中个特定点"这很棒你能让模型着眼于世界中事件或者使他们脚在他们站着地面保持水平切非常微妙但它可以帮助带给场景附加真实感

  在骨骼系统你甚至可以指定"我需要把这个特别动画用於模型个区别携枪或射击动画在模型躯干上播放且那家伙(角色)叫喊区别动画效果在模型头部播放"非常妙Ghoul2 ( 在Soldier of Fortune II: Double Helix and Jedi Knight I: Outcast中使用了Raven动画系统 ) 拥有所有这些好东西且特别被设计为允许员使用所有这些忽略能力这对动画节省像你样难以相信像你动画上这次救援不相信. Raven有个角色行走动画和个站立开火动画并在它同时行走和开火形下把这两个动画合并而不是需要个动画表示角色行走并开火


More Skeletons in the Clo
  先前描述效果可以通过具有层次骨骼系统来完成这是什么意思呢?意思是每块骨架实际上位置相对于它父亲而不是每个骨架直接位于空间中地方这意谓着如果你移动父亲骨架那么它所有子孙骨架也跟着移动在代码上不需要任何额外努力这是让你能够在任何骨架层次改变动画而且通过骨骼其余部分向下传递东西  

  创建个没有层次骨骼系统是可能 -- 但那时你不能忽略个骨架并且预期它工作你所看到只是身体上个骨架开始了新动画除非你实现了某种‘向下传递信息’系统否则在该骨架下面其它骨架保持原来动画首先由个层次系统开始你就自动地获得这些效果  

  许多今天动画系统中正开始出现些比较新特征如动画混合个正在播放动画转变到另外个动画需要经过小段时间而不是立即从个动画突然转变到另外举例来说你有个角色在行走然后他停了下来你不是仅仅突然地转变动画让他腿和脚停在无效位置而是秒钟混合这样脚似乎自然地移到了新动画不能够过高评价这种效果 -- 混合是个微妙事情,但如果正确运用它真有些差别


反向运动学
  反向运动学 (IK) 是被许多人们丢弃个专业术语对它真实含义没有多少概念IK 是如今游戏里面个相对比较新系统使用 IK 员能够移动只手条腿, 模型其余关节自动重新定位因此模型被正确定向而且有模型关节新位置其馀者他们自己因此模型正确被定向比如你将会说,"好手 , 去拾起桌子上那个杯子"并指出杯子在世界中位置手就会移动到那里且它后面身体会调节其自身以便双臂移动身体适当弯曲等等

  也有和IK相反事情叫做前向运动学,本质上和 IK 工作次序相反想像只手手附着在手臂上手臂附着在身体上现在想像你重重地击中了身体通常手臂像连迦般抽动且手臂末梢手随的振动 IK 能够移动身体并让其余 4肢自己以真实方式移动基本上它需要动画师设定每种工作大量信息 -- 像关节所能通过运动范围如果块骨架前面骨架移动那么这块骨架将移动多少百分比等等

  和它现在尽管很好它是个很大处理问题不用它你可以有区别动画组合而脱身值得注意真正 IK 解决办法需要个层次骨骼系统而不是个模型空间系统 -- 否则它们都耗时太多以致无法恰当地计算每个骨架


LOD几何系统
  最后我们应当快速讨论下和缩放模型几何复杂度相关细节级别(LOD)系统(和讨论MIP映射时使用LOD相对照)假定如今绝大多数PC游戏支持处理器速度巨大范围以及你可能渲染任何给定可视场景动态性质(在屏幕上有个角色还是12个?) 你通常需要些系统来处理这样情况比如当系统接近极限试图同时在屏幕上绘制出12个角色每个角色有3000个多边形,并维持现实幀速率 LOD 被设计来协助这样情景中最基本情况它是在任何给定时间动态地改变你在屏幕上绘制角色多边形数量能力面对现实吧个角色走远也许只有十个屏幕像素高度你真不需要3000个多边形来渲染这个角色 -- 或许300个就够了而且你很难分辨出差别  

  些 LOD 系统将会需要你建立模型多个版本而且他们将会依靠模型离观察者接近程度来改变屏幕上LOD级别 以及多少个多边形正被同时显示更加复杂系统实际上将会动态地减少屏幕上多边形数量在任何给定时间任何给定角色动态地 -- Messiah和Sacrice包括了这种风格技术尽管在CPU方面并不便宜你必须确信和首先简单地渲染整个事物相比 LOD 系统没有花较多时间计算出要渲染那些多边形(或不渲染)方式都将会工作由于如今我们试图要在屏幕上绘制多边形数量这是件非常必要事情注意 DX9 将会支持硬件执行自适应几何缩放(tessellation)

  归结起来是得到个运动流畅其表现和移动在视觉上可信屏幕上看起来逼真模型流畅动画时常是通过手工建造动画和运动捕捉动画组合得到有时你仅仅手工建立了个给定动画 -- 当你在为个模型做些你在现实生活中不能做到事情动画时 你倾向于这样做 -- 举例来说你确实不能向后弯腰或像Mortal Kombat 4中Lui Kang那样在行进脚踏车上踢腿通常运动捕捉这时候就出局了! 通常运动捕捉动画 -- 实际上视频捕捉活生生演员贯穿于你想在屏幕上所看到动画 -- 是得到逼真东西方式真实感东西能使款普通游戏看起来很棒而且能掩饰许多事情比如 NFL Blitz屏幕上模型大约有 200 个多边形它们在静止站立时看起来可怕斑驳旦这些模型跑动起来它们就有快速流畅动画模型自身许多丑陋消失了眼睛容易看见是 '逼真' 动画而不是模型自身结构 个不错模型设计师能够掩饰大多数模型缺陷

  我希望这些带给你对模型和动画问题洞察力在第 5部份中我们将会更加深入3D世界建造讨论些物理运动和效果系统东西
Tags:  游戏搜索引擎 游戏引擎启动异常 什么是游戏引擎 游戏引擎

延伸阅读

最新评论

发表评论