游戏引擎的内核是什么?引擎是怎么来的?

游戏引擎的内核是什么?引擎是怎么来的?

原作者:杰克·辛普森

译者:向海

电子邮件:模块化

第 1 部分:游戏引擎简介、渲染和构建 3D 世界简介

自《毁灭战士》游戏时代以来,我们已经取得了长足的进步。 《DOOM》不仅是一款伟大的游戏,它还创造了一种新的游戏编程模型:游戏“引擎”。 这种模块化、可伸缩和可扩展的设计理念允许游戏玩家和程序员深入研究游戏的核心,并用新的模型、场景和声音创建新的游戏,或者在现有的游戏素材中添加新的东西。 。 大量新游戏是基于现有游戏引擎开发的,其中大部分是基于ID的Quake引擎。 这些游戏包括《反恐精英》、《军团要塞》、《Tac Ops》、《Strike Force》和《Quake Soccer》。

doom游戏引擎_引擎游戏是干吗的_壁纸引擎游戏

Tac Ops 和 Strike Force 都使用 Unreal Tournament 引擎。 事实上,“游戏引擎”已经成为游戏玩家之间交流的标准术语,但是引擎在哪里停止,游戏从哪里开始呢? 像素的渲染、声音的播放、怪物的思考以及游戏事件的触发。 ,游戏中这一切的背后是什么? 如果您曾经思考过这些问题并想了解更多有关游戏驱动因素的信息,那么本文可以告诉您这一点。 本文分多个部分来深入剖析游戏引擎的核心,尤其是Quake引擎,因为我最近工作的公司Raven Software已经开发了多款基于Quake引擎的游戏,包括著名的《Soldier》财富动画

开始编码

让我们首先看看游戏引擎和游戏本身之间的主要区别。 许多人将游戏引擎与游戏整体混淆。 这有点像将汽车发动机与整个汽车混淆。 您可以将发动机从汽车中取出,再建造一个外壳,然后再次使用发动机。 游戏也是如此。 游戏引擎被定义为所有非游戏特定的技术。 游戏部分是所有被称为“资产”的内容(模型、动画、声音、人工智能和物理)以及使游戏运行或控制其运行方式特别需要的程序代码,例如AI - 人工智能。

对于那些看过《雷神之锤》游戏结构的人来说,游戏引擎就是《雷神之锤》。 exe,游戏部分是QAGame。 dll和CGame.dll dll。 如果您不知道这意味着什么也没关系; 我也不知道这意味着什么,直到有人向我解释。 但你会准确地理解它的含义。 本游戏引擎指南分为十一个部分。 是的,从数量上来说,一共有十一个部分! 每部分约3000字。 现在让我们从第一部分开始探索,深入到我们玩的游戏的核心。 在这里我们将了解一些基本的东西doom游戏引擎,为后面的章节铺平道路。 。 。 温泉

渲染器

引擎游戏是干吗的_doom游戏引擎_壁纸引擎游戏

让我们从渲染器开始讨论游戏引擎设计。 我们将从游戏开发者的角度来探讨这些问题(本文的作者背景)。事实上,在本文的各个段落中,我们经常会从游戏开发者的角度来讨论,并让您像我们一样思考! 设计

什么是渲染器以及为什么它如此重要? 好吧,没有它,你将看不到任何东西。 它将游戏场景可视化,让玩家/观众看到场景,让玩家根据屏幕上看到的内容做出适当的决定。 尽管我们下面的讨论可能对新手来说有点吓人,但现在请忽略它。 渲染器有什么作用? 为什么有必要? 我们将解释这些重要问题。 奥姆

在构建游戏引擎时,您通常要做的第一件事就是构建渲染器。 因为如果您看不到任何东西,那么您如何知道您的程序代码正在运行? 超过50%的CPU处理时间花费在渲染器上; 一般来说,游戏开发者会在这一部分受到最严厉的评判。 如果我们在这个部门表现不好,事情就会变得很糟糕。 我们的编程技术、我们的游戏、我们的公司将在10天之内成为业界的笑话。 这也是我们最依赖外部供应商和力量的地方,他们将解决最大数量的潜在运营目标。 话虽如此,构建渲染器并不像听起来那么有吸引力(确实如此),但如果没有一个好的渲染器,游戏可能永远不会进入前 10 名。

