3D 图形加速功能是 3D 应用程序的绝对关键点。实践证明只有低层级的操作方式才能发挥出图形硬件的全部潜能。接替 OpenGL 的 Vulkan 正是这种低层级 API。它可以给予开发者更多的硬件控制权,并使 3D 应用程序获得更高的运行速度。本书详细介绍了 Vulkan 的各种知识。
本书由 12 章构成,其中包括:Vulkan API 的基础知识、Vulkan 图像显示、命令缓冲区和同步化、资源和内存、描述符集合、渲染通道和帧缓冲区、着色器、图形和计算管线、记录命令和绘制操作、拾遗补缺、照明、高级渲染技术。
作者简介
Pawel Lapinski 是一位图形软件工程师,就职于 Intel 公司。十多年前,Pawel Lapinski 和他的朋友们使用 C++、OpenGL 和 Cg 开发了一款 3D 培训/模拟应用程序,这款软件使用了头盔式显示器和立体成像等高端技术,至此开启了他的职业生涯。当开始研究工作后,Pawel Lapinski 就专注于 3D 图形技术,尤其对开放式的跨平台 OpenGL 库感兴趣。他撰写了一部论述高效使用顶点和片段着色器的教程。至此之后,他就不断谋求与 3D 图形有关的工作机会,并扩展他在这一领域的知识。Pawel Lapinski 有幸加入了一个优秀的开发小组,这个小组当时正在波兰格但斯克科技大学开发一个当时最大的类 CAVE 系统。Pawel Lapinski 负责使用 Unity3D 引擎实现 3D 可视化功能,以及通过立体成像支持运动跟踪功能。
Pawel Lapinski 的整个职业生涯都在研究计算机图形技术、OpenGL 库和着色器。然而,在成为 Intel 公司的一名程序员后,他负责对 Vulkan 图形驱动程序进行确认测试,因而获得了研究 Vulkan 的机会。Pawel Lapinski 编写了一系列介绍如何使用 Vulkan 的教程,通过本书与读者分享他掌握的 Vulkan 知识。
译者简介
苏宝龙,1999年毕业于辽宁石化大学计算机系,从事过计算机硬件维修、网络和网站架设等计算机专业实践工作。投身计算机图书翻译行业已有二十余年,译著三十余部,包括《响应式架构:消息模式Actor实现与Scala、Akka应用集成》《Scala 并发编程》《PHP 7 编程实战》等书。
计算机图形技术有较长和有趣的发展史,许多用于生成 2D 或 3D 图像的 API 和自定义图形处理方式不断涌现。在计算机图形技术的发展史中,OpenGL 是一个里程碑,是最早出现的一批图形库之一。OpenGL 不仅可以用于实时创建高性能 3D 图形,而且任何人都可以在多种操作系统上使用它。现在 OpenGL 仍旧在发展中,而且被广泛使用。
自从 OpenGL 被开发出来,图形硬件发展非常迅速。最近,为了适应这种高速发展,一种新的 3D 图形渲染技术处理方式出现了,这种处理方式通过低层级方式访问图形硬件。
OpenGL 被设计成一种高层级 API,使用它可以轻松地在屏幕上渲染图像。虽然这种高层级的处理方式为用户提供了方便,但图形驱动程序的处理工作变得困难,这是制约硬件发挥其全部潜能的主要原因之一。新的处理方式尝试战胜这些困难——它给予用户更多的硬件控制权,但同时需要用户承担更多责任。因为这种处理方式能够消除驱动程序的阻碍,应用程序开发者可以使图形硬件发挥全部潜能。低层级的访问操作使驱动程序能够变得更为小巧,但获得这些益处的代价是开发者必须做更多的工作。
这种新的图形渲染技术是由 AMD 公司在设计 Mantle API 时提出的。当 Mantle API 证明低层级访问方式可以大幅度提高性能后,其他图形硬件公司纷纷开始开发自己的图形库。
这些图形库中两个最突出的代表是苹果公司的 Metal API 和微软公司的 DirectX 12。
上面提到的这些图形库都是专门为指定的操作系统和/或硬件开发的,它们不具备像OpenGL 那样的开源和跨平台特性。2016 年 Vulkan 横空出世,它是由 Khronos Group 行业协会开发的,该协会也开发并维护了 OpenGL。Vulkan 代表了一种新的图形处理方式——通过低层级操作访问图形硬件,但是与其他图形库不同,任何人都可以在多种操作系统和硬件平台上使用 Vulkan——从安装了 Windows 或 Linux 操作系统的高性能台式机,到使用Android 操作系统的移动设备。因为 Vulkan 还是一个非常新的图形 API,所以指导开发者如何使用 Vulkan 的教程还比较少。本书旨在填补这个空白。
本书主要内容
第 1 章介绍 Vulkan 的基础知识。本章介绍了下载 Vulkan 的 SDK、连接 Vulkan Loader 库的方式、怎样选择用于执行操作的物理设备,以及创建逻辑设备的方式。
第 2 章介绍 Vulkan 图像显示。本章介绍了交换链的定义和用于创建交换链的参数。掌握这些知识后,我们就可以使用交换链执行渲染操作并在屏幕上查看工作成果。
第 3 章介绍命令缓冲区和同步化。本章介绍了如何将命令记录到命令缓冲区并提交到队列中,以便命令被硬件执行。本章还介绍了各种同步机制。
第 4 章介绍资源和内存两种基础且最为重要的资源——图像和缓冲区,使用它们可以存储数据。本章介绍了创建图像和缓冲区的方式、为图像和缓冲区准备内存空间的方式,以及通过我们编写的应用程序(CPU)将数据加载到图像和缓冲区中的方式。
第 5 章介绍如何将创建好的资源提供给着色器。本章介绍了如何创建在着色器内部使用的资源,以及如何设置描述符集合——应用程序和着色器之间的接口。
第 6 章介绍将一组绘制操作组织到一个集合中的方式,该集合称为子通道。多个子通道构成了渲染通道。本章介绍了如何创建附着材料(渲染操作的目标,会在执行绘制操作的过程中被使用),以及如何创建帧缓冲区。帧缓冲区会根据附着材料描述,与指定的资源绑定到一起。
第 7 章介绍所有可用图形和计算着色器阶段的编程规范。本章介绍了如何使用 GLSL 编程语言编写着色器程序,还介绍了如何将这些着色器程序转换为 SPIR‑V 程序——Vulkan 核心唯一接收的形式。
第 8 章介绍创建图形和计算管线的过程。这两个管线用于设置绘制命令和计算操作的参数,以便图形硬件能够正确地处理这些命令和操作。
第 9 章介绍如何将用于绘制 3D 模型的所有操作记录下来,以及分配计算工作。本章介绍了各种优化技巧,使用这些技巧可以提高应用程序的性能。
第 10 章介绍 3D 渲染应用程序必然会用到的一组便捷工具。本章介绍了如何从文件中加载纹理数据和 3D 模型,还介绍了如何在着色器内部处理几何图形。
第 11 章介绍常用的照明技巧,从简单的漫反射和镜面反射照明计算,到法线贴图和阴影贴图技巧。
第 12 章介绍高级渲染技术,该技术广泛应用于许多流行的应用程序,如游戏和基准测试程序。
阅读本书前需要了解的注意事项
Vulkan 是开源的和跨平台的,本书介绍关于它的各方面知识。Vulkan 可以在 Microsoft Windows 7(以及更新的版本)和 Linux (Ubuntu 16.04 或更新的版本)操作系统中使用。
Android 7.0 以上的版本和 Android Nougat 也支持 Vulkan,但是本书中的示例代码不是专门为 Android 操作系统设计的。
如果想要为 Windows 7+和 Linux 之外的操作系统开发自己的应用程序或在这二者之外的操作系统上运行本书的示例程序,那么图形硬件和驱动程序都必须支持 Vulkan。要了解详细信息,应查询 3D 图形硬件厂商的网址和/或客服,以便查明图形硬件是否能够运行使用 Vulkan 的软件。
在使用 Windows 操作系统时,可使用免费软件 Visual Studio Community 2015 IDE(或更新的版本)编译本书的示例代码,还应将 CMAKE 3.0 或更新的版本与 Visual Studio Community 2015 IDE 一起使用,以便获得高效的软件编译解决方案。
在使用 Linux 操作系统时,可以组合使用 CMAKE 3.0 和 make 工具进行编译工作,也可以使用其他编译工具(如 QtCreator)编译本书的示例代码。
本书面向的读者
了解 C/C++语言、掌握图形编程基础知识,以及想要了解 Vulkan 优势的开发者,最适合阅读本书。掌握 Vulkan 基础知识的读者,可以更轻松地完成本书中的实验。希望了解Vulkan 优势的 OpenGL 开发者也能更深刻地体会到本书的价值。
本书中的标题
本书中出现了多个重复的标题(准备工作、具体处理过程、具体运行情况、补充说明和参考内容)。
下面说明这些标题的具体含义。
准备工作:这个标题下方介绍实验的主要目的,还会介绍该实验需要设置哪些软件和初始设置。
具体处理过程:这个标题下方介绍实验步骤。
具体运行情况:这个标题下方详细介绍实验步骤的执行情况。
补充说明:这个标题下方介绍更多关于这个实验的信息,以便读者能够获得更多的知识。
参考内容:这个标题下方提供一些有价值的参考信息。