最全面、最前沿、最专业的游戏研发实战

提供最全面的游戏研发技能分享,让您在最短时间变成高级游戏工程师

查看:0|回复:6

【环境】熟悉OpenGL的前提下学习Vulkan难么?

 attach_img

3

帖子

3

回复

4

积分
最后登录:
2025-03-25 20:24
注册时间:
2023-03-12 16:29
楼主
  发表于:2025-03-25 22:55:48|查看用户信息

在掌握OpenGL知识体系和C/C++知识的前提下学习掌握Vulkan有多难?想评估下学习Vulkan的学习成本,全职学习的话大概需要多久时间基本可以掌握?

8

帖子

4

回复

9

积分
最后登录:
2025-03-25 21:10
注册时间:
2023-03-12 17:29
1 楼
  发表于:2025-03-25 22:57:00|查看用户信息

全职工作项目做自研引擎的Vulkan实现,大概花了大半年我觉得我大概是入门了,Vulkan难的不在api数量上,一百行写个三角形和一万行写一个三角形的对比意义不是很大,因为真正的项目不会反复写基础框架。Vulkan真正难的地方是暴露了大量实现细节给你,你必须理解才能会用,比如Vulkan中将内存从host端同步到device端的方式交给你设置了,而同步方式直接要求你理解这两端内存为什么会需要同步,以及不同步时会出什么样的问题,以及同步到什么时机上是合理的,由此引申出来其他一票相关的概念也需要你理解。所以最后就变成了Vulkan要求你对很多OpenGL自己驱动内部做的事情理解清楚才行。


而驱动往往又看不到源码,GPU本身更加是个黑盒,这样就更加需要你从各种资料中一点点拼凑出完整的图像才能理解很多里面的概念,只有当整体打通后,才能算是掌握了。


有人可能说,我就是拧个螺丝而已,需要这么夸张吗?Vulkan真需要,Vulkan本身为了速度,几乎没有什么错误校验,写错了就会挂在驱动里面或者直接device lost,而开了validation layer报错是详细了,但是事无巨细的报错让你一定要写对各种细节才行,而这些细节往往就跟上面我说的底层原理相关,你不理解就改不对。


总结来说就是,OpenGL可能只需要你写api就能开始干活,Vulkan需要你会一定的原理才能干活。


2

帖子

3

回复

4

积分
最后登录:
2025-03-25 20:30
注册时间:
2023-03-12 23:24
2 楼
  发表于:2025-03-25 22:57:26|查看用户信息

假设你对opengl比较娴熟了,初学vulkan的时候会不是很爽,因为感觉很多东西和opengl完全对应不上,比如commandBuffer, queue, pipeline, renderpass, descriptor, Fence啥的,你会觉着opengl里完全没有这些东西,事实这些确实opengl里没有,除了pipeline, pipeline就是opengl的program,但是你发现pipeline比program多出来的东西太多了,不会认为是一个东西,因为把opengl的配置全部打包进去了。


所以学vulkan是比较困难的,opengl 300行 出三角形 ,vulkan 要1000行,这都是硬编码的前提下,实际上想要好用是不可能硬编码的,如果要封装库都会更多。


vulkan市面上没有特别好的教材,比如opengl有learnopengl这个神作,vulkan只能看官方教材,那个确实可以用,但不算好,你只是照葫芦画瓢,对背后的原理解释并不到位。至于白皮书,那个更没啥用了,怀疑是机器生成的。


而且vulkan的配置特别多,光是硬编码这些配置就能累个半死,全部弄明白这些配置不太可能,只能挑重点。


当然,最终不管你用什么方法部分掌握了vulkan之后,你会认识到其实有些概念还是能对应上的,只不过vulkan更多了一些东西,或者把原有的东西暴露出更多细节,vulkan因为是c语言,所以很多用c++写成成员函数的东西它就写成普通函数了,你可能看不出这种依赖关系。


所以应该学vulkan还是有点难的,主要是比较枯燥,它没有像learnopengl这么好的教材,官方教材其实就比较垃圾,(勉强能用),所以不是很好学,就像opengl的官方教材也不是很好。如果能出像learnopengl这么好的教材的话,那学vulkan还是会比较愉快的。


2

帖子

3

回复

5

积分
最后登录:
2025-03-25 21:30
注册时间:
2023-02-26 14:02
3 楼
  发表于:2025-03-25 22:58:02|查看用户信息