现在,在屏幕上生成像素涉及到 3D 加速卡、API、三维空间数学、对 3D 硬件工作原理的理解等等。 对于主机游戏,需要相同类型的知识,但至少对于主机,您不必尝试击中移动目标。 由于主机的硬件配置是固定的“时间快照”,与PC(我的电脑)不同,其硬件配置在主机的生命周期内不会改变。

一般来说,渲染器的工作就是创造游戏的视觉亮点。 事实上,实现这个目标需要很多技能。 3D 图形本质上是一门以最小的努力创造最大效果的艺术,因为额外的 3D 处理在处理器时间和内存带宽方面非常昂贵。 这也是一个预算问题,弄清楚你想在哪里花费处理器时间,以及你宁愿在哪里节省一些时间以获得最佳的整体结果。 接下来我们将介绍这方面的一些工具以及如何更好地使用它们来使游戏引擎工作。

壁纸引擎游戏_doom游戏引擎_引擎游戏是干吗的

构建 3D 世界

最近,当我和一位从事计算机图形学工作了几年的人交谈时,她向我透露doom游戏引擎,当她第一次看到计算机 3D 图像的实时操纵时,她不知道这是如何实现的,我不知道不知道电脑如何存储3D图像。 对于今天街上的普通人来说可能也是如此,即使他们时不时玩电脑游戏、主机游戏或街机游戏。 下面我们将从游戏设计师的角度讨论创建3D世界的一些细节。 你还应该看看Dave Salvator写的《Introduction to the 3D Pipeline》,对3D图像生成的主要流程有一个整体的了解。

3D 对象(对象)在 3D 世界中存储为一系列点(称为顶点),这些点彼此相关,因此计算机知道如何在世界中的这些点之间绘制线条或填充曲面。 立方体由 8 个点组成,每个角对应一个点。 立方体有 6 个表面,每个表面代表其每个面。 这是 3D 对象存储的基础。 对于一些更复杂的 3D 对象,例如 Quake 关卡,将有数千个(有时是数十万个)顶点和数千个多边形表面。

请参阅上图的线框表示(注意:原始文章此处有图片)。 本质上和上面的立方体例子类似,它只是一个由很多很多小多边形组成的复杂场景。

模型和世界的存储方式是渲染器功能的一部分,而不是应用程序/游戏的功能。 游戏逻辑不需要知道对象在内存中如何表示,也不需要知道渲染器如何显示它们。 游戏只需要知道渲染器将使用正确的视野来表示对象,并在正确的动画帧中显示正确的模型。

在一个好的引擎中,渲染器应该可以完全替换为新的渲染器,而无需更改游戏中的一行代码。 很多跨平台的引擎,还有很多自研的游戏机引擎都是这样,比如Unreal引擎。 比如这个游戏的GameCube版本的渲染器就可以随意更换。

让我们再看一下内部表示——除了使用坐标系之外,还有其他方法可以在计算机内存中表示空间中的点。 从数学上讲,您可以使用方程来描述直线或曲线并获得多边形,并且几乎所有 3D 显卡都使用多边形作为其最终渲染图元。 图元是可以在任何显卡上使用的最低级别的绘图(渲染)单元。 几乎所有硬件都使用具有三个顶点的多边形(三角形)。 新一代的 nVidia 和 ATI 显卡允许您以数学方式进行渲染(称为高阶表面),但由于这不是所有显卡的标准,因此您还不能依赖它作为渲染策略。 从计算角度来看,这通常有点昂贵,但它通常是新实验技术的基础,例如陆地表面的渲染或物体上锐利边缘的柔化。 我们将在下面的表面补丁部分更详细地介绍这些高阶表面。

