Answers:
几乎不!
这似乎很像询问“新程序员应该学习C ++而不是C”,还是“新艺术家应该学习数字绘画而不是物理绘画”。
尤其是由于它不向后兼容,仅因为有了一个新的图形处理程序,就排除了业内最常见的图形API是愚蠢的。另外,OpenGL做不同事情的方式也不同。公司完全有可能选择OpenGL而不是Vulkan,尤其是在游戏初期,并且该公司对不了解OpenGL的人不感兴趣,无论他们是否了解Vulkan。
专业化很少是可销售的技能。
对于那些不需要像这样开发自己的技能的人,例如独立开发人员,从他们的工具箱中删除工具甚至更愚蠢。独立开发者更加依赖灵活性,并且能够在获得资金的基础上选择可行的方法。专门从事Vulkan只能限制您的选择。
专业化很少是有效的范例。
如果您现在就开始,并且想要进行GPU工作(而不是始终使用Unity这样的游戏引擎),那么您绝对应该从学习Vulkan开始。也许您以后也应该学习GL,但是有几个原因让您优先考虑Vulkan。
GL和GLES是在多年前设计的,当时GPU的工作原理大不相同。(最明显的区别是立即模式绘制调用与平铺和命令队列。)GL鼓励您以立即模式样式进行思考,并且有很多遗留问题。Vulkan提供的编程模型与现代GPU的工作方式更加接近,因此,如果您学习Vulkan,您将对技术的真正作用以及有效和无效方面有更好的了解。我看到许多人开始使用GL或GLES并立即养成不良习惯,例如针对每个对象发出单独的绘图调用,而不是使用VBO,或更糟的是使用显示列表。对于GL程序员来说,很难找出不再鼓励的内容。
从Vulkan迁移到GL或GLES要容易得多,反之亦然。Vulkan明确显示了许多在GL中隐藏或不可预测的事情,例如并发控制,共享和呈现状态。从驱动程序到应用程序,这增加了很多复杂性:但是,这样做可以控制应用程序,并且更容易获得可预测的性能和不同GPU供应商之间的兼容性。如果您有一些可以在Vulkan中运行的代码,则很容易将其移植到GL或GLES,并且最终会使用GL / GLES良好的习惯。如果您的代码可以在GL或GLES中运行,则几乎必须重新开始以使其在Vulkan中有效地工作:尤其是如果它是以旧样式编写的(请参见第1点)。
首先,我担心Vulkan很难编程,尽管对于大型公司的经验丰富的开发人员来说可以这样做,但这对于独立开发者和业余爱好者来说是一个巨大的障碍。我向工作组的一些成员提出了这个问题,他们说,他们已经和已经搬到Vulkan的人进行了交流。这些人的范围从Epic致力于UE4集成的开发人员到业余游戏开发人员。他们的经验是,开始学习(即在屏幕上显示一个三角形)需要学习更多的概念,并需要更长的样板代码,但这并不太复杂,即使对于独立开发者也是如此。但是进入这一阶段后,他们发现构建一个真正的可交付应用程序要容易得多,因为(a)行为在不同供应商的实现之间更可预测,并且(b)在打开所有效果的情况下执行效果良好的操作并不需要太多的反复试验。凭借来自实际开发人员的经验,他们使我相信,即使对于图形初学者而言,针对Vulkan进行编程也是可行的,并且一旦通过本教程并开始构建可以提供给其他人的演示或应用程序,总体复杂度就会降低。
就像其他人所说的那样:GL在许多平台上都可用,WebGL是一种很好的交付机制,现有许多使用GL的软件,并且有很多雇主为此雇用技能。未来几年,Vulkan将会逐步发展并发展生态系统。由于这些原因,您将完全排除学习GL是愚蠢的。即便如此,如果您从帮助您理解GPU的事情入手,而不是了解GPU的工作原理,那么您将可以轻松得多,并成为一名更好的GL程序员(和一般而言更好的GPU程序员)。 20年前。
当然,还有更多选择。我不知道这是否与您特别相关,但我还是想对其他访客说出来。
成为独立游戏开发商,游戏设计师或进行VR体验,您无需学习Vulkan或GL。许多人开始使用游戏引擎(Unity或UE4目前很流行)。使用这样的引擎将使您专注于要创建的体验,而不是其背后的技术。它将向您隐藏GL和Vulkan之间的差异,您无需担心平台上支持哪种功能。它可以让您了解3D坐标,变换,照明和动画,而无需一次处理所有粗糙的细节。一些游戏或VR工作室仅在引擎上工作,而他们根本没有专职的GL专家。即使在自己编写引擎的大型工作室中,进行图形编程的人还是少数,
学习如何与GPU交互的细节无疑是一项有用的技能,许多雇主都会重视这一技能,但是您不应该觉得必须学习它才能进入3D编程。即使您知道它,也不一定每天都会使用。
学习图形编程不仅仅是学习API。这是关于学习图形的工作原理。顶点变换,光照模型,阴影技术,纹理贴图,延迟渲染等。这些绝对与用于实现它们的API无关。
所以问题是这样的:您是否想学习如何使用API?还是您想学习图形?
为了处理硬件加速的图形,您必须学习如何使用API访问该硬件。但是,一旦您能够与系统交互,您的图形学习便不再关注API为您所做的事情,而是关注图形概念。照明,阴影,凹凸贴图等
如果您的目标是学习图形概念,那么您花费在API上的时间就是您不花费在学习图形概念上的时间。如何编译着色器与图形无关。如何发送制服,如何将顶点数据上传到缓冲区等也没有。这些工具是进行图形工作的重要工具。
但是它们实际上不是图形概念。它们是达到目的的手段。
在达到准备开始学习图形概念的程度之前,Vulkan 需要花费大量的工作和学习。将数据传递给着色器需要显式的内存管理和访问的显式同步。依此类推。
相比之下,使用OpenGL达到这一点所需的工作更少。是的,我谈论的是基于着色器的现代核心配置文件OpenGL。
只需比较完成清除屏幕之类的操作所需的时间即可。在Vulkan中,这至少需要对大量概念有所了解:命令缓冲区,设备队列,内存对象,图像以及各种WSI构造。
在OpenGL中......这是三个功能:glClearColor
,glClear
,和特定于平台的交换缓冲通话。如果您使用的是更现代的OpenGL,则可以将其简化为两个:glClearBufferuiv
和交换缓冲区。您不需要知道什么是帧缓冲区或它的图像来自哪里。您清除它并交换缓冲区。
因为OpenGL对您隐藏了很多东西,所以与学习图形硬件的接口相比,花费很少的精力达到实际学习图形的地步。
此外,OpenGL是(相对)安全的API。通常,当您做错事时,它将发出错误。Vulkan不是。尽管可以使用调试层来提供帮助,但核心的Vulkan API几乎不会告诉您任何信息,除非出现硬件故障。如果做错了,可能会导致垃圾渲染或使GPU崩溃。
再加上Vulkan的复杂性,意外地做错事变得非常容易。忘记将纹理设置为正确的布局可能在一种实现下有效,但在另一种实现下则无效。忘记同步点有时可能会起作用,但随后突然失败似乎是没有原因的。依此类推。
综上所述,学习图形比学习图形技术要多得多。Vulkan尤其是其中一个领域。
图形性能。
成为3D图形程序员通常需要一些有关如何优化代码的想法。在这里,OpenGL的信息隐藏和后台处理成为问题。
OpenGL内存模型是同步的。只要用户不知道区别,就可以允许该实现异步发出命令。因此,如果渲染到某个图像,然后尝试从中读取,则实现必须在这两个任务之间发出显式同步事件。
但是,为了在OpenGL中获得性能,您必须知道实现可以做到这一点,因此可以避免它。您必须了解实现在哪里秘密发出同步事件,然后重写代码以尽可能避免它们。但是API本身并没有使这一点变得显而易见。您必须从某个地方获得了这些知识。
使用Vulkan ...,您是必须发布这些同步事件的人。因此,您必须意识到硬件不会同步执行命令的事实。您必须知道何时需要发出这些事件,因此必须知道它们可能会使您的程序变慢。因此,您将尽一切可能避免它们。
像Vulkan这样的显式API会迫使您做出此类性能决策。因此,如果您学习Vulkan API,您已经对什么事情将变得缓慢而什么事情将变得很快有了一个很好的主意。
如果必须执行一些帧缓冲工作以迫使您创建新的渲染通道,则可能会比将其放入渲染通道的单独子通道中的速度慢。这并不意味着您不能这样做,但是API会先告诉您这可能会导致性能问题。
在OpenGL中,API基本上邀请您随意更改帧缓冲区附件。没有关于快速或慢速更改的指南。
因此,在这种情况下,学习Vulkan可以帮助您更好地了解如何更快地制作图形。它肯定会帮助您减少CPU开销。
到达学习图形渲染技术的位置还需要更长的时间。
OpenGL的主要吸引力(至少对我而言)是它可在许多平台上使用。目前,Vulkan无法在OSX上运行,并且Apple具有竞争性的API,称为Metal。苹果很可能需要一段时间才能支持Vulkan,而当他们支持Vulkan时,Vulkan的支持可能只会出现在其最新硬件上。OpenGL已经支持大多数硬件,并将继续这样做。
这取决于您想做什么。如果您只想自己学习图形编程,那么选择什么都没关系。
如果您正在考虑专业工作,建议您选择Vulkan。它更接近硬件,我认为有关硬件功能的知识对图形程序员很重要。
Vulkan离硬件更近,因为OpenGL可以在Vulkan中手动完成许多工作,例如执行命令队列。另外,内存管理取决于应用程序而不是驱动程序。您需要担心分配内存uniforms
(从CPU传递到GPU的变量),跟踪内存。您有更多需要担心的事情,但是它也给内存使用带来了更多自由。这听起来很吓人,但实际上并非如此。这只是您需要学习的下一个API。
了解这些内容还将有助于理解GPU的工作方式。是什么让您可以在Vulkan和OpenGL上进行一些优化。
我想到的另一件事是,如果您开始学习图形编程,可能是当您寻找一份工作时,因为Vulkan将会更受欢迎(也许比OpenGL更受欢迎)。而且,据我所知,大多数使用某些图形API的公司都围绕它编写了自己的函数,因此有可能您在工作中不会用OpenGL或Vulkan进行编写,但是有关GPU的知识将永远有用。
我已经“参与”了图形编程已有几个月了。
现在我还在读高中,我可以告诉你我几乎总是在寻求开发跨平台应用程序。实际上,这是我与Vulkan有关的第一大问题-并非针对所有平台都可以开发。我在Java中使用OpenGL,已经工作了6个月以上。
我对Vulkan的主张的另一个问题是它声称如何变得更好。虽然OpenGL当然不会经常更新其网站。他们继续不断发布更新,我一直期待新的更新能够更快地运行或与新硬件一起更好地工作。
就是说,虽然我主要使用OpenGL,但我了解DirectX和Vulkan的基本原理。虽然我没有广泛地与他们合作,但尤其是Vulkan,因为它非常难学,并且没有像OpenGl和DirectX那样结构良好的程序设计。
最后,我想补充一点,就是像我主要使用Java一样,专门研究单个领域,而OpenGL并不是很容易上市。如果我想在一家从事游戏的公司工作,那么在大多数情况下,OpenGL仅会用于为Linux和Android开发以及可能的OSX进行游戏。Windows和控制台的DirectX <在某些情况下可以替换的Vulkan。
我不能永远支持OpenGL更新,我也不会。但这是我开发的偏好。
我想给你我的图形初学者的观点。我意识到(多年来在另一个领域中担任工程师)是基本概念是最重要的部分。一旦您对这些有了深刻的了解,学习最后一个闪亮的新API就是最困难的部分。我不知道您是不是最年轻的尝试编写新的《天际》的人,或者您是否正在CG领域寻找工作。
我告诉你,我认为这是最好的办法在我看来,学好计算机图形学“像亲”。
在了解如何划界线之前开始担心性能,就像在获得驾驶执照之前担心汽车的空气动力学特性一样。
我在C ++中自学成才,没有任何正规的教育,并且在过去的15年中,我已经通过Modern OpenGL和DirectX 9c,10和11学习了OpenGL 1.0。我还没有加入DirectX 12,并且一直想在Vulkan尝试一下。我仅完成了一些基本的教程,即可使用Vulkan绘制一个简单的三角形或一个简单的旋转立方体。与DirectX 11和OpenGL 3.3+一样,我已经编写了可以正常工作的3D游戏引擎,甚至使用它们来构建简单的游戏。
我不得不说,这取决于学习者的整体环境。如果您只是进入3D图形编程,那么我想说的是入门者可以使用OpenGL或DirectX 11,因为那里有大量的教程,资源,示例以及已经可以运行的应用程序。学习3D图形绝不是一件容易的事。
如果我们从程序设计的角度上进行抽象,而只关注使用哪种技术的概念,这些技术涉及到导致数据集,数据结构和算法的不同层次的数学运算;在尝试构建3D游戏引擎或有效使用现有的3D游戏引擎之前,您首先需要了解和理解很多知识。
现在,如果您已经了解了其背后的所有数学和理论,并且您已有一定的编程经验,则可以使用现有的API,库和应用程序(例如Unity或Unreal Engine),只需编写使应用程序正常工作所需的源代码和脚本即可。
因此,从我自己的理解和我的看法来看,如果您只是想开发一款游戏,那么这就是您想要的。与现有的框架一起使用,可以使您的生产时间大大缩短。另一方面,如果您想了解游戏引擎/物理引擎/动画引擎和模拟器是如何设计的并希望自己构建,请在这里选择API,例如DirectX, OpenGL或Vulkan。这里的决定因素之一也将是您现有的编程知识。我的意思是,如果您对多线程,同步与异步调用,内存隔离,数据争用,信号量和并行性(并行编程)一无所知,
我之所以这么说是因为,如果您不知道如何正确地管理内存以及线程和访问时间,那么,Vulkan会咬你的屁股!OpenGL和DirectX将通过消耗更多的CPU能力来一路牵手。
现在,如果您的编程知识水平是不错的,并且您具有下列数学背景,其中涉及代数,几何,三角学,布尔代数,概率,统计,向量,基于矩阵的代数,微积分I,II等各个级别。无限(笑)向量演算,线性代数,线性方程组,具有多变量向量演算的解析几何,数和集理论,数据集和结构,计算分析,计算和算法设计。然后,您可以了解制作实际游戏引擎所需的概念,而无需任何应用数学或任何物理方程式。一旦具备了这种背景和足够的编程经验,尤其是内存管理和指针算术,那么您就可以开始构建游戏引擎了。
因此,这里的事情是您必须了解制作游戏引擎所需的所有方面,以便进行高级图形编程。如果您只是在进行2D图形处理,那么生活就不会太困难,因为您可以在没有任何上述API的情况下在Python中进行处理!但是,如果您想认真对待并设计出功能强大且功能强大的功能强大的成熟游戏引擎,那么这里的选择将是C或C ++,并使用OpenGL,Direct X或Vulkan。他们中的任何一个都很好。现在,如果您要从头开始构建Engine,并且正在寻找资源开销最少的最“高效”运行的Engine,那么您将需要选择Vulkan。但是,如果您走这条路线,您至少应该了解我上面提到的所有内容以及某些知识!
因此,如您所见,Vulkan并非真正面向该领域的初学者。您必须具有所有数学,编程范例,所有不同类型的数据集和算法(包括线程,内存同步,并行编程)的广泛知识。即便如此,这只是使应用程序将简单的2D三角形加载到屏幕上。在OpenGL中大约100行代码或DirectX中250行代码可以完成的工作,在Vulkan中几乎需要1000行代码!
Vulkan将一切留给您,因为您要负责在应用程序中使用Vulkan的各个方面。没有手握,它不会妨碍您,它可以让您用脚射击,也可以吊死自己,以购买递归套索!
现在,这并不是说初学者或不熟悉该领域的人不应该学习Vulkan,但我为他们建议的是:首先了解OpenGL和DirectX的知识,以使自己立于不败之地。基本应用程序的结构只是渲染一个简单的三角形或旋转的立方体。熟悉它们的API及其结构的重复模式。在学习可以并行学习Vulkan的同时,您可以通过这种方式了解三个人如何完成相同的任务,但是知道他们是如何做的不同,然后还可以比较不同API之间的结果以及然后,您可以从中进行选择。这种方法还可以在工具箱中提供另一个工具,您甚至可以编写应用程序来支持这3种工具,并使用“
最后,这取决于该人选择要走的路,从那里开始,他们的成功将取决于他们的奉献精神,不断学习,努力,尝试和错误,最重要的是他们的失败。如果您没有失败,那么您就不会成功!只有当您失败,发现错误,纠正错误,继续前进并重新站起来再做一次时,您才能成功!
您应该首先在许多平台上学习OpenGL,因为这是Graphics的标准。
即使有较新的库,理解基础知识并使用整个行业使用的语言也是非常重要的……尤其是因为Vulkan不会再在大公司中使用了。
没有人愿意立即适应并最终陷入不稳定的Framework / Library。
他们将需要聘用/重新培训他们目前的Open-GL程序员,并且没有必要。
另外,我听说OpenGL和Vulkan并不完全相同。我听说Vulkan是一个比OpenGL更底层的API,并且更接近于机器代码。
我刚刚发现的这个答案似乎有很多有用的信息
https://gamedev.stackexchange.com/questions/96014/what-is-vulkan-and-how-does-it-differ-from-opengl
需要考虑的另一件事是OpenGL 1发生的问题。
OpenGL 1到OpenGL 2发生了重大变化,并且由于许多人都在使用OpenGL1,并且硬件支持它,因此在某些应用程序/引擎中需要实现向后兼容性,这有时对于使开发人员继续提供支持感到非常痛苦。 。
除了支持之外,语言变化很大,您必须学习新知识。
JavaFX(从1.x到2.x)和Play等框架都发生了这种情况。框架(也从1.x到2.x)。完成对框架的更改,这意味着我们必须重新学习...所有内容...
因此,实质上,您应该做的就是等到Vulkan稳定为止。那意味着要等到大概2.0补丁。IT并不意味着您无法了解Vulkan的基础知识,而是知道这可能会改变。我认为,像Kronos这样的团队从一开始就将提供非常稳定的API,尤其是因为有多个Nvidia和AMD工程师在Vulkan上工作,其中包括显然负责该项目的Nvidia高尚人士以及The Mantle基地;但是,像任何软件一样,我们的编码人员从一开始就将看到它的运行状况,但是许多人都在警惕并等待发生什么。