既然是已经熟悉OpenGL的情况下,学习Vulkan肯定是更容易的。但是最好补一下GPU硬件架构的知识,本质上Vulkan是更贴近GPU硬件的,这更能帮助你理解到Vulkan的每一步设置都是在做什么以及为什么需要提出RenderePass、Pipeline、SubPass,Descriptor这些概念,它们都分别解决了什么问题。

初学的话最好还是跟着Vulkan tutorial先走一遍,后续就可以开始看Vulkan官方的Sample啦,去看看如何简单的封装一个Vulkan的框架。最好还是自己写一个小的Vulkan渲染器,往里面堆各种Feature,尝试接入和使用最新的扩展,这样学习进度肯定是最快的。


7

帖子

3

回复

9

积分
最后登录:
2025-03-25 19:45
注册时间:
2023-02-26 15:02
4 楼
  发表于:2025-03-25 22:59:28|查看用户信息

你这两个问题不好正面回答,我从侧面回答吧。


先说第一个难不难的问题,这个问题其实比较模糊。从客观角度上说,每个人的能力和已掌握的知识量不一样,掌握的程度也不一样。然后“难不难”这又是一个很主观的感受。所以不好正面回答。然后是需要多久时间的问题,这个同样得看个人情况。


虽然你的问题很难准确的正面回答,不过我可以把自己的经历分享出来,给你做一个参考,让你对这个问题有一个直观感受。


先说我开始学习Vulkan时自己的情况。我当时已经学过OpenGL了,啃完了Real-Time Rendering,并且已经用OpenGL写好了一个渲染引擎。这个引擎当时虽然简单,但是基本框架和材质系统这些模块是有了的。我在这个时候决定学习Vulkan,是因为我不希望我的引擎以后只支持OpenGL,而是同时支持Vulkan和DX12这些主流API。我怕我继续完善引擎,等以后引擎越来越复杂了再考虑支持Vulkan就很困难了,尾大不掉。


于是我在这种情况下开始学习Vulkan,学习方式是看Vulkan Tutorial。我本职工作是游戏客户端开发,研究引擎是自己的兴趣,所以都是用的工作之余的时间在搞。我花了2个月的时间把教程看完了,然后又花了一个多月的时间改造自己的引擎,让它同时支持了OpenGL和Vulkan。前前后后加起来花的时间接近4个月。


但是这4个月时间我只能说我会用Vulkan了,可以拿Vulkan写点实际的东西出来了,我不敢说自己掌握了。你学完Vulkan你就会知道它相当的灵活,给你的发挥空间非常大,基本上等于你可以把OpenGL驱动的很多内容自己去实现一遍了。然而OpenGL的思路是过时的,所以不是让你真的学完去自己实现一遍OpenGL,只是告诉你Vulkan和OpenGL完全不一样,它们不在一个层面上,Vulkan要比OpenGL偏底层很多。


最后你如果感兴趣的话可以看看我Github上ZXEngine里面的RenderAPI代码,同样一套渲染接口,我基于OpenGL的实现写了1300行左右的代码,而基于Vulkan的实现写了5300行左右。这个代码量的差距多少能让你对它们的复杂程度有点感觉吧。


4

帖子

2

回复

5

积分
最后登录:
2025-03-25 22:38
注册时间:
2023-02-26 15:02
5 楼
  发表于:2025-03-25 23:00:10|查看用户信息

是否熟悉OpenGL对Vulkan的学习的帮助我个人认为比较小,但熟悉OpenGL或多或少对图形渲染管线有所了解,总比什么都不会直接上来学vulkan好很多。要注意的就是可能要先了解一些硬件(GPU)相关的知识,不然有些概念理解起来会有些懵逼。

至于多久时间能基本掌握这个应该跟个人情况有关,如果说的是能实现绘制简单场景+(shadow mapping之类的常用算法),我个人是业余时间学的,大概一两个月就能做到,供参考。

3

帖子

2

回复

5

积分
最后登录:
2025-03-25 18:41
注册时间:
2023-03-12 17:23
6 楼
  发表于:2025-03-25 23:00:34|查看用户信息

最近在学opengl,先前学的是unity的shader,发现和逻辑类的编程一样——思想都是相同的,就像在c或是java中都可以输出点什么或是解数学题。


而对于渲染逻辑,什么阴影映射,,以及各种各样其他的算法,他们的思想都是相同的,因此如果和opengl一样记住了的语言特点,应该会很容易上手。


共 1/1 页

0

帖子

0

回复

0

积分
最后登录:
1970-01-01 08:00
注册时间:
1970-01-01 08:00
会员必须登录才能发布帖子! 点击登录