1、第五章第五章 游戏制作技术介绍游戏制作技术介绍概述:游戏制作技术要完成的工作,主要就是建造引擎、编制游戏的应用程序和制作素材。游戏开发所用的集成工具环境及各种语言,图形图像处理API,主要都是为了建造游戏引擎。而角色、场景和道具等的建模、贴图,动画的制作,音效的创作等则是素材制作的范围。重点:了解常用软件功能及程序语言目的:了解游戏制作技术实现的着眼点15.1 基础用语 三维坐标系(3D Coordinate System)XZY左手系左手系XZY右手系右手系00 向量(Vector)在三维图形中,向量主要使用于隐面消除(Backface culling)和着色(Shading),有时候也用于
2、需要进行物理学运算的直线及平面的方程式。2 顶点 (Vertex)所谓顶点,是指表示二维空间或者三维空间上某一位置(Position)的点。在游戏编程中多使用顶点来表达。另外,在屏幕图面上实际显示出来的物理学中的点称为像素。多边形 (Polygon)三点可以组成一个面(Face),三个点组成的三角形称为多边形(Polygon)。另外,几个多边形也可以组成一个面,这里假定面和多边形都是由三角形组成的。边 (Edge)多边形中,连接顶点和顶点的直线称为边(Edge),存储数据的方式中,存在half-edge模式等方式。在Direct3D一类的实时3D情况下,主要采用“顶点+索引”的方式。网格 (M
3、esh)多边形在最小的三维空间上可以组成面,用一些多边形可以组成一个三维物体,称为网格。3三角形图元渲染方式 一个图元是系统将处理的效果的最低级别的物理表现。更进一步解释,一个三角形就是一个图元。物体模型是由许多三角形组成的,它们具有空间拓扑结构。而任何数据在计算机中都是以线性模式来存储的,在Direct3D数据流中三角形的存储组织方式有以下几种。1263451)Triangle Lists213456 72)Triangle Strips135463)Triangle Fans123424 变换(Transform)最基本的变换包括移动(Transition)、旋转(Rotation)和缩放
4、(scale),这些变换都是通过矩阵来实现的。仅通过移动和旋转构成的矩阵称为仿射变换(Affine Transform),矩阵(matrix)高中数学课程已经有过移动矩阵和旋转矩阵的讲解,矩阵这一工具非常有用,特别是在三维图形中,数据量越多,矩阵就越有用。纹理(Lexture)仅仅依靠三维顶点在画面中构成物体受到的制约因素很多,特别是表现一些细微物体的时候,需要很多顶点,这在存储器和CPU受到限制的PC系统中无疑是一个大难题。所谓纹理,就是给三维物体填充上二维图形(jpg、bmp、gif),可以实现仅用顶点难以表现的多样效果,这种给三维顶点填充二维图形的操作称为贴图(mapping),因此,为
5、三维物体进行纹理填充的操作就是纹理贴图,用作贴图的二维图形称为纹理或者纹理图。5着色(Shading)所谓着色,是指在多边形中填充阴影和颜色的操作。多边形是由具有三维坐标值的顶点构成的它们必须经过着色才能表现为各种物体。着色技巧的方法多种多样,有代表性的着色方法分别为:平面着色(Flat Shading),高洛德着色或高氏渲染(Gouraud Shading),补色着色(Phong Shading),辐射着色(Radiosity),光线跟踪(Raytracing)等。其中,在大部分显卡中,支持硬件加速的方法有平面着色和高洛德着色两种。其他着色方法的运算量较大,支持显卡硬件加速比较困难,不太常用
6、。有一些方法可以通过着色编程直接实现。65.2 角色、场景、道具制作 5.2.1 建模游戏3D美术是一种低多边形的艺术 PolyPoly建模建模 3DS max中可以使用Mesh、Poly、Patch和NURBS等建模工具,但由于游戏用到的角色模型是以低面数模型为基础,因此几乎没有使用NURBS方法的,而是使用多边形Poly建模,Maya同样具有Poly建模方式。在3D软件中制作游戏模型的时候,通常都是用四边形面,只有在计算面数的时候才转换为三角面来计算。LOD系统需要建立模型的多个版本,并将依据模型离观察者的远近程度来改变屏幕上的LOD级别 7Polygon建模8拆分UV5.2.2拆分UV
7、三维游戏的世界里,各种角色模型几乎都是三维的,然而贴图则是二维的,因此要想给三维模型贴上美丽的“外衣”,就需要把三维的模型“展平”为二维的平面,然后给这个平面进行“浓妆重彩”,最后再把这种绘制过的平面贴回到三维模型上,模型就变得栩栩如生了。而所谓“展平”的工作,在三维软件中就叫做“拆分UV”,或“展UV”95.2.3贴图绘制 一个游戏角色贴图的好坏可以说对角色的形象塑造起了70的作用。对于面数比较低的角色而言,游戏角色的大部分细节都是靠贴图来表现的。贴图绘制 把模型拆分UV后,经过细心的调整,就可把这种二维UV图导入到诸如Photoshop类的绘图软件中,对UV图进行精心的绘制,成为游戏贴图。
8、游戏贴图的长宽尺寸都必须是2的倍数的组合 1011魔兽角色贴图125.2.4 游戏动画 除了游戏片头和一些过渡场合会有动画外,制作好的角色在游戏环境中要做移动、跳跃等各种动作,玩家在屏幕上所见到的并不是一幅静止的画,而是动画。在3D游戏中形成动画有两种方式,一种是Morphing动画,另一种是蒙皮骨骼动画。Morphing动画 Morphing动画过程,是从基于网格型的关键帧Mesh1过渡到Mesh2,再从Mesh2过渡到Mesh3,以至meshN的一个渐变过程。在文件中存储了这些关键帧Meshl,Mesh2,MeshN,接下来的工作就是对关键帧之间的不存在的帧进行插值,从而创造连续的动画。蒙
9、皮骨骼动画(Skin Mesh)建立角色骨骼 蒙皮骨骼动画的起源思想很简单,自然界的大多数动物都拥有一套骨骼,骨骼是身体的框架,身体的皮毛血肉都是依附于骨骼。当骨骼开始运动的时候,依附于对应骨骼的皮毛血肉都随骨骼一起运动。13建立角色骨骼14创建骨骼15骨骼和人物模型对好位置16骨骼与模型封套:连接骨骼与模型 在Modify(修改面板)中选择Physique(蒙皮命令),通过相应调整操作,将模型与骨骼系统连接起来。有了骨骼就能制作骨骼关键帧动画,只要对骨骼进行操作,完成动作的动画设定操作后,Mesh模型这张“皮”将跟随骨骼动作,形成蒙皮骨骼动画。17动画185.3 游戏效果实现5.3.1 声音
10、系统 1)OpenAL OpenAL是一个声音系统的API,是由创新公司创立的开放音频库OpenAL(Open Audio Library),OpenAL是对音频硬件的一个软件接口 2)声音术语 闭塞-意味着一个声音在播放时听者在他们之间有一些闭合的障碍物 障碍是听者和声音之间的障碍物并不是闭合的 3)声音的位置 4)游戏中的音轨 5.3.2 视觉效果的实现 1)光照与着色 游戏运行中,引擎要进行一系列变换运算,通常在观察空间的坐标空间中,最重要的运算之一就是光照计算。顶点光照:要决定一个顶点被多少个多边形共享,并计算出共享该顶点的所有多边形法向量的均值(称为法向量),并将该法向量赋予顶点。用
11、硬件转换与光照(TL)来帮助快速完成,不足之处是它不能产生阴影。19 平面光照:绘制一个多边形时,让渲染引擎把整个多边形都着上一种指定的颜色。该方法中,多边形均对应同一个光强度,表面上所有点都用相同的强度值显示,渲染绘制时得到一种平面效果,多边形的边缘就不会精确的显示出来,使得表面看起来比较平滑。顶点着色(Gouraud着色):让渲染引擎给每个顶点赋予特定的颜色。在绘制多边形上各点投影所对应的像素时,根据它们与各顶点的距离,对这些顶点的颜色进行插值计算。Phong着色:如同Gouraud着色,通过纹理工作,但不对每个顶点颜色进行插值决定像素颜色值,而是对每个顶点的法向量进行插值,Phong着色
12、可以得到更加平滑的效果,因为每个像素都需要进行光照计算,其绘制非常耗费时间。Phong着色比Gouraud着色计算更昂贵,但效果最好,可以达到镜面高光效果。而这些都需要在游戏开发中折衷权衡。202)不同的灯光 照明映射:用第二个纹理映射(照明映射)与已有的纹理混合来产生照明效果 动态照明:例如灯光移动,或者没有程序的干预而打开和关闭灯光,就必须在每一帧重新生成照明映射,按照动态灯光的运动方式修改这些照明映射。灯光映射能够快速地渲染,但对存储这些灯光纹理所需的内存消耗非常多 混合照明:例如场景使用照明映射,动画模型使用顶点照明。预先处理的灯光不会对动画模型产生正确的效果,只是整个多边形模型得到灯
13、光的全部光照值,而动态照明被用来产生正确的效果 3)纹理压缩 纹理在使3D场景看起来真实方面异常重要,它们是应用到场景区域或对象的一些分解成多边形的小图片。纹理压缩是在保持图片信息的情况下,让纹理数据量更小些的一种方法。占用较少的游戏存储空间和3D显卡存储空间。214)MIP映射(多纹理映射)游戏引擎用来减少纹理内存和带宽需求的另外一个技术就是MIP映射。MIP映射技术通过预先处理纹理,产生它的多个拷贝纹理,每个相继的拷贝是上一个拷贝的一半大小使用MIP映射,可以在显示卡应用纹理之前,自己缩放图像,当3D显卡用纹理绘制多边形时,它检测到缩放因子,但只是要使用小一些的纹理,而不是缩小最大的纹理,
14、这样看起来会更好一些 5)多重纹理与凹凸映射 具有多流水线的3D加速卡,多重纹理可以在一遍渲染过程中完成。产生多重纹理效果时,先用一个纹理绘制多边形,然后再用另外一个纹理透明地绘制在多边形上面。这可以使纹理看上去在移动,或脉动,甚至产生阴影效果 225.3.3 粒子系统粒子系统可实现的效果 火把上的火苗 汽车排出的尾气 一群发怒的异型生物攻击时编队 成群或者成串的物体 (例)运动效果,如激起的草皮、树叶、碎片粒子制作工具 一个具体的游戏如何处理粒子系统数据和粒子资源,是引擎的任务。也可在游戏中采用自己的粒子制作工具,但不见得效果好。在游戏引擎中,支持标准工具的系统,如3DS max、Maya等
15、。5.3.4 游戏物理学 作为游戏开发者来说,必须正确地处理地心引力,速度变化,惯性以及放置在世界里面的其它对象的碰撞,力和反作用力,力在重量点周围作用等等。这都被看作是游戏物理学,是现代游戏引擎的必备因素。在已经存入计算机内存中的游戏世界结构中,必须防止角色从里面掉出去,并且要处理地板,斜坡,墙壁,门,以及移动平台等引起的物理现象。235.4 VC+编程 编程最主要解决的是游戏引擎的编写和使用问题 5.4.1 游戏引擎架构 1)系统:系统是引擎与机器本身作通信交互的部件。一个系统可以分为若干子系统,这些子系统有图形、输入、声音、计时器(Timer)、配置等。主系统负责初始化、更新以及关闭所有
16、的子系统。2)图形子系统:用于在屏幕上画出画面,大多数是利用OpenGL,D3D或是软件渲染(Software rendering)实现。在最理想的情况下,可以支持所有这些API,然后抽象出一个“图形层”,并将它置于API实现之上,这将给客户开发人员或是玩家更多的选择,以获取更好的兼容性和表现效果。3)输入子系统:需要把来自各种不同的输入装置的输入触发做统一的输入控制处理。在游戏中,系统要检测玩家角色的位置是否有所变动,而各种输入装置都是向输入子系统发出请求信息,由输入子系统来检测并作出正确响应。4)声音子系统:负责载入、播放声音。5)计时器系统:游戏里任何物体的移动都是通过时间触发器来做变化
17、的,3D引擎中很多出色的表现都是基于“时间系统”。24 6)配置系统:位于所有子系统的顶端,它负责读取配置记录文件,命令行参数,或是实现修改设置(setup)。在系统初始化以及运行期间,所有的子系统都将一直与它保持通讯。配置系统可以简单方便地实现诸如:切换图像解析度和色深,定义按钮,声音支持选项,以及载入游戏等。将游戏设计得配置性好一些,将为调试与测试带来更大的方便,玩家也能很方便地选择他们喜欢的运行方式。7)控制台:通过命令行变量与函数,就能够在运行时改变游戏或引擎的设置,而不需要重启。通过控制台,开发期间输出调试信息,可以做些非常简便的控制,打印出错误信息,将提高效率。8)支持:包含引擎中
18、所有数学成分(点、线、矩阵等),内存管理,文件载入器,数据容器等。9)引擎内核:渲染器可拆分为几个部分:可见裁减、碰撞检测与反馈、摄像机、静态几何体、动态几何体、粒子系统、布告板、网格、天空体、光线、雾、节点阴影和输出。其中每一个部分都需要一个接口来方便地实现改变设置、位置、方向以及其他可能与系统相关的属性配置。10)游戏介质层:引擎的每一部分都有动态的属性,而该引擎/游戏介质层提供了一个接口去修改这些动态属性。255.4.2 编程简述 Windows系统是一个庞大的系统,拥有Win32 API、DirectX、OLE、MFC、ALT等等,游戏编程并不需要全部学会,只选择相关的C+语言和少数的
19、Win32 API,以及要重点掌握的DirectX就行了。某位游戏设计师曾说,编程设计要做的只是如下几项工作:打开窗口 将图片从文件中读入并显示 显示文字 显示菜单 读入脚本并执行 在背景中播放音乐 追加一些华丽的功能 尽管他可能只是针对某些特定的游戏类型,但也简练地说出了游戏编程的框架。26 在VC+环境中,用C+编写的程序流程和Windows程序的基本流程是一样的,即:v从WinMain开始v登陆注册窗口类(RegisterClass)v建立窗口(CXreateWindow)v建立消息循环(GetMessage-DispatchMessage)这是程序的“固定规则”,应用软件间的差异就在于
20、其窗口标题、数量和动作等,无论是哪一种游戏(应用软件)到这个阶段为止的程序大致相同。27DirectX 和 DirectX SDK DirectX是微软开发的应用于计算机平台的多媒体控制处理引擎,全面处理2D、3D图形图像,声音的输入输出,各种外设的驱动及可靠的通信服务。DirectX SDK(Software Development Kit)是微软公司提供的用于开发DirectX应用程序的开发工具包,它提供了一整套API如下:Direct 3D(D3D)集成了开发DirectX程序3D图形的所有API函数Direct Graphics =Direct 3D +Direct DrawDirec
21、t Music 支持MIDI、Wave等Direct Sound 支持声音播放、混音Direct Input 支持游戏游戏外设Direct Play 支持网络游戏游戏接口Direct Show 对数据流高质量捕捉和回放,支持MPEG、AVI、MP3、WAV、ASF等DirectSetup 提供DirectX的自动安装功能DirectX Media Objects 提供对数据流对象的写入和使用操作,视频、音频的编码、解码以及效果 28图形绘制3D物体建模 产生非T&L顶点投影变换 投影坐标系表示模型几何变换 世界坐标系表示图形纹理摄像机变换 观察坐标系表示光照处理视口变换 屏幕坐标表示T&L顶点
22、,纹理映射,光栅化处理Direct3D渲染管线 295.5 脚本系统5.5.1 脚本简介 什么是脚本:是一种运行在某种程序内部的程序。在游戏开发中应用某种系统,使得设计人员可以不求助于编程人员,而是按照自己的需求,在系统中精确创建和平衡敌人、武器及其他游戏行为,这种系统就称之为脚本。实现脚本编程的最根本原因是要避免硬编码。如果将游戏内容和游戏引擎相分离,就可在不需要重新编译整个工程的情况下调整、测试和修改游戏的机制和特性。并能很容易进行扩展,游戏逻辑可被视为模块化内容,允许它像图形和声音一样灵活和可交互。cpu操作系统操作系统引擎引擎虚拟机脚本图形 图像 视频音效音乐声音视觉应用程序30脚本优
23、缺点 1优点 易学和易控,原来由编辑人员进行的工作,可以由设计人员本身完成。设计得当的脚本系统,可以允许整个系统很好地移植到其他系统中。大部分系统中脚本语言是根据需要随时载入的,而不是像通常编程语言那样一次性编辑而载入内存的。2缺点 如果要取得稳定可靠的功能,则代码的开发量非常大。一旦出现问题,调试起来会较困难,运行效率比较低。5.5.2 脚本技术的选择 需要游戏程序员和设计员合作,创造一个强大而稳定灵活的脚本系统(由于目前软件水平的发展以及关卡代码的开放,这个问题已不很困难)。可选:Lau、Python、JavaScript、3DSmaxScript31脚本例:Behavior monste
24、r;/怪物行为 If(monster-idle)/怪物在游荡(谷仓、农舍、草料库)monster-walk(barn);monster-walk(farmhouse);monster-walk(silo);elsif(monster-sees(player)/怪物看见玩家 If (player-bleeding)/玩家在流血,怪物冲向玩家 Monster-run(player);elsif (player-has_weapon)/如果玩家有武器,怪物逃向草料库 Monster-run(silo);else monster-walk-(player)/怪物走向玩家32触发器(在情节脚本中可使用)
25、区域触发器 是用来建造一个区域,当角色进入次区域时就触发响应脚本。动作触发器 当玩家执行一个动作时,触发响应。天气触发器 利用一个天气触发器来控制游戏世界的天气。材质触发器 当系统中的材质触发器触发时,场景中的物体材质会发生变化。音效触发器 包含所有音效事件的触发响应。消息触发器 直接给玩家输出一条信息,向玩家界面发一个消息或者引发一 个NPC事件。光效触发器 用于改变光效果33现成游戏开发软件介绍现成游戏开发软件介绍 RPG Maker XP Game Maker RPG Maker XP是一款让玩家自行制作RPG游戏的工具软件,制作完成的游戏在没有安装RPG Maker XP的电脑上也能运
26、行,并且还增加了”Ruby脚本系统”,使得游戏制作的自由度大大提高。RPG Maker XP是一款不需要编程知识也能独自开发制作游戏的软件。它可让设计者专注于故事情节、事件、人物等创意的发挥,设计者只需要用鼠标作简单的点选动作即可。软件工具会自动完成复杂的程序协作,设计者需要做的就是游戏舞台与背景的规划,以及游戏风格及角色的设定。34Game Maker Game Maker以简单的拖放方式以及对对象的简单编程,完成2D游戏的制作,软件自身带有”The Game Maker Language(GML)”,可以进行简单的脚本语言编写。35综合利用工具 关卡编辑器还是以导入商业软件包设计好的图形为主,关卡编辑器可以提供复杂的图形编辑器功能。但主要以调整为主。除使用关卡工具编辑器之外,还要用到一些通用软件和工具。如3D MAX、MAYA等。36第五章 小结:v基础用语v建模v拆分UVv贴图绘制v游戏动画:Morphing动画、蒙皮骨骼动画v游戏效果实现:声音系统、视觉效果、粒子系统v游戏物理学vVC+编程vDirectX 和 DirectX SDKvDirect3D渲染管线v脚本系统:什么是脚本;为什么要实现脚本编程;脚本优缺点v触发器vv现成游戏开发软件现成游戏开发软件37返回粒子系统效果38