一个实用的3-D游戏引擎执行方法(翻译)

  一个实用的3-D游戏引擎执行方法(翻译)

3D游戏引擎实用的执行方法
(A Practical Implementation of a 3-D Game Engine)

摘要:
制作一个3-D游戏引擎并不是一件很简单的任务,因为现在的游戏玩家常常要求在游戏中有着高性能和高质量的输出。在这篇文章中,我们向大家展示了多种实时渲染的算法如何用来在一个实际的3-D游戏引擎中提高性能。我们探究了一个通用的3-D游戏引擎的结构并且讨论了在3-D游戏引擎中的视景图像的任务。我们将从软件工程的角度来研究视景图像,我们将向你展示一种面向对象的和可以方便的通过不同渲染引擎来设计的视景图像。接下来,我们解释了在我们的3-D游戏引擎中用来提高引擎性能的算法。我们在视景图像和物体几何层面上对我们的3-D游戏引擎进行了优化。我们提出的算法在静态和动态的场景中表现的都是相当的好。最后,我们用多处理器在视景图像方面用并行处理的方式来建立个3-D游戏引擎方面作了一下简单的展望。

一、介绍:

在过去的十年里面,计算机游戏行业经历了巨大的增长的黄金时期。在过去的几年里,随着3-D加速硬件设备的飞快的进步,游戏制造行业都将焦点集中在用创新的思想来生产交互式的3-D游戏。3-D游戏引擎是驱动这些游戏的核心技术。简单的来讲,一个3-D擎获得游戏中的3-D物体的几何数据并将这些数据展示在显示设备上,典型的显示设备就是显示器。这个过程就是我们通常所知的渲染。3-D物体的几何数据通常通过一系列的顶点来定义,物体的具体特性(象漫射的颜色,镜面反射以及发射出的颜色等),纹理图,纹理匹配以及一些常用的向量。所有的这些数据在3-D游戏引擎处理途径中经历不同的阶段来决定着这些3-D物体的最终显示的效果。

图1 一个完整的3-D引擎的处理过程。高层的视景图像给用户一种直觉的方式来模拟一个场景,优化的场景保证了场景对于渲染的高效率。
高层视景图像规定了在游戏中的物体之间的关系,它对于游戏开发者来讲也是在游戏中操纵这些物体的一个应用程序接口(API)。在一个场景被渲染之前,视景图像必须为了渲染而被优化。这种优化处理就是典型的将高层视景图像转变成(编译成)优化的视景图像,这种被优化的视景图像就是用了一种非常适用于渲染的数据结构。这就要求开发者去详细的确定每个物体的“线索”:比如这个物体是静止的还是移动的,物体的结构是否随着时间的变化而变化等等。视景物体剔除就是将观察者不能看到的物体丢弃掉的处理过程,尽管细节层次控制可以将相对于观察着者比较远的一些无关紧要的物体给删除掉。所有这些思想的背后就是减少渲染那些你看不见的东西以及减少远端物体几何数据,为了是将送往最终渲染管线的数据减到最少,这些将会明显的提高渲染性能。这些就是一个3-D游戏引擎为了提高它的性能而所要完成的主要任务。
后续的任务,诸如灯光,视角转换,裁减,投影变换以及光栅化,都是渲染引擎为了完成渲染流程所需要承担的任务。渲染引擎,就是经常提及的立即模式渲染引擎,往往都可以被3-D加速硬件支持。两种主要的适用于PC机的渲染引擎就是微软的Direct3D和Silicon Graphics 公司的OpenGL。在这种渲染引擎上开发游戏往往是枯燥和耗费时间的,这些引擎所给的程序接口都是些程序性的和面向硬件的。在接下来的部分,我们将在集中在建立3-D游戏引擎的三个主要的模块:(1)为我们的3-D引擎建立高层场景图像;(2)为了建立优化的场景图像的算法;(3)如何丢弃不在观察者视野范围内的物体,并且适当的控制细节层次控制物体。
2.在3-D引擎中的设计问题
视景图像设计由于它直接牵扯到整个3-D引擎的性能所以显得非常重要。它定义了一种让程序员来模拟视景的方式。一个好的视景图像设计应该允许程序员将更多的视景(诸如物体和它们的排列)包含在视景中,并且想到用最好的方式来展现它们,并且可以忽略掉渲染管线的复杂的控制。程序员将通过视景图像的API来设计3-D引擎。
视景图像设计
在视景图像设计中的第一个问题就是要考虑物体的表现。就像我们上面提到的一样,象Direct3D和OpenGl这样的立即模式的渲染引擎均倾向于拥有自己的面向图形硬件的渲染程序功能函数。很显然,这种面向渲染的设计并不适合于完成我们的视景图像的设计的目标。一个面向对象的视景图像设计明显的是一种比较好的程序模式,在这种模式中允许程序员在视景中用对象的概念来设计3-D游戏。我们将所有的游戏对象都当作视景中的3-D对象来对待。Strauss和Carey已经介绍了完全面向对象的视景图像框架。这个框架的基本的思想就是将3-D视景描述为物体的图像,这种图像成为节点。有很多种类型的节点并且每一个节点都有不同的相关属性。比如说,圆柱形状的节点包含两个参数:半径和高度,但是球状物体仅仅包含一个参数,那就是半径。有一些特定的节点可以包含属于它们的子节点的一些参数。例如,在图2中,描绘了一个汽车的一部分的视景图像。节点组命名为“Body”,它拥有4个子节点来组成汽车的车身。纹理节点包含了定义汽车车身纹理图像的参数。这些参数同样会被命名为“门”的一组节点继承,这些节点用来组成汽车车身的车门。因此,汽车车门将会拥有和车身一样的纹理。通过应用这种方式,我们不仅可以增加资源的可重复利用度,而且也是简单的模拟场景的方式,尤其当我们处理一些视景物体的相对位置时,这种方式显得更有效。变换节点用来描述在父节点下的对象的位置和方向的变换。这些都是相对于父节点的变换。为了得到这些节点的绝对变换(相对于整个场景的变换),当前的这些节点将和它们的父节点的变换相结合(通过矩阵相乘)起来。这样就可以很轻松和简单的一个对象相对与父节点的位置和方向了。这种模型就是通常我们所说的等级场景模型并且是骨骼动画的基础,这种模型通常用来在游戏中的动画的运动部分。

2.2 可移植的视景图形
为了保证我们的游戏能满足尽可能多的玩家的要求,我们必须保证我们的3-D游戏引擎可以在不同的平台和不同的操作系统上运行。因此可移植性是我们设计视景图形的另外一个问题。一个视景图形必须能够在各种目标平台上运行渲染引擎,而且游戏的代码还不能做任何的改动。一个可移植的视景图形必须设计成为不依赖于特殊的渲染引擎才能运行。D

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值