当游戏可以直接绘制像素时,为什么我们拥有诸如OpenGL和DirectX之类的图形框架?


16

游戏和其他图形密集型应用程序使用诸如OpenGL和DirectX之类的框架。此外,它们还需要像素着色器和DX12等功能。

但是,当我们可以逐像素绘制所有内容时,为什么需要所有这些框架和GPU功能?

首先,游戏必须以某种方式进行编译,以便逐像素绘制游戏。这可能会使游戏的可执行文件更大,但是会更快并且可以在任何32位彩色GPU(甚至旧的)上运行吗?

我知道最初的3D游戏是逐像素绘制的,但是为什么现在不这样做呢?


通常,对许多事物执行一项操作比对每个事物单独执行更为有效且容易思考。
user541686 '16

2
因为每个游戏都需要为每个图形卡重写。除非他们不使用图形卡,否则它们会很慢。
user253751 '16

我认为GPU公司必须创建自己的DirectX驱动程序
Suici Doga

1
“但是当我们可以逐像素绘制所有内容时,为什么我们需要所有这些框架和GPU功能?” 那就是好时机。《德军总部3D》,《毁灭战士》,《毁灭公爵3D》,《雷神之锤》和90年代后期的大多数其他游戏都使用纯软件渲染(雷神之锤提供了OpenGL渲染器作为选项)。
el.pescado

1
@MatthewRock您没有帮助。您当然可以在Docker容器中将OS与游戏捆绑在一起,然后分发该容器。这样,用户无需为其发行版安装库依赖项。
纳文

Answers:


23

速度是这样做的最常见原因。实际上,如果您创建自己的操作系统,则可以按照您的建议去做,但由于架构原因,它的运行速度非常慢。因此,假设其速度更快是有缺陷的。即使速度更快,开发效率也会降低(例如,工作速度提高10倍,速度提高1%)。

将数据从CPU复制到图形卡的操作相对较慢。复制的次数越少,更新速度就越快。因此,理想情况下,您将在GPU上拥有大部分数据,并且只更新一小部分数据。与1920x1200或更高像素相比,复制320x200像素像素之间存在巨大的差异。看到随着边的增加,您需要更新的像素数会平方增长。

示例:告诉GPU将图像向右移动10个像素比将像素手动复制到不同位置的视频内存要便宜。

为什么必须通过API?仅仅是因为这不是您的系统。出于安全原因,操作系统不允许您执行任何操作。其次,由于操作系统需要将硬件抽象化,因此即使OS也在通过某种抽象系统(如果需要)与API进行驱动程序通信。

实际上,如果您自己完成所有工作,我会评估您的系统更快的可能性,接近于零。有点像比较C和汇编语言。当然,您可以编写汇编程序,但如今的编译器非常聪明,并且始终在不断优化。即使您可以提高生产率,也很难手动进行改进。

PS:API不会像以前的游戏一样无法进行此更新。只是效率低下而已。不是因为API的思想,而是因为它是低效的时期。

PPS:这就是为什么他们推出Vulkan的原因。


6
See the number of pixels you need to update grows exponetially when the sides grow.我认为是二次方的。
克苏鲁

“将数据从CPU复制到图形卡是一个相对较慢的操作。” 这是事实,但无关紧要。即使是适度的PCI-E链接,也很容易实现以60 fps的速度复制几百万个像素(每秒仅需要几百兆的字节。)
Coxy 2016年

2
@ pjc50没错,但也不完全正确。GPU专门用于在大量数据上并行运行单个程序(通常是着色器)。因此,您需要对大量数据执行相同的操作才能真正使用GPU的计算能力。如果您的程序没有,则最好在CPU上运行该程序。
Nero

2
X22X

1
您谈论的是复制和移动,但更重要的是实际的图像生成。您必须确定在什么时候可以看到哪个对象,如何点亮,烟雾的影响等等,等等。GPU经过高度优化,可以快速,并行地执行这些操作。API使表达常见操作变得容易。
IMil

15

在任何32位彩色GPU(甚至旧的)上工作?

这里的历史:这是直到90年代中期图形加速器开始可用之前在PC上完成游戏的方式。实际上,它确实可以在所有硬件上运行,因为硬件并没有做很多事情。

图形加速器通过使用专用的硬件和并行性,可以比CPU 更快地绘制像素。加速器包含许多处理器核心。台式计算机将根据年龄使用1-8个内核。我的GTX970Ti显卡具有1664(一千六百六十四!)个内核。显然,这在很大程度上要击败PC。

但是,加速器不是标准化的,通常包括怪异的计算机体系结构技巧以实现其速度。为了编写未针对特定牌子和型号定制的游戏,需要存在一个API。这就是DirectX,GL和着色器语言的用途。事实上,写着色器最接近于编写直接绘制像素的程序-它只是该卡将并行运行该程序的千人副本给你,每个像素一个。


我的笔记本电脑的APU有256个着色器核心@ 686MHZ,而我的平板电脑有192
碎瓷多加

嗨,Titan X拥有5760个内核。
丹尼尔(Daniel)

@Daniel是否有任何游戏,巨人X推移<在超高.The泰坦X 30fps的功能非常强大
碎瓷多加

嗯,其中之一,也许是:maximumpc.com/10
Daniel

@Daniel这些游戏的开发人员必须需要大约2-4张Titan X卡:)
Suici Doga

14

只需添加到joojaa的答案,事情仍被像素绘制的像素。您只是使用顶点着色器/汇编器/光栅化器生成像素,然后使用片段着色器对其进行纹理处理和照明。这一切都是在90年代用软件完成的,当时您的视频卡只不过是一个阻击器和一个帧缓冲区,但它的速度实在太慢了。因此,现代GPU的发明。

发生的绘图数学与《毁灭战士》时代基本相同,但是现在它在成百上千的着色器ALU上运行,而不是在少数CPU内核上运行。这些API映射到幕后基本相同的GPU指令集。他们只是在这里阻止您不得不在多个供应商平台上编写大量粗糙的GPU程序集。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.