没有合适的资源?快使用搜索试试~ 我知道了~
详细的介绍了3D游戏引擎的各个组成部分,包括渲染,光照,纹理,特殊效果,粒子系统,音乐等等。。
资源推荐
资源详情
资源评论
原文作者:
译者:向海
:
第 部分游戏引擎介绍,渲染和构造 世界
介绍
自 游戏时代以来我们已经走了很远。 不只是一款伟大的游戏,它同时也开创
了一种新的游戏编程模式游戏 引擎 。这种模块化,可伸缩和扩展的设计观念可以让游戏玩
家和程序设计者深入到游戏核心,用新的模型,场景和声音创造新的游戏,或向已有的游戏素
材中添加新的东西。大量的新游戏根据已经存在的游戏引擎开发出来,而大多数都以 ! 公司的
"# 引擎为基础,这些游戏包括 #$%$,&'$,&,$',以
及 "#。&和 $'都使用了 (&#$引擎。事实上, 游戏引
擎 已经成为游戏玩家之间交流的标准用语,但是究竟引擎止于何处,而游戏又从哪里开始呢)
像素的渲染,声音的播放,怪物的思考以及游戏事件的触发,游戏中所有这一切的幕后又是什
么呢?如果你曾经思考过这些问题,而且想要知道更多驱动游戏进行的东西,那么这篇文章正
好可以告诉你这些。本文分多个部分深入剖析了游戏引擎的内核,特别是 "# 引擎,因为我
最近工作的公司 *+,$ 已经在 "# 引擎的基础上开发出了多款游戏,其中包括著名
的 ,'$#。
开始
让我们首先来看看一个游戏引擎和游戏本身之间的主要区别。许多人们会混淆游戏引擎和
整个游戏。这有点像把一个汽车发动机和整个汽车混淆起来一样 。你能够从汽车里面取出发
动机,建造另外一个外壳,再使用发动机一次。游戏也像那。游戏引擎被定义为所有的非游
戏特有的技术。游戏部份是被称为-资产-的所有内容.模型,动画,声音,人工智能和物理学/
和为了使游戏运行或者控制如何运行而特别需要的程序代码,比如说 0!11人工智能。
对于曾经看过"#游戏结构的人来说,游戏引擎就是"#。2,而游戏部分则是
"0。和。。如果你不知道这是什么意思,也没有什么关系;在有人向我解
释它以前,我也不知道是什么意思。但是你将会完全明白它的意思。这篇游戏引擎指导分为
十一个部份。是的,从数量上来说,总共是十一个部份3每个部分大概 444 字左右。现在就从
第一部分开始我们的探索吧,深入我们所玩游戏的内核,在这里我们将了解一些基本的东西,
为后面的章节作铺垫。。。
渲染器
让我们从渲染器来开始游戏引擎设计的探讨吧, 我们将从游戏开发者.本文作者的背景/的
角度来探讨这些问题。事实上,在本文的各个段落,我们将常常从游戏开发者的角度探讨,也
让您像我们一样思考问题3
什么是渲染器,为什么它又这么重要呢?好吧,如果没有它,你将什么也看不到。它让游
戏场景可视化,让玩家5观众可以看见场景,从而让玩家能够根据屏幕上所看到的东西作出适当
的决断。尽管我们下面的探讨可能让新手感到有些恐惧,先别去理会它。渲染器做些什么?为
什么它是必须的?我们将会解释这些重要问题。
当构造一个游戏引擎的时候,你通常想做的第一件事情就是建造渲染器。因为如果看不见
任何东西–那么你又如何知道你的程序代码在工作呢)超过647的8(处理时间花费在渲染器
上面;通常也是在这个部分,游戏开发者将会受到最苛刻的评判。如果我们在这个部分表现很
差,事情将会变得非常糟糕,我们的程序技术,我们的游戏和我们的公司将在4天之内变成
业界的笑话。它也是我们最依赖于外部厂商和力量的地方,在这里他们将处理最大限度的潜在
操作目标。如此说来,建造一个渲染器确实不象听起来那么吸引人(事实如此),但如果没
有一个好的渲染器,游戏或许永远不会跻身于排行榜前 4名。
如今,在屏幕上生成像素,涉及到加速卡,08!,三维空间数学,对硬件如何工
作的理解等等。对於主机(游戏机)游戏来说,也需要相同类型的知识,但是至少对于主机,
你不必去尝试击中一个移动中的目标。因为一台主机的硬件配置是固定的 时间快照 ,和
8(个人计算机)不同,在一台主机的生命期中,它的硬件配置不会改变。
在一般意义上,渲染器的工作就是要创造出游戏的视觉闪光点,实际上达到这个目标需要
大量的技巧。 图形本质上是用最少的努力创造出最大效果的一门艺术,因为额外的处理
在处理器时间和和內存带宽方面都是极为昂贵的。它也是一种预算,要弄清楚你想在什么地方
花费处理器时间,而你宁愿在什么地方节省一些从而达到最好的整体效果。接下来我们将会介
绍一些这方面的工具,以及怎样更好的用它们让游戏引擎工作。
建造 3D 世界
最近,当我和一位从事计算机图形方面工作长达数年之久的人会谈时,她向我吐露道,当
她第一次看到实时操纵计算机图象时,她不知道这是怎么实现的,也不知道计算机如何能
够存储图象。今天这对于在大街上的普通人来说或许是真实的,即使他们时常玩 8游戏,
游戏机游戏,或街机游戏。
下面我们将从游戏设计者的角度讨论创造 世界的一些细节,你也应该看一看+
+$所写的“管线导论“,以便对 图象生成的主要过程有一个整体的了解。
物体(对象)被储存成世界中的一系列点.被称为顶点/,彼此之间有相互关系,所
以计算机知道如何在世界中的这些点之间画线或者是填充表面。 一个立方体由 9 个点组成,每
个角一个点。立方体有 : 个表面,分别代表它的每一个面。这就是对象储存的基础。对于
一些比较复杂的物体,比如说一个"#的关卡,将有数以千计.有时数以十万计/的顶点,
和数以千计的多边形表面。
参见上图的线框表示(注:原文在这里有一幅图)。本质上与上面的立方体例子类似,它
仅仅是由许许多多的小多边形组成的一些复杂场景。模型和世界如何储存是渲染器的一部份功
能,而不属于应用程序5游戏部份。游戏逻辑不需要知道对象在內存中如何表示,也不需要知
道渲染器将怎样把他们显示出来。游戏只是需要知道渲染器将使用正确的视野去表示对象,并
将在正确的动画幀中把正确的模型显示出来。
在一个好的引擎中,渲染器应该是可以完全被一个新的渲染器替换掉,并且不需要去改动
游戏的一行代码。许多跨平台引擎,而且许多自行开发的游戏机引擎就是这样的,如(引
擎,11举例来说,这个游戏#;版本的渲染器就可以被你任意的替换掉。
让我们再看看内部的表示方法—除了使用坐标系统,还有其他方法可以在计算机內存里表
示空间的点。在数学上,你可以使用一个方程式来描述直线或曲线,并得到多边形,而几乎所
有的显示卡都使用多边形来作为它们的最终渲染图元。一个图元就是你在任何显示卡上面
所能使用的最低级的绘制(渲染)单位,几乎所有的硬件都是使用三个顶点的多边形.三角形/。
新一代的<和0&!显卡可以允许你以数学方式渲染.被称为高次表面/,但因为这不是所有
图形卡的标准,你还不能靠它作为渲染策略。
从计算的角度来看,这通常有些昂贵,但它时常是新的实验技术的基础,例如,地表的渲
染,或者对物件锐利的边缘进行柔化。我们将会在下面的曲面片小节中更进一步介绍这些高次
表面。
剔除概观
问题来了。我现在有一个由几十万个顶点5多边形描述的世界。我以第一人称视角位于我
们这个世界的一边。在视野中可以看见世界的一些多边形,而另外一些则不可见,因为一
些物体,比如一面看得见的墙壁,遮挡住了它们。即使是最好的游戏编码人员,在目前的
显卡上,在一个视野中也不能处理44,444 个三角形且仍然维持:4,.一个主要目标/。显卡
不能处理它,因此我们必须写一些代码,在把它们交给显卡处理之前除去那些看不见的多边形。
这个过程被称为剔除。
有许多不同的剔除方法。在深入了解这些之前,让我们探讨一下为什么图形显示卡不能处
理超高数量的多边形。我是说,最新的图形卡每秒钟不能处理几百万个多边形吗?它不应该能
够处理吗)首先,你必须理解市场销售宣称的多边形生成率和真实世界的多边形生成率。 行销
上宣称的多边形生成率是图形显示卡理论上能够达到的多边形生成率。
如果全部多边形都在屏幕上,相同的纹理,相同的尺寸大小,正在往显示卡上传送多边形
的应用程序除了传送多边形以外什么也不做,这时显卡能处理多少多边形数量,就是图形芯片
厂商呈现给你的数字。
然而,在真实的游戏情形中,应用程序时常在后台做着许多其他的事情11多边形的变
换,光照计算,拷贝较多的纹理到显卡內存,等等。不仅纹理要送到显示卡,而且还有每个
多边形的细节。一些比较新的显卡允许你实际上在显卡內存本身里面储存模型5世界几何细节,
但这可能是昂贵的,将会耗光纹理正常可以使用的空间,所以你最好能确定每一幀都在使用这
些模型的顶点,否则你只是在浪费显示卡上的存储空间。我们就说到这里了。重要的是,在
实际使用显卡时,并不必然就能达到你在显卡包装盒上所看到的那些指标,如果你有一个比较
慢速的 8(,或没有足够的內存时,这种差异就尤为真实。
基本的剔除方法
最简单的剔除方式就是把世界分成区域,每个区域有一个其他可见区域的列表。那样,
你只需要显示针对任何给定点的可见部分。如何生成可见视野区域的列表是技巧所在。再者,
有许多方法可以用来生成可见区域列表,如=8树,窥孔等等。
可以肯定,当谈论或"(0>时,你已经听到过使用=8这个术语了。它表示二
叉空间分割。
=8是一种将世界分成小区域的的方法,通过组织世界的多边形,容易确定哪些区域是可
见的而哪些是不可见的–从而方便了那些不想做太多绘制工作的基于软件的渲染器。它同时也
以一种非常有效的方式让你知道你位于世界中的什么地方。
在基于窥孔的引擎.最早由*已经取消的8项目引入游戏世界/里,每个区域.
或房间/都建造有自己的模型,通过每个区域的门.或窥孔/能够看见另外的区段。渲染器把每
个区域作为独立的场景单独绘制。这就是它的大致原理。足以说这是任何一个渲染器的必需部
份,而且非常重要。
尽管一些这样的技术归类在 遮挡剔除 之下,但是他们全部都有同样的目的尽早消除不
必要的工作。对於一个 '8 游戏.第一人称射击游戏/来说,视野中时常有许多三角形,而且游
戏玩家承担视野的控制,丢弃或者剔除不可见的三角形就是绝对必要的了。对空间模拟来说也
是这样的,你可以看见很远很远的地方–剔除超过视觉范围外面的东西就非常重要。对于视
野受到限制的游戏来说–比如*&.即时战略类游戏/11通常比较容易实现。通常渲染器的这个
部份还是由软件来完成,而不是由显卡完成,由显卡来做这部分工作只是一个时间问题。
基本的图形管线流程
一个简单的例子,从游戏到多边形绘制的图形管线过程大致是这样
?游戏决定在游戏中有哪些对象,它们的模型,使用的纹理,他们可能在什么动画幀,
以及它们在游戏世界里的位置。游戏也决定照相机的位置和方向。
?游戏把这些信息传递给渲染器。以模型为例,渲染器首先要查看模型的大小,照相
机的位置,然後决定模型在屏幕上是否全部可见,或者在观察者.照相机视野/的左边,在观
察者的后面,或距离很远而不可见。它甚至会使用一些世界测定方式来计算出模型是否是可见
的。.参见下面这条/
?世界可视化系统决定照相机在世界中的位置,并根据照相机视野决定世界的哪些区
域5多边形是可见的。有许多方法可以完成这个任务,包括把世界分割成许多区域的暴力方法,
每个区域直接为 我能从区域看见区域0=@ ,到更精致的=8.二叉空间分割/世界。所
有通过这些剔除测试的多边形被传递给多边形渲染器进行绘制。
?对於每一个被传递给渲染器的多边形,渲染器依照局部数学.也就是模型动画/和世
界数学.相对于照相机的位置)/对多边形进行变换,并检查决定多边形是不是背对相机 .也就是
远离照相机/。背面的多边形被丢弃。非背面的多边形由渲染器根据发现的附近灯光照亮。然
后渲染器要看多边形使用的纹理,并且确定08!5图形卡正在使用那种纹理作为它的渲染基础。
在这里,多边形被送到渲染08!,然后再送给显卡。
很明显这有些过分简单化了,但你大概理解了。下面的图表摘自 ++$-管线一
文,可以给你多一些具体细节
管线
1高层的概观
应用程序5场景
?场景5几何数据库遍历
?对象的运动,观察相机的运动和瞄准
?对象模型的动画运动
?世界内容的描述
?对象的可见性检查,包括可能的遮挡剔除
?细节层次的选择.A/
B几何
?变换.旋转,平移,缩放/
?从模型空间到世界空间的变换.$/
?从世界空间到观察空间变换
?观察投影
?细节接受5拒绝剔除
?背面剔除.也可以在后面的屏幕空间中做/
光照
?透视分割1变换到裁剪空间
?裁剪
?变换到屏幕空间
三角形生成
?背面剔除.或者在光照计算之前的观察空间中完成/
?斜率5角度计算
?扫瞄线变换
C渲染5光栅化
?着色
?纹理
?雾
?0透明测试
?深度缓冲
?抗锯齿.可选择的/
?显示
通常你会把所有的多边形放到一些列表内,然後根据纹理对这个列表排序.这样你只需要
对显卡传送一次纹理,而不是每个多边形都传送一次/,等等。在过去,会把多边形按照它们
到相机的距离进行排序,首先绘制那些距离相机最远的多边形,但现在由于D缓冲的出现,这
种方法就不是那么重要了。当然那些透明的多边形要除外,它们要在所有的非半透明多边形绘
剩余41页未读,继续阅读
资源评论
yaolin170
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功