
天能
这两个问题确实不太好直接作答,我试着从侧面来谈谈我的看法。先说第一个难不难的问题。这个问题本身其实比较模糊,因为难度是一个非常主观的概念,每个人的基础、经验和学习能力都不同,对同一件事情的感受也会大相径庭。比如,有人可能觉得Vulkan的API设计很复杂,而另一些人则认为它逻辑清晰、易于理解。因此,很难给出一个适用于所有人的答案。至于需要多久时间,这也取决于个人的具体情况,包括你的编程基础、图形学知识储备以及每
天能投入的学习时间等。即使两个人起点相同,由于学习方法和专注程度的不同,所需时间也可能相差很大。尽管如此,我还是想结合自己的经历为你提供一些参考,帮助你对这个问题有一个更直观的认识。回想我刚开始学习Vulkan的时候,已经具备了一定的基础:之前系统地学习过OpenGL,完整阅读了Real-Time Rendering,并且基于OpenGL实现了一个小型渲染引擎。虽然这个引擎功能比较简单,但它的框架结构和材质系统都已经搭建完成。当时决定转向Vulkan的主要原因是我希望自己的引擎能够支持更多现代图形API,例如Vulkan和DX12,而不是局限于OpenGL。如果继续完善只支持OpenGL的引擎,等到项目规模增大后再考虑兼容其他API,可能会变得非常困难,甚至难以维护。于是,在这种背景下,我开始学习Vulkan。主要通过Vulkan Tutorial进行自学,同时利用业余时间(因为我本职工作是游戏
客户端开发,研究引擎只是个人兴趣)。整个过程分为两个阶段:第一阶段是花费大约两个月的时间完成教程内容;第二阶段则是用一个多月的时间对自己的引擎进行改造,使其同时支持OpenGL和Vulkan。前后加起来总共花了近四个月的时间。不过,这里需要强调的是,这四个月的学习只能让我达到会用Vulkan的水平,也就是可以用它做一些实际的事情,但远谈不上真正掌握。当你深入接触Vulkan后会发现,它非常灵活,提供了巨大的自由度,几乎相当于把原来由OpenGL驱动器负责的许多内容交给了开发者自己实现。当然,这并不意味着要完全按照OpenGL的方式去重写这些功能,而是为了说明Vulkan与OpenGL之间存在本质上的差异——Vulkan更加贴近底层,设计思想也完全不同。如果你对此感兴趣,可以看看我在GitHub上ZXEngine项目的RenderAPI部分代码。同样的渲染接口,基于OpenGL的实现用了大约1300行代码,而基于Vulkan的实现则达到了5300行左右。这种代码量上的差距或许能让你对两者复杂度的区别有个初步认识。