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

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


第5部分: 物理运动效果


世界建造
  常常在建立个含有任何3D成分游戏时你最终要试图建立个将会在里面产生游戏动作3D环境 不知如何游戏开发者提供了个建立这种环境它容易修改有效率有较低多边形数量对于游戏既容易渲染又容易运用物理学很简单对吗?当做这个时候我用左手在做什么?当做这时候 , 我对我左手做什么? 是不错  

  虽然那里有许多3D结构从CAD/CAM到3D Studio Max建造游戏世界是区别于建造内部或外部世界模型尴尬你有 3角形数量问题 -- 任何给定渲染器次只能渲染这么多多边形这对于天才关卡设计师来说永远都不够不知这些你也只能每个关卡存储预定数量多边形所以即使你渲染器能够在视野中处理250000个多边形即使你只能在合理数量空间中存储500000个多边形那么取决于你如何处理它最后你关卡价值像两个房间那么小不好  

  任何思路方法开发者需要提出个创作工具 -- 最好足够灵活允许游戏引擎需要各种事物 – 比如在世界中放置对象在进入游戏以前对关卡适当预览以及准确光照预览在他们花 3个小时预先处理关卡来产生个 '引擎可消化' 格式的前 , 这些能力允许游戏开发者看到关卡将在游戏中看起来如何样 开发者需要有关关卡多边形数量网格数量等等相应数据 他们需要个合宜而友好方式能够让世界有纹理背景图容易存取多边形数量缩减工具如此等等这个清单可以继续列下去  

  在先前已经存在工具中找到这个功能是可能许多开发者使用Max或者Maya建造他们关卡 但即使3D Max需要对它功能有些任务特定扩展来有效率地完成关卡建造工作甚至可能使用关卡建造工具像QERadient(见下图)而且把它输出重新处理成你引擎能够解释格式


不能看见它? 别烦扰…
  回想下我们在第部分讨论BSP ( 2叉空间分割) 树你也可能听说过潜在可视集合(PVS)这个术语正被 4处谈论两者都有相同目标不去探究涉及到繁杂数学它是种把世界分解为你能从世界任何给定位置看见墙壁最小子集方式在实现时它们仅仅返回你能看见那些而不是那些隐藏在可能被遮挡墙壁后面你能想象出这给软件Software渲染器带来好处渲染每个像素(可能是这样情形)极为重要它们也按从后到前顺序返回那些墙壁在渲染时这是很方便你能够在渲染次序中确定个对象实际位置  

  大体而言BSP 树最近正不受欢迎由于它们些古怪而且我们从当今3D显示卡获得像素吞吐量再加上Z缓冲像素测试BSP 常常成了个多余过程它们在计算出你在世界确切位置和正在你周围几何物体方面是便利但常常有比BSP树更好而且更直观方式来存储这些信息  

  潜在可视集像它听上去样非常好它是这么个思路方法在任何给定时间给定你在世界位置它决定世界哪些表面哪些对象实际上可以看得见这时常用来在渲染的前剔除对象也剔除它们来减少AI和动画处理毕竟如果你实际上不能看见它们,为什么还要费脑筋处理呢多半这真是不重要如果个非玩家角色(NPC)正在播放动画或者甚至在运行它AI研究


游戏物理学
  既然我们已经在内存中得到了世界结构我们必须防止我们角色从里面掉落出去并处理地板斜坡墙壁以及移动平台加的我们必须正确地处理地心引力速度变化惯性和放置在世界里面其它对象碰撞这被看作是游戏物理学而且在我们进步深入讨论的前我想现在就在这里消除个神话任何时候你在世界中看见物理或者任何人在个复杂游戏环境中宣称“真实物理”很好它是BS超过80%建造个有效率游戏物理系统精力花在简化用来处理世界中对象真实方程式上面甚至那时你时常忽略什么是‘真实并创造些‘有趣’东西毕竟这是目标所在

  经常地游戏者将会忽视真实世界牛顿物理学并扮演他们自己更有趣真实版本例如在QuakeII里面你能够立即从0加速到35MPH并快速停下来没有摩擦力而且斜坡不提供真实斜坡提供相同类型重力问题身体没有它们应该作用在所有关节上地心引力 -- 你看不见身体像真实生活中那样倒在桌子上面或者边缘 -- 而且地心引力它本身甚至可能是可变 面对现实吧在真正世界中空间中飞船不像 2战飞行战斗员在它们表面操作那样实行在空中全部是力和反作用力力在重量点周围作用等等不像 X-Wing中Luke Skywalker那样啸叫尽管那样做更加有趣!  

  作为游戏开发者来说无论我们做什么我们需要能够检测墙壁检测地板在世界中处理和其他对象碰撞这些是现代游戏引擎必备 – 我们决定对它们进步要做取决于我们和我们游戏需要


效果系统
  如今绝大多数游戏引擎建造有某种效果产生器这允许我们表现出有洞察力游戏者期盼所有可爱吸引眼球东西然而效果系统幕后所进行东西能够急剧影响幀速率所以这是我们需要特别关心地方如今我们有很棒3D显示卡我们能够传送大量 3角形给它们而且他们仍然要求更多 3角形并不总是那样 在Heretic II使用它可爱软件Software渲染模式由于他们漂亮符咒效果Raven遇到了相当严重过度绘制问题回想当你在屏幕上绘制相同像素超过次时过度绘制就发生了当你有许多效果正在进行按其性质你有许多 3角形多个 3角形可能相互堆叠在彼此上面结果是你有许多重复绘制像素加上Alpha这意味着在重新绘制的前你必须读取旧像素并和新像素混合这会消耗更多CPU时间  

  Heretic II些效果能介绍说明这点我们在幀里对整个屏幕重复绘制了 4十遍很惊讶是吗?因此他们在效果系统里面实现了个系统采样在过去30幀幀速率如果速度开始减慢它就自动地缩减任何给定效果绘制 3角形数量这样使主要工作完成了幀速率保持住了些效果看上去很丑陋  

  无论如何如今绝大多数效果倾向使用大量很小粒子模拟火和烟等等结果你在效果代码里面每幀要处理许多 3角形你必须把它们从幀移动到下决定它们是否完成了甚至还要在它们身上运用些物理学以便让它们在地板上面适当反弹这在PC上面都是相当昂贵因此甚至现在你必须对你所能够做些实际限制举例来说个像素粒子产生火效果可能会很好但当你这么做时候就别期望在屏幕上做更多别事情  

  粒子被定义为拥有它们自己世界位置和速度非常小可绘制物体它们区别于有方向精灵粒子使用这些精灵 -- 比如喷出团团烟雾它们面向照相机自动而典型地旋转缩放改变它们透明级别因此它们能够随着时间淡出我们容易看到大量粒子但我们却限制精灵数量—尽管两者的间真正区别如今正在模糊将来特别是在 DX9 和更加高级图形硬件表面以后我们可能看到更多人们使用过程shader来产生跟粒子系统相似或者更好效果创造非常棒动画效果  

  当谈论效果系统时你可能听说过‘图原’这个词个图原是你效果系统将处理效果最低级别物理表现更进步解释个 3角形是个图原那是绝大多数引擎最终在底层绘制 -- 大量 3角形当你沿着系统向上时你对图原定义随着变化比如说顶层游戏员不想考虑处理个别 3角形他仅仅想说,"这个效果在这里发生" 并让系统以种黑盒方式处理它因此对于他来说个效果图原就是‘让我们在世界这点持续这么长时间用这样引力产生束粒子’在效果系统内部它可能认为个效果图原是它那时正在产生每个单独效果组遵循同样物理学规则 3角形—然后它传送所有这些单独 3角形到渲染器进行渲染因此在渲染器层次图原就是个单独 3角形点困惑但你知道总思想了  

  以上就是第 5部分个部分是有关声音系统和各种区别音频APIs3D音频效果处理闭塞和障碍各种区别材料对声音影响音频混合等等
Tags:  游戏搜索引擎 游戏引擎启动异常 什么是游戏引擎 游戏引擎

延伸阅读

最新评论

发表评论