游戏渲染的发展史.doc_第1页
游戏渲染的发展史.doc_第2页
游戏渲染的发展史.doc_第3页
游戏渲染的发展史.doc_第4页
游戏渲染的发展史.doc_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

分 类 号 密 级 U D C 编 号 10486 武 汉 大 学工程硕士专业论文游戏渲染的发展史研 究 生 姓 名:林诗学号:2010212160149指导教师姓名:朱新铭工 程 领 域 名 称:软件工程研 究 方 向:游戏引擎技术 2011 年 5月 10日目 录目 录2摘 要3第一章 2D游戏的发展41.1游戏机的开拓时代41.1.1世界上第一款视频游戏双人网球41.1.2第一款交互式游戏太空大战61.1.3第一款街机游戏“电脑空间”发布8第二章 图形的显示和图形引擎的处理102.1图形引擎系统的处理过程102.2图形引擎系统的功能分析12第三章 图形渲染系统模块的设计133.1图形渲染系统的层次划分133.2图形操作流程.143.2.1调入位图图像文件.143.2.2绘制位图图像并显示到屏幕153.3动画贴图子模块的设计与实现.153.3.1子画面动画153.3.2帧动画163.3.3精灵行走动画163.3.4游戏滚动背景183.4屏幕渲染管理模块的设计与实现193.4.1场景管理的设计原理193.4.2画面互相遮挡问题的解决203.4.3渲染状态管理233.5特效处理系统模块的设计233.5.1混合特效技术233.6粒子特效在游戏中的应用26第四章 从2D到3D游戏的过渡304.1 2.5D游戏的形成304.2 2.5D游戏的好处.314.3 3D游戏的定义.324.4游戏史上第一个3D游戏32第五章3D游戏的渲染技术345.1 3D图形渲染管线345.1.1什么是渲染345.1.2什么是渲染管线345.1.3图元装配和光栅化385.1.4光栅操作395.1.5形象化图形流水线40第六章 3D游戏图形引擎设计426.1 3D游戏图形引擎的要素426.2 游戏图形引擎实现过程436.2.1坐标变换436.2.2物体剔除436.2.3背面消除436.2.4 3D物体空间裁剪446.2.5渲染和光栅化44第七章 3D图形引擎中渲染器的设计技术457.1渲染器低层次细分457.1.1三维模型子系统457.1.2 场景管理子系统467.1.3特效子系统467.2渲染内核核心模块和技术477.2.1光照和表面性质487.2.2房间和地形507.2.3 空间划分和排序527.2.4可见性判断和裁剪537.2.5碰撞检测547.2.6 粒子系统557.2.7 雾效56第八章3D游戏的发展578.1前期发展578.2 3D游戏的革命598.3最近十年游戏的发展628.4游戏发展的未来67参考文献.67摘 要本文介绍了视频游戏发展的历史,视频游戏中图形的显示和图形引擎的处理技术,游戏渲染技术的发展。其中包括2D游戏渲染引擎设计,3D游戏渲染技术。图形渲染系统是2D游戏图形引擎中非常重要的一部分,该系统的主要功能是将制定的图像及效果在显示终端上显示出来,包括各种图像、动画效果、人物角色以及游戏的背景等。3D图形引擎中渲染器的设计技术按照不同的功能和任务,可以把渲染器整个底层次细分为三维模型、场景管理和特效三个子系统。一般由Direct3D或者 openGL 来实现它们。关键词:游戏 渲染引擎 发展史 2D图形 3D图形第一章 2D游戏的发展1.1游戏机的开拓时代1.1.1世界上第一款视频游戏双人网球 1958年,世界上第一款视频游戏双人网球问世。物理学家威利.希金博特姆(Willy Higginbotham)被认为发明了第一个“视频”形式游戏。他为了提 高参观纽约布鲁克海文国家实验室游客的兴趣,在一台示波器上展示着一款Tennis for Two双人网球交互式游戏。这是世界上第一款视频游戏。一年后,他改进了这一发明,将其用15英寸监视器显示。希金博特姆的成绩是显而易见的,那个游戏成为实验室受欢迎的引力所在,但是希金博特姆从来没有为他的设备申请专利(因为他在工作时发明了它,所以专利属于美国政府)。所以在公众眼中他把发明视频游戏的荣誉留给了别人。 双人网球游戏在一个模拟计算机上开发,可模拟示波器上的游戏网球或乒乓球。作为第一个使用的图形显示的电子游戏,希格恩博瑟姆了解到布鲁克海文国家实验室的其中一台计算机可以计算出弹道导弹轨迹,他用这种能力,形成了这一游戏的基础。这一游戏采用模拟示波器上的图形显示网球场的球道。所设计的电路显示球的路径,当它撞到地面改变其路径。该电路还模拟球击中的感觉和模拟速度与净阻力。用户可以交互点击一个按钮来击出球模拟球路控制器,用一个旋钮来控制角度。击球也发出声音。双人网球被称为第一个视觉显示器视频游戏。为了解释这个词“视频游戏”,审查委员会还审议了其他游戏的早期电子产品如OXO游戏和一个未命名的类似导弹的游戏,该游戏在 1948年申请了专利,成为游戏代表,不同于后两者是通过轻击光操纵柄用图片来显示目标被打击。双人网球于系统内展示运动轨迹,并显示图形。此外,希格恩博瑟姆没有看到现有能力的计算机做出游戏是一个很大的区别。但是,由于双人网球使用了示波器,而不是传统的CRT显示器或电视的显示设置为它的视频。这主要是由于是希格恩博瑟姆只是组建一个临时搭建的技术演示来招待游客,而不是生产适销对路的商业产品。双人网球输出采用一个矢量示波器,因而无光栅视频信号,通过使用标准的电视和电脑显示器(但是,游戏产生一个向量视频信号一样被用在一些后来的视频游戏,小行星,和战斗机飞机HUDs),并且不包含播放器直接控制的对象,球员们,控制看不见的“拍子”,将改变一些“球”的轨迹,双人网球立即被拿来作为视频游戏技术的例。 双人网球游戏开发商(s)威廉希金伯丹出版商威廉希(s)威廉希金伯丹设计师(s)模拟计算机平台(s)/示波器发布日期(s)- 1958年10月18日,1类型(s)网球/乒乓球1.1.2第一款交互式游戏太空大战1961年,麻省理工学院(MIT)学生史蒂夫.拉塞尔(Steve Russell)设计出了Space war! 太空大战,它才是真正在电脑运行上的第一款交互式游戏。这款游戏运行在PDP-1(编成数据处理器-1)上,当时电脑技术还相当有限,空间大战必须使用新阴极射线管显示器来显示画面。太空大战是一个简单的游戏,它通过示波镜产生图像,在上面2个玩家可以互相用激光击毁对方的太空船。这个 游戏在PDP-1小型机上运行,这是一种非常大非常昂贵仅仅被商家选择使用的主机。但是那个时候,电子游戏只属于少数精英,只有极少数的经过挑选有权使用那昂贵的电脑主机的人才可能玩到它。太空大战的是一种已知的最早数码电脑游戏。史蒂夫拉塞尔,马丁格雷尔特斯和韦恩。为特纳姆海格海姆学院 在1961年构思出这个游戏,其意图12月在麻省理工学院实现。艾伦.可图可用后正弦、余弦程序计算了几个月得到,拉塞尔开始从1962年2月编码,并且产生了他的第一个版本。它花了大约200个小时的工作来创建初始版本。附加功能由丹爱德华兹和彼得参孙.格雷尔特斯开发。基本的游戏操作包括两个武装的太空船,被称为“针”和“楔形”试图在彼此的重力下操纵一颗恒星。船舶消防导弹的不受重力(由于缺乏处理时间)。每条船都有一定数量的导弹和供应有限的燃料。每个玩家控制船舶,必须试图同时射击另一艘船、避免碰到那颗星。在超空间特征可作最后一搏,意味着逃避敌人的导弹,但从超空间返回会产生在一个随机的位置和有一个递增的船炸响的概率。分别以顺时针和逆时针方向控制角色包括旋转、推力、消防、超空间。最初这些受到控制,利用前翼测试开关, 每个球员有四个交换机,但这些被证明让正常运行的游戏方式磨损得很快, 留下一个队员控制开关的位置的一个方面,CRT显示器,而且在视觉上处于弱势地位。大多数网站使用自定义控件控制同一有线开关盒,虽然操纵杆和其它控件也被投入使用。控制开关在控制台上的感觉:没有星星(因此没有重力),使角动量,禁用背景星的区域,“风”一种扭曲的空间因素对轨迹,要求飞行员仔细调整他们每次动。后续发展和变异:两个球员以PDP-12玩, 在老式计算机的节日运作第一个版本的游戏,1962年2月完成的星区域包含着一种随机生成的背景。然而由于游戏的不精确性、缺乏生气,于是他写了一本参孙星图程序,依据真实场景缓慢的滚动:在任何一个时间,45%的夜晚的天空是可见的,每一颗星星到第5级落下来。该项目被称为“昂贵”(指天文馆PDP-1电脑的价格),很快就被纳入主要代码。恒星的重力和超空间特征也还未出现在那一个可写的版本;它们是爱德华和罗素,分别添加元素的策略是最初射击游戏的纯的反应能力。完成时间基本上是1962年4月下旬。游戏迅速传播开来,在其他的研究中心的其他程序员开始编码,包括他们自己的变异特征,比如隐形装置、空间矿山、甚至是第一人称视角的版本,玩过两个屏幕,每个飞行员的观点,模拟出驾驶舱的出现,是一种相当好的全面对计算机和类型的PDP-1 CRT显示器的诊断,所以12月将它应用在工厂测试和付运,可为客户提供PDP-1电脑。已装入程序的核心内存;这使得现场完全建立PDP测试照,还做了最后的PDP的测试。开发商(s)史蒂夫拉塞尔孙俐。pdp-1平台发布日期1962年流派:空间战斗,电磁模拟射击模式:两名球员,同时 1963年,任天堂有限公司转型进入游戏市场。 1967年,第一款用枪的视频互动游戏诞生。1967年拉尔夫.贝尔与设计小组成功研究出第一款可以在电视机上玩的视频互动游戏。他们先开发了一款追逐游戏,紧接着又开发了一个电视网球游戏。他们还改装了一把玩具枪,使其能够辨别屏幕上的光点。1.1.3第一款街机游戏“电脑空间”发布1971年,第一款街机游戏“电脑空间”发布。1971年诺兰.布什内尔(Nolan Bushnell)和特德.达布尼(Ted Dabney)在拉塞尔的空间大战的基础上设计出第一款街机游戏,取名为“Computer Space直译为“电脑空间”。而这个“电脑空间”就是前面提到的“太空大战”的变种,可惜的是他并没有被公众接受。发行这个游戏的Nutting Associates公司的老板说“电子游戏是个赔钱的东西,这绝对不是个好主意。”在电脑空间推出的次年,Nolan和他的朋友Ted abney 用500美金注册成立了自己的公司,这个公司就是电子游戏的始祖Atari(雅达利)。“电脑空间” 是在11月份雅达利公司发布的视频街机游戏机。一个大市场的核心是大学校园的小型计算机范围内它起源计算机中心软件各种远程终端的分配。这一个专门的计算机装置建造只为进行一场比赛。计算机空间是第一个可以广泛应用的视频游戏,虽然它不是一个成功者。对许多人来说,这个游戏很复杂,不太好迅速掌握。当它落户在大学校园,不是很受欢迎。在酒吧和其他场所后来轰动一时的更容易掌握的pong游戏仿照的是奥德赛家拉尔夫巴尔开发系统的网球比赛。设计师:特德.达布尼.诺蓝布什内尔发布日期:1971年11月类型:全方位射击游戏模式:单人或2人显示:光栅,标准的分辨率,十五英寸屏幕玩家控制一个火箭船使用推进器和一双旋转按钮。在游戏中,玩家必须避开敌方炮火同一双飞碟步调一致。这名球员用他们的火箭船发射导弹破坏飞碟。今天,打赢这场比赛将被认为是一种全方位的射手。打飞碟结束时如果这名球员的得分高于90,玩家将得到另一个90秒的打球时间,且颜色的画面就会切换到“多维空间”(这开关像照片是负面的,从黑色到黑色,白色和白色)。如果最终90秒球员的得分仍高于90,玩家会获得另一90秒,而且颜色将恢复正常。这是无限重复序列。得分保持为一个单一的数字从0到9,因为分数为10 到15,一旦得分15达成共识,接下来的袭击将会返回得分为0。电脑空间利用微处理器、ram或rom。整个计算机系统是一个状态机74-series TTL芯片做成的。图形元素被保留在二极管阵列。机体形态由3个多氯联苯互联,渲染显示器是通用电气的15个黑白便携式电视真空软管套特别改良的。 1972年,Magnavox公司的“Odyssey(奥得赛),被拉尔夫.贝尔设计而出,成为第一款家庭游戏主机。其实他最早拥有视频游戏的想法是在1951年,当时他正在一家名叫 Loral的早期电视制造工厂工作。他被分派建造这个世界最好的电视系统,他提交了电视应该具有革新概念的想法,其中之一就是要有可以玩游戏的功能。这个想法立刻被他的经理罐装了。 1975年,艾尔.奥尔康(Al Alcorn)贡献出电视游戏“Pong,成为Atari的第一个家庭电视游戏产品。Atari的“Pong刚一诞生,就获得了巨大的成功。它是第一款可以四人同时参与的游戏。这个游戏最后被命名为“Pong有2个理由:球撞在物体上就发出这个声音(在字典里pong被定义为空旷响亮的声音),而现实中“Ping-Pong也已经有了版权。第二章 图形的显示和图形引擎的处理说到视频游戏,就要说到图形的显示和图形引擎的处理。2.1图形引擎系统的处理过程游戏图形引擎的处理过程是这样的:首先是需要设置游戏的运行环境,对图形背景、精灵物体、动画属性、层次关系和位置坐标等进行初始化。然后对用户的输入进行检测以便根据玩家的意图来改变游戏的运行状态,并且通过游戏的管理控制界面对用户的输入请求进行处理。处理完后通过游戏的屏幕渲染机制更新屏幕的显示。当退出游戏时,清除初始化时载入的所有图形、声音以及各种数据,并且释放内存。处理过程如图21所示:2D游戏图形引擎系统按功能层次由低到高划分为四个功能模块:硬件显示支持模块、图形渲染模块、界面控件系统模块和特效处理模块。其中图形渲染模块是整个2D游戏图形引擎系统的核心,它又被划分为基本图形图像绘制子模块、动画贴图子模块和屏幕渲染管理子模块三个部分。基于游戏图形引擎处理过程框架和功能模块的划分,如图22所示2D游戏图形引擎总体构架:2.2图形引擎系统的功能分析下面简单介绍一下2D游戏图形引擎系统各模块的主要实现功能,其各模块的具体功能如表21所示。1硬件显示支持模块处于引擎的最底层,是游戏图形引擎与硬件之间的接口,通过硬件的高处理性能为基础支持游戏图像资源的绘制,应用基于Java的硬件加速动态图像绘制技术有效提高动画的帧速率,优化系统的绘制性能。2图形渲染模块位于中间层,它包括三个子模块:基本图形图像绘制子模块、动画贴图子模块和屏幕渲染管理子模块。这三个子模块之间为继承关系,承担着游戏中图形图像、动画资源的绘制和管理。渲染模块可以让游戏场景在可视化的同时,达到更加美观精致的场景效果。3界面控件系统模块的实现必须依赖于图形渲染模块的支持。因此这个模块位于整个引擎的最顶层,这样对整个引擎的架构不会造成复杂的依赖关系。它实现了一组通用的界面类库提供给外部用户使用。外部用户可以方便灵活的调用界面类库中的控件,设计自己的拥有游戏观感的控制界面,从而节省了不少制作界面的时间,可以把主要精力放在游戏逻辑的代码设计上来。4特效处理模块通过对画面进行特效渲染处理,使游戏场景产生出绚烂多彩的丰富效果。如通过Alpha混合特效技术来营造游戏中阴影、动态光源等半透明效果。还有模拟自然天气、景物的粒子系统等。此模块是应用软件编程的方法来增强和修改图像效果而无须为此创建多余的消耗内存的图像文件,节省了游戏中各种调入导出文件的处理时间。第3章 图形渲染系统模块的设计图形渲染系统是2D游戏图形引擎中非常重要的一部分,该系统的主要功能是将制定的图像及效果在显示终端上显示出来,包括各种图像、动画效果、人物角色以及游戏的背景等。3.1图形渲染系统的层次划分基本的图形图像绘制是游戏场景中显示的最基本单位,也是完成所有复杂效果图像的基础。从封装及功能单一性的角度出发,图形渲染系统为用户提供的功能将不仅仅是在简单的绘制基本图形图像上,其上层应该给出游戏中最常应用动画贴图及控制的方法,再上层还应该给出游戏屏幕渲染管理的方法,其具体层次关系如图41所示。 3.2图形操作流程目前的电脑游戏都是由大量的图形构成的。将一幅图形在屏幕上显示的方法可分为将指定格式的图形数据调入到指定内存中,再将指定内存中的数据拷贝到显示内存中。图形操作基本遵循以下模式:首先建立图形环境,然后执行图形处理处理完成后释放图形环境。基本流程如图42所示。图4-2图形操作流程图3.2.1调入位图图像文件读取位图文件使用Java提供的get Image(URL url)函数来实现,get Image(URL url)返回一幅图像,该图像从指定URL获取像素数据。通过指定URL引用的像素数据来调入位图图像。可以使用GIF、JPEG或PNG图像格式之一来调用图像。3.2.2绘制位图图像并显示到屏幕绘制位图图像使用Java提供的draw Image()i函数来实现,它绘制指定图像中已缩放到适合指定矩形内部的图像。图像绘制在此图形上下文坐标空间的指定矩形内部,并且如果需要还可以进行缩放。透明像素将不影响该处已存在的像素。3.3动画贴图子模块的设计与实现动画贴图子模块是图形渲染模块的重要组成部分,在几乎所有游戏中,图形的核心都是动画。如果没有动画,游戏将变成静止的,整个游戏就会变的异常死板,加入了动画会使游戏增添丰富多彩的效果,更加引人入胜。目前的计算机动画是在传统动画的基础上,采用计算机图形图像技术而迅速发展起来的一门高新技术。计算机动画是指用绘制程序生成一系列的景物画面,其中当前帧画面是对前一帧画面的部分修改。由于人眼的视觉灵敏度很低,很容易产生动画的错觉,因此会将这些变化误认为是在移动。应用程序以一定的规律快速连续绘制并显示一系列有关联的静止图像就产生了电脑动画。一般来说,计算机动画中的运动包括景物的位置、方向、大小和形状的变化,还有景物表面纹理和色彩的变化等。根据2D动画移动和受控制的交互程度不同,可以将动画贴图子模块划分为子画面动画、帧动画、精灵行走动画和游戏滚动背景四个部分。3.3.1子画面动画1子画面动画原理:子画面动画是独立于背景移动的图形对象。图形对象是一个独立于动画图像背景的实体。每个图形对象都可以称为一个子画面,并且有一个随时间变化的位置,这样子画面就有了一个确定其位置如何随时间变化的速度。在实际游戏中子画面通常是基于图像的,各子画面都对应于一个用来在屏幕上绘制子画面的图像,并赋予图像一定的属性。在2D游戏图形引擎中由Sprite类具体生成子画面。Sprite类中定义了子画面的特定属性,包括位置、速度、边界矩形、边界动作、深度系数和可见性。3.3.2帧动画帧动画是显示一系列预先生成的静态帧图像,即它没有位置偏移量的变化。每个帧图像的一切内容都作为一个整体属于这个帧。更新帧动画实际上就是以一种静态形式显示下一帧的所有信息。这种动画可以认为是一种只实现子画面外观的动画。帧动画的存储方法:把整个动画存储在一个单位的位图文件中,这个位图文件作为一个动画序列(animation strip)。在这个位图文件中,动画帧排列为多行多列形式存储。图44为一个具有多行多列存储形式的动画位图。一些参数:帧动画所需的信息帧总数(total Frame):帧图像总数。当前帧(current Frame):当前显示的帧图像。帧延迟(frame Delay):控制循环播放帧图像的速度,它决定了在更改帧图像之前必须经历多少个游戏周期。帧触发器(frame Count):在每次通过游戏循环时增加一个计数器,如果计数器达到某个阈值,就重置计数器,然后像前面一样更新动画帧。3.3.3精灵行走动画精灵的行走动画是在帧动画与子画面动画相结合的基础上形成的。精灵的四处游走移动是调用子画面动画产生的效果,而精灵行走不同方向产生不同方位图像和行走姿态的变化均是调用帧动画的结果。1精灵行走原理 由鼠标控制精灵在场景中移动的原理是:首先获取在场景中的鼠标按键点坐标(x O,y O)。将按键点坐标(x O,y O)作为精灵移动的目标位置。当前位置(x, y)向精灵的目标位置靠近,并每次只移动一定的量。那么当前位置(x,y)的变化就会使得精灵向鼠标按键位置移动,根据精灵的当前位置(x,y)与目标位置(x O,y O)计算位置差(x i,y i),来判断精灵的移动方向,并在这个方向上移动一个规定的步长,同时调取移动方向上动画序列的一个周期。2精灵行走动画存储方式:精灵行走动画存储方式采用8方位行走图,把8个方向按东、东北、北、西北、西、西南、南、东南逆时针依次由上向下排列。这样精灵在游戏场景中沿不同方向行走时,直接调用不同方位行的帧动画就可以了。精灵行走动画图如图45所示。3精灵图形规律分析与动作转换 精灵在移动的时候,随着面向方位的不同调用的帧动画要随之改变,而且人物的站姿、走姿、跑姿、战斗等动作调用的行走图也是不一样的。所以要实现这些不同的动作就必须在精灵图片序列中选择合适的一组动画。精灵图形存放规律表如表41所示。表中的3种姿势,每种姿势8个方位图片,每个方位又有8帧动画图片。3.3.4游戏滚动背景游戏中使用的基本背景包括图像背景和滚动背景两类。1图像背景 图像背景使用一个位图图像来代表游戏的背景,而位图图像是静态的,因此图像背景不会发生变化或移动。2滚动背景 滚动背景是在游戏的屏幕上以某种方式移动的背景。滚动背景是随着游戏中现实需要而产生的。因为游戏中往往提供一个很大场景的有限视图,这个场景是不可能在显示器上完整显示出来的。游戏屏幕充当了这幅地图的窗口(即视口)。随着游戏中任务的移动,视口也相应的发生改变,游戏背景也随之相应的进行滚动。滚动背景的移动可以很简单,背景从左向右,从上到下的滚动,也可以很复杂,如视差滚动背景(parallaxscrolling background)。视差滚动背景涉及以不同速度不同方向移动的多个图层。其思想是背景中的各个图层拥有不同远近的视点距离,因此最远的图层的滚动速度比最近的图层要慢。这些互相滚动的图层最终产生的结果就是为游戏提供了现实性和深度感,这是简单的单层滚动背景所不可能实现的。具体效果如图4-6所示。视差滚动背景的工作理是:视差滚动背景包含多个可以独立滚动的图层。背景图象相互堆叠,类似于在游戏内绘制子画面的方法,但在这里他们都是背景的组成部分。通过允许滚动背景包含的多个图层,可以创建出视差滚动的效果,通过改变多个背景图层的速度来实现有深度的错觉。 3.4屏幕渲染管理模块的设计与实现屏幕渲染管理分为两个方面,一个方面是场景管理。控制管理画面上整体的绘制顺序,能快速剔除不可见多边形,并根据对象距视点远近选择合适的细节,达到最接近现实的另人满意的屏幕画面效果。另一个方面是渲染状态管理。它能快速渲染可见多边形。因为改变渲染状态对于显卡而言是比较耗时的操作,而如果能合理管理渲染状态,避免多余的状态切换,将明显提升图形绘制程序的性能。3.4.1场景管理的设计原理场景的管理主要分三个层次进行,即背景、动画子画面和前景。前景也叫顶视景,它和背景一样都属于游戏视差滚动背景中的一种,只不过一个是在动画子画面后绘制,另一个是在动画子画面上面绘制的。屏幕绘制原理如图47所示:图4.73.4.2画面互相遮挡问题的解决这里最复杂的就是如何解决场景中各画面的互相遮挡问题。因为在2D游戏中为了追求真实逼真的视觉效果,会经常遇到物体和精灵之间的相互遮挡。众所周知,在现实的世界中对于人的眼睛来说,前面的物体会完全或部分地遮挡后面的物体。但是在2D游戏中所有的物体和精灵都是使用图片来表示的,而不像3D世界中是一个个的实体,所以在2D游戏中,解决物体和精灵的遮挡问题是游戏制作中的一个难点。即使在一些商业游戏中,在这一点上也没有做到十全十美。既然在2D游戏中所有的物体和精灵都是以图片来表示的,那么物体和精灵问的遮挡问题必然涉及到图片的绘制顺序问题。所以解决遮挡问题的核心也就是确定图片的绘制顺序。在传统的2D游戏中是使用“画家算法”保证它们之间正确的遮挡关系。1.画家算法 所谓“画家算法”就是指以物体为单位,首先画远处的物体,然后再画近处的物体,这样近处的物体必然会遮住远处的物体。具体在2D游戏中这样确定物体的远近:物体在地图上的Y坐标越大,物体就越近,如果Y坐标值一样,那么x坐标越大,物体就越近。按通常的习惯,在二维的地图数组中使用行表示Y坐标,使用列表示X坐标,所以对于只占用一个坐标的物体来说,可以按这样的顺序进行绘制,先以列值从小到大的顺序绘制第一行中的物体,然后以同样的顺序绘制第二行和以后各行。下图48是一个例子: 不过在实际游戏场景中,可能会出现有些地方远,有些地方近的情况,事实上,这样就会造成无法判断场景位图的远近顺序,从而无法正确的处理物体和精灵的遮挡问题。图4-9是一个“画家演算法无法解决的情形: “画家演算法”还有一个缺点,就是它会花费很多时间去画一些根本就会被遮住的部分,而且每次判断遮挡关系时都需要重新绘制,这样会使游戏的运行效率变差。因此本文对传统的“画家演算法进行了改进,应用视景深度算法来处理游戏中物体和精灵间的遮挡问题。2视景深度算法原理 视景深度算法可以很好的避免“画家算法”的不足,解决物体和精灵间的遮挡问题。视景深度算法的原理是创建一个深度缓冲堆栈,为每个需要绘制的物体和精灵对象定义一个深度系数Z值,用于记录每个对象观察者的距离。把Z值的取值范围设定在01之间。用两个和投影平面平行的平面把所有超出这两个平面范围的空间都切掉。这两个平面称为Znear面和Zfar面,分别表示较近的平面和较远的平面,Znear平面的Z值为0,Zfar平面的Z值为1。在游戏中就可以把Znear和Zfar平面分别作为游戏场景中的背景图案和前景图案,如图410所示。 在开始绘制场景时,首先把屏幕缓冲区设置为Znear面的背景色,然后在绘制对象时,对每个对象的Z值进行核算,并存储于深度缓冲器中。后绘制的图像和已经绘制于屏幕中的对象深度Z值相比较,如果当前对象的Z值大于深度缓冲器中对象的Z值,则证明目前要画的对象是比较近的。所以应该画在对比对象的上面。如果当前对象的Z值较小,那就表示目前要画的对象是比较远的,会被目前深度缓冲器中的对比对象所遮盖住。依此类推,在深度缓冲器中可以得到一个从当前Z值最大的外表面到当前绘制对象的有序列表,这也就是由于遮挡关系而需要更改图像绘制顺序的次序表。因此在游戏循环中只需要按照这个次序表依次重新绘制各个图像对象,其余没有发生遮挡的对象不需要进行更改,就可以得到满意的游戏遮挡效果。图411为正确处理游戏遮挡效果的实例对比图。3视景深度算法的优点 视景深度算法相对于“画家算法”而言,其不仅可以处理如图49所示的多物体和精灵间相互遮挡的问题,而且它只需要绘制由于遮挡关系而更改绘制顺序的图像对象。对于处于遮挡关系以下,没有产生遮挡改变的图像就可不需要重绘。由于在实际游戏中,通常同一时刻因遮挡关系而改变绘图顺序的操作不会很大面积的发生,大部分的画面都不需要重新修改,所以这种方法可以减少游戏频繁的大量绘制图像所耗费的资源,提高游戏的运行效率。3.4.3渲染状态管理1渲染状态管理的设计原则 在一个典型的游戏场景中,包含人、动物、植物、建筑、交通工具、武器等。稍微分析一下就会发现,实际上场景里很多对象的渲染状态是一样的,比如所有的人和动物的渲染状态一般都一样,所有的植物渲染状态也一样,同样建筑、交通工具、武器也是如此。我们可以把具有相同的渲染状态的对象归为一组,然后分组渲染,对每组对象只需要在渲染前设置一次渲染状态,并且还可以保存当前的渲染状态,设置渲染状态时只需改变和当前状态不一样的状态。这样可以大大减少多余的状态切换。2渲染状态分析 实际场景中,往往会出现这样的情况,一类对象其它渲染状态都一样,只是纹理外观、动画状态不同。比如场景中可划分成人物、动物等不同的类型,在每一个类型内部只是外观不同,而其它如遮挡顺序、深度测试等渲染状态都是一样的。可以把纹理外观、动画状态数据不归入到渲染着色器中,而首先由场景管理程序按照遮挡顺序、深度测试等渲染状态由低到高的顺序划分场景中的不同类型,把场景中所有同一类型的对象用一个渲染着色器来渲染,然后在这个渲染着色器下对纹理外观进行分组排序,相同纹理外观的对象放在一起渲染。3.5特效处理系统模块的设计3.5.1混合特效技术在2D图形游戏中,经常会看到图像的淡入、淡出、两个或多个图像重叠显示等现象,这些特殊效果使用到的技术就是图像的混合技术,也叫图像的混合技术。混合是像素融合算法之一,就是按照“alpha混合向量的值来混合源像素和目标像素,具体的说就是将源像素和目标像素加权相加的组合(混合)两个图像(源图像和目标图像)。源像素的权值通常被称为alpha值,目标像素的权值是(1-alpha),l是最大的颜色值。alpha混合是按颜色通道定义,而不是按位定义的。在游戏中通常需要把Alpha-Blending混合技术与SubtractiveBlending饱和相减技术配合使用,以达到最佳的逼真显示效果。比如火光、烟雾、阴影、动态光源等半透明效果。3.5.1.1 Alpha Blending混合技术256色的Alpha Blending要用到调色板。首先,假设已经有了一个调色板,将根据这个调色板来计算和创建一个Alpha Map的二维整形数组,这个数组用来存放混合后的颜色对应于(或近似)这个调色板中的索引值。3.5.1.2 Alpha混合特效技术的应用下面运用Alpha混合特效技术实现眩目的光源半透明的特殊效果。这种效果是事先做好一个光源图和一个alpha通道图,应用Subtractive Blending饱和相减技术计算每个像素点,得到单独的光源效果图,最后把所得到的效果图通过Alpha像素混合,就是游戏场景中的火光掩映朦胧效果。第一步,直接应用Alpha混合将一张图像按一定程度的比例与另一张图像进行混合,直接这样Alpha混合后的效果(图61所示)可以发现图型混合的边缘呈现阴影。可见普通的Alpha混合并不适合游戏中的技能特效的显示。 第二步,应用Subtractive Blending饱和相减技术,首先取得光源图和一个alpha通道图,如图62所示。加入通道数据后,把两图R(红色),G(绿色),B(蓝色)三原色相减后得到场景中需要显示的图像效果图,再根据通道数据来进行混合。这样就过滤掉了原有普通Alpha混合图的阴影部分。第三步,将普通整图与通道数据混合后的火焰效果图直接绘制在游戏场景中,就可以得到需要的特殊效果了,如图63所示。3.6粒子特效在游戏中的应用目前,应用粒子系统制作的PC游戏以其优美的画面、逼真的效果受到越来越多的人们的喜爱。随着粒子系统在PC游戏等高性能平台上的日益广泛应用,其在游戏开发中的地位也日益重要,游戏玩家们已经可以在这个虚拟的世界体验到真实世界的景象,如:狂风、暴雨、燃烧的火焰、涓涓的流水、宏伟的瀑布、震撼的爆破等等。3.6.1粒子系统简介粒子系统(Particle System)是由Reeves在80年代初提出的一种方法,主要用来解决由大量按一定规则运动(变化)的微小物质组成的大物质在计算机上的生成与显示的问题。Particle System的应用相当广泛,大的可以模拟原子弹爆炸,星云演化,小的则可以模拟水波、火焰、烟火、云雾等等,而这些自然现象用常规的图像算法,如调色板动画、动画贴图、基于多边形的渲染、光线跟踪渲染等是很难逼真再现的。粒子系统(particle System)是一种物理模型,Particle System的核心不在如何显示图形,而是在于对某个物理模型的理解和分析。只有基于物理模型的方法,才能模拟出随机而逼真的自然景象。粒子的运动(变化)规律可以很简单也可以很复杂,这取决于模拟的物理模型的复杂程度。对于每一个粒子,它应具有以下属性:坐标、速度、加速度、生命值和衰减。实现粒子模拟,就是要对客观对象建立一个相应的模型。3.6.2粒子的属性一个粒子系统由拥有这种属性的对象所组成,它们必须遵循一定的行为规范。因此现在比较通用的实现粒子特效的方法就是对粒子的属性进行建模。粒子的属性包括坐标,速度,加速度,生命值和衰减。这些属性在实现中的意义如表61所示。在实现粒子模拟时,如何定义粒子的这些属性和行为规范,取决于要实现的粒子模拟。从上面的介绍了解到实现粒子特效就是要根据实现的特效,分别定义粒子的位置、速度、加速度、生命值和衰减。在程序实现中,更关心的是这些属性是如何变化的,粒子以什么方式运动,位置如何改变等等。因此在确定了粒子的属性表示以后,需要总结出粒子系统对所要模拟对象的描述处理步骤。3.6.3粒子系统对模拟对象的描述处理粒子系统是用基本粒子群来描述物体的属性及其变化,这些基本粒子可以是一个象素,也可以是一些简单的绘图图元,它们的集合确定了物体的基本形态。粒子系统不是一个静态的整体,而是随时间的推移处在不断运动中的粒子集合体。其中粒子群的分布结构可以改变,各个粒子的位置可以移动,新的粒子可以不断产生,同时旧的粒子可以“湮灭”。也就是说,用粒子系统表示的物体是不确定的,它的外形和结构可以复杂多样,形态各异,可以处在一定规律的运动变化中,并且在一定程度上还具有一定的随机性。可按照如下的步骤用粒子系统来描述一个复杂的自然景物:(1)深入分析对象的形体,即物体的静态特性;(2)深入分析对象的运动状态和运动规律,即物体的动态特性;(3)确定用粒子系统描述的基本目标;(4)对粒子目标进行粒子系统绘制;(5)将用各种方法绘制的图形或图像进行融合;3.6.4粒子特效实现方案应用粒子特效实现方案的主要流程如图64所示。 1粒子的初始化 在粒子初始化阶段,主要了解所要实现的粒子效果的特征,外观看起来的形式如何,是不是可以用具有一些特有属性的粒子来描述,比如:什么颜色、如何运动、什么形状等。粒子初始化时,新的粒子就被创建出来,它们即将运动起来构成所需要的效果。一般来说,要对粒子的所有属性进行初始化设置,比如:粒子的初始位置,粒子的水平速度、垂直速度以及相应的加速度,粒子的颜色,生命周期等等。在初始化粒子的位置时,通常要用到随机数。粒子的初始化除了初始化粒子的属性之外,还要初始化绘制粒子特效所需的调色板。调色板决定了效果的外在颜色,是效果实现的非常关键的一个环节。效果的颜色决定了绘制时所需要的调色板,一种特效所需要的基本颜色一般不会很多,像火焰需要黄色、红色;瀑布需要白色,蓝色等等。一般抽象出2至3种基本颜色即可,然后根据调色板的生成原理来生成其他的过渡颜色;如何运动决定了粒子在各个方向的速度,以及他们的生命周期,也就是取决于最核心的算法部分;什么形状决定了如何对最终的效果进行剪裁,使得效果更加有真实感。2粒子的渲染绘制 粒子系统渲染绘制可以产生一系列运动进化的画面,使得模拟动态的二维复杂自然景物成为可能。生成粒子系统某瞬间画面的基本过程为:步骤1:在系统中产生新的粒子:步骤2:赋予每一新粒子一定的静态属性;步骤3:删除系统中已存在且超过其预先描述的生存期的所有粒子;步骤4:更新剩余粒子的动态属性对粒子进行移动和变换;步骤5:显示由有生命的粒子组成的图像。3.6.5火焰粒子特效在2D游戏图形引擎中的实现火焰效果是游戏中最常用的效果之一,在游戏中很难用图片的形式来真实的模拟火焰燃烧的效果。为了实现火焰动态变化的特殊效果,可以构造一个粒子系统来表示。火焰粒子系统可以用大量的简单图元来表示某个火焰和火焰的多个特征,如:大小、颜色、位置以及粒子本身的生命周期并可以随机地改变。火焰粒子调色板的设置火焰的颜色主要由红色和黄色两种基本颜色构成,由于火焰特效的颜色比较简单,用程序生成调色板更合适。在实现过程中通过不断的对比、调整,通过获取随机数,可以按照一定的算法进行换算得到了64种颜色,己经完全可以满足火焰效果的要求,该调色板实现了从黄到红,再到黑的过渡。由于要显示出发光粒子拖着一条长尾巴的火焰效果,因此需要对图像进行一些模糊的处理,这样得到的效果才会更加真实。这样在颜色处理方面,就用到了模糊技术,即Blur算法。Blur算法的原理是把屏幕上的每一个点用它周围的四个点的平均值代替。其公式为:pixel(x,y):= pixel(x,y-1)+pixel(x-1,y)+pixel(x+1,y)+pixel(x,y+1) /4这个公式也可以这样理解,每一点都是由周围的四个点所产生的,而火焰源在最下面,那么新产生的颜色一定比下面的平均颜色浅,渐渐变成黑色而消失。而火焰源是在不断的变化的,那么看起来就像火焰在燃烧的效果。火焰粒子特效的渲染模拟一个火焰的渲染整体思路是:将粒子群的出生地定于一个小范围区域中。让粒子按照自然规律由下而上自由升腾。在上升到一定高度时能量衰减为零,火焰消失。根据以上的思路,渲染一个火焰的效果可以分为三个步骤:放置热源、火焰上升、粒子衰减。(1)放置热源:放置热源很好理解,也很好实现,只需要在屏幕的适当位置即想升起火焰的地方放上一些明亮光点就可以了。(2)火焰上升:有了热源以后,火焰就应该上升起来。这就需要用到Blur算法了。由于火焰是要向上升的,所以我们不能简单的选择要处理像素点的上、下、左、右四个相临像素,而是要选择它本身和它下面的三个像素。(3)粒子衰减:在火焰粒子不断上升获得新坐标的同时粒子的生命值也在逐渐的降低。如果粒子生命值0,则根据当前粒子生命值的大小来设置粒子在调色板中的值,以此作为新坐标象素中的颜色。如果粒子生命值小于0,表明粒子已经死亡,不予显示,这样,就能够模拟出大量粒子从运动到逐渐死亡的过程。根据以上的实现过程,最后得到了如图65所示的模拟火焰效果图。这样就可以真实地模拟出火焰了。第四章 从2D到3D游戏的过渡4.1 2.5D游戏的形成同时具备了2D游戏与3D游戏特点的游戏我们称之为2.5D游戏。一种是3D的地图,2D的精灵(角色、NPC等),例如仙境传说;一种是2D地图,3D精灵,例如征服。但在地图设计制作上,目前还没有2.5D之说,至多为伪3D。以最终幻想7为例,该作的地图制作采用了3D与伪3D技术的结合。在世界地图上行动时,使用的是真3D技术,所以该地图具备了3D技术的几大特点:物体立体占有空间,视角可变换,光照会随视角移动而变化,而其中最显而易见的便是视角的变换。而在FF7的场景地图中,在同一场景中,其视角是不可变的。其实FF7场景地图所采用的是3D建模、上材质,再进行2D渲染整合的伪3D的技术,这种技术也可称为“2D渲染”技术。最终幻想7的场景4.2 2.5D游戏的好处伪3D的好处在于比较容易将制作物的质感给表现出来,而纯2D技术要做到这一点就需要特别专业的技术了。另外,在视角不可变的场景地图中,FF7却实现了精灵(角色、NPC)的近大远小透视效果。这种效果就是指在有透视(纵伸感)的游戏场景中,移动的角色会随着场景的向前景或背景方延伸而显得渐大或渐小。这是需要配合程序方面来进行制作的,所以在程序方面会有一定的限制。时下有很多人讨论关于“伪3D”问题,因为很多3D的游戏里貌似有2D的成分。其实如果游戏的主引擎是使用的3D技术,也就是说游戏的人物角色控制是使用空间立体编程算法实现的,那么这个游戏就可以说是3D游戏了。4.3 3D游戏的定义 3D游戏就是三维游戏,3D中的D是Dimensional(维)的缩写。三维游戏中的点的位置由三个坐标决定的。客观存在的现实空间就是三维空间,具有长、宽、高三种度量。三维游戏(3D游戏)是相对于二维游戏(2D游戏)而言的,因其采用了立体空间的概念,所以更显真实,而且对空间操作的随意性也较强。也更容易吸引人。3D游戏对显卡的运算速度和内存容量比2D游戏有更高的要求,如果硬件不能达到要求,玩游戏时就会运行缓慢甚至是死机。3D游戏的兴起随着个人电脑配置的提升和游戏开发环

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论