剔除概述

问题来了。 我现在拥有一个由数十万个顶点/多边形描述的世界。 从第一人称视角来看,我站在我们的 3D 世界一边。 世界上的一些多边形在视野中是可见的贴图笔刷,而另一些多边形则是不可见的,因为某些物体(例如可见的墙壁)遮挡了它们。 即使是最好的游戏编码员也无法在当前 3D 显卡的视野中处理 300,000 个三角形,并且仍保持 60fps(主要目标)。 显卡无法处理它,因此我们必须编写一些代码来删除不可见的多边形,然后再将它们交给显卡。 这个过程称为剔除。

有许多不同的扑杀方法。 在我们开始讨论之前,让我们先探讨一下为什么显卡无法处理极高的多边形数量。 我的意思是,最新的显卡不能每秒处理数百万个多边形吗? 不是应该可以处理的吗? 首先,您必须了解多边形生成率的营销声明和现实世界的多边形生成率。 营销上宣称的多边形生成率是显卡理论上能够达到的多边形生成率。

引擎游戏是干吗的_doom游戏引擎_壁纸引擎游戏

如果所有的多边形都在屏幕上,相同的纹理,相同的大小,并且将多边形发送到显卡的应用程序除了发送多边形之外什么也不做,则确定了显卡此时可以处理的多边形数量由图形芯片制造商提供。 给你的数字。 然而,在真实的游戏情况下,应用程序通常会在后台执行许多其他操作 - 多边形的 3D 变换、光照计算、将更多纹理复制到显卡内存等。不仅需要将纹理发送到显卡卡,还有每个多边形细节。 一些较新的显卡允许您将模型/世界几何细节实际存储在显卡内存本身中,但这可能很昂贵,并且会占用通常可用于纹理的空间,因此您最好确保它在每个帧中都存在。 使用这些模型的顶点,否则您只是在浪费显卡上的存储空间。 我们就到此为止吧。 重要的是程序开发,当你实际使用显卡时,并不一定能达到你在显卡包装盒上看到的指标。 如果您的 CPU 较慢或没有足够的内存,这种差异将尤其如此。

基本消除方法

最简单的消除方法是将世界划分为区域,每个区域都有一个其他可见区域的列表。 这样,您只需显示任何给定点的可见部分。 如何生成可见视野区域列表是诀窍。 此外,有很多方法可以用来生成可见区域列表,例如BSP树、窥视孔等。

我确信您在谈论 DOOM 或 QUAKE 时听说过 BSP 这个术语。 它代表二进制空间划分。 BSP 是一种将世界划分为小区域的方法。 通过组织世界的多边形,可以轻松确定哪些区域可见,哪些区域不可见,从而使不想做太多绘图工作的基于软件的渲染器变得更容易。 。 它还可以让您以非常有效的方式了解您在世界的哪个位置。

在基于窥视孔的引擎中(通过 3D Realms 取消的 Prey 项目首次引入游戏世界),每个区域(或房间)都有自己的模型,可以通过每个区域的门(或窥视孔)看到该模型。 附加部分。 渲染器将​​每个区域绘制为一个独立的场景。 这就是它的一般原则。 可以说这是任何渲染器的必要部分,而且非常重要。 尽管其中一些技术被归类为“遮挡剔除”,但它们都有相同的目的:尽早消除不必要的工作。

对于FPS游戏(第一人称射击游戏)来说,视野中往往有很多三角形,玩家负责控制视野。 丢弃或消除看不见的三角形是绝对必要的。 对于空间模拟也是如此,您可以看到很远的地方 - 排除超出视觉范围的事物很重要。 对于视野有限的游戏——例如RTS(即时战略游戏)——通常更容易实现。 一般渲染器这部分还是由软件来完成,而不是由显卡来完成。 显卡完成这部分工作只是时间问题。

文章来源:http://www.noobyard.com/article/p-btwowjkd-gr.html