从OpenGL过渡到Vulkan

本文翻译于nvidia网站文章:Transitioning from OpenGL to Vulkan

Transitioning from OpenGL to Vulkan

何时从OpenGL过渡到Vulkan

随着Vulkan的推出,现在有两个面向类似平台的开放图形API可以被我们使用。这就带来了问题:我们应该为新应用程序选择哪个API?或者如何处理现有应用程序?Vulkan虽然更新了,但并不意味着它在任何条件下都比原来的API更好,也不意味着OpenGL一夜之间成为了一个低劣的选择。

应用程序将会从Vulkan中受益吗?

在本节中,我们将讨论5个需要考虑的重要场景,以帮助你决定从OpenGL移植到Vulkan。

从OpenGL过渡到Vulkan_第1张图片

应用程序不会被CPU工作限制:Vulkan的设计能够大大减少CPU在驱动中花费的时间,因此请检查你的应用程序到底是被驱动限制了还是被应用程序限制了,后者的场景通常出现在具有传统场景的代码库(可能指的是使用固定管线的代码?)。

平衡GPU/CPU使用率:Vulkan和OpenGL在GPU特性上没有功能上的差异,因此如果GPU的工作负载主导了应用程序的渲染时间,而且预计会保持这种状态(意思是GPU占用率一直很高),Vulkan或许不会为你的应用程序加速多少时间。

从OpenGL过渡到Vulkan_第2张图片

 对微型卡顿零容忍:如果你的应用对卡顿很敏感,那么Vulkan这种设计允许你能够在渲染场景中某个开销比较昂贵的时刻“显式”地管理资源和状态,这种方式比OpenGL隐式的控制更好。(因为OpenGL就是个大黑盒,应用程序没办法控制很多东西)

多线程扩展性:应用程序的负载在多个线程中进行了很好的划分,Vulkan擅长为分布在CPU线程上的GPU创建工作。如果你的应用程序为此而努力,而且你使用了很多现代的OpenGL技术,那么Vulkan可以改善这种情况。

离屏GPU计算和图形工作:Vulkan并不需要显示任何内容,它可以在没有窗口的条件下使用,因此也适用于通用GPU加速(Vulkan的显示是通过扩展实现的,渲染一个图形,窗口系统不是一定需要的)

维护基于Vulkan的渲染器需要考虑什么

从OpenGL过渡到Vulkan_第3张图片

复杂性

在OpenGL中,即使没有经典的固定函数,他在屏幕上显示内容也要容易得多,渲染全屏效果或图像处理只需要几行代码。而使用Vulkan在屏幕上看到第一个像素,其代码的冗长程度要高得多。

正如前面关于资源绑定或内存管理的博客文章所暗示的那样,这些额外的复杂性将需要编写更多的代码。特别是对于不熟悉图形的人来说,最好使用OpenGL或渲染中间件来隐藏这种复杂性并专注于实际任务。

从OpenGL过渡到Vulkan_第4张图片

 OpengGL驱动管理了很多应用的任务,在Vulkan中,这个任务交给了应用程序。

责任:OpenGL在后台做了很多事情,从非常简单的事情,例如错误检查、编译高级着色器,到复杂的事情,例如避免删除GPU仍在使用的资源(异步操作),或管理内部资源分配和硬件缓存刷新。另一个例子是处理内存不足的情况,OpenGL驱动程序隐式地分割工作负载或在专用/系统内存之间移动分配。

在Vulkan中,这段代码现在从驱动程序转移到应用程序中。开发人员可能还需要用自己的代码替换OpenGL中间件。虽然Vulkan没有OpenGL在中间件方面存在的“状态泄漏”问题,但资源管理可能是开发人员的一个新话题。拥有更大比例的图形代码职责有其自身的好处,因为它使开发人员更加独立,并使他们能够更好地控制图形管线中发生的事情。

便携性:Vulkan在程序中如此底层,意味着要充分利用不同的硬件架构,很可能需要专用的代码路径。这与在OpenGL中使用扩展的实际情况基本上没有什么不同。但它在功能方面提供了一个更高的基础级别,并提供了一组简洁的功能入口点,但硬件能力和首选操作的差异仍将显现出来。

以上这些陈述都不应该被解读为“OpenGL没有缺陷”。然而,OpenGL确实可以用于许多用例。虽然OpenGL驱动程序中的启发式方法(heuristics)是有代价的,但多年来它们也能够覆盖许多用例。

为了改善这种情况,Khronos和成员公司(尤其是Valve 万恶的V社)赞助开发了几种开源Vulkan工具。生成SPIR-V的参考编译器已经公开,Google创建了一个涵盖着色器库和命令行使用的工具包。其他工具将紧随其后,可以在任何Vulkan驱动程序之上使用的验证和调试层。

Khronos已经开发了一个广泛的一致性套件,它将保证供应商的Vulkan驱动程序的基本质量水平。每个Vulkan驱动程序将从一开始就进行一致性测试。此外,Khronos还授予了许多过去曾帮助过OpenGL生态系统的开发人员早期访问权限,以便他们能够准备好几个Vulkan的流行库和中间件。

个人总结

以一个比较形象的例子比喻:

渲染一幅图的过程我们把它比作做一碗好吃的麻婆豆腐。

OpenGL就相当于自己在网上买了麻婆豆腐的调料包,自己切好豆腐之后放调料即可获得一碗味道不错的麻婆豆腐。

Vulkan相当于自己去菜市场买辣椒,花椒,豆瓣酱,并按照步骤依次制作所有的步骤之后才获得一碗麻婆豆腐。

两者的味道并没有什么区别(图形渲染的结果相同),但Vulkan需要更加精细化的处理,以及对现代GPU更高的理解。

再这之中,由于料理包的存在(OpenGL驱动会隐式的帮你处理很多事情),作为烹饪者(应用程序开发者)你无法调整辣度和麻度(对渲染流程进行更多的干预),但Vulkan由于你是自己使用的辣椒和花椒数量(Vulkan接口更加底层),所以能做得事情会更多。


 

你可能感兴趣的:(图形学,图形渲染)