黑不溜秋的
GPU全栈博主-程序哥。
展开
-
Vulkan进阶系列1 - Raytracing 光线查询
为了提高效率,光线追踪需要将几何体组织成加速结构(AS, 即Acceleration Structure),以减少渲染过程中光线与三角形的相交测试次数。这种层次结构通常在硬件中实现,但只有两个层级对用户可见:一个顶层加速结构(TLAS),它引用任意数量的底层加速结构(BLAS)。通常,BLAS对应于场景中的单个3D模型,而TLAS对应于整个场景。BLAS实际存储顶点数据。原创 2024-08-30 00:15:13 · 593 阅读 · 0 评论 -
Vulkan进阶系列0 - Raytracing 基础
Vulkan 的光线追踪是一种现代图形技术,用于实现更加逼真的高质量渲染效果。通过使用Vulkan的光线追踪扩展:VK_KHR_ray_tracing_pipeline 和 VK_KHR_acceleration_structure, 程序员可以更加高效的模拟光线的传播,反射和折射,并能够跟踪光线在场景中的传播路径,计算与场景中物体的求交,从而生成逼真的图像。原创 2024-10-09 01:43:09 · 254 阅读 · 1 评论 -
Vulkan入门系列18 - 计算着色器(Compute Shader)
在这一章节中,我们将探讨计算着色器。到目前为止,之前的所有章节都涉及了Vulkan管线的传统图形部分。但与OpenGL等传统API不同,Vulkan中中计算着色器的支持是强制性的。这意味着我们可以在每个可用的Vulkan实现上使用计算着色器,无论是高端桌面GPU还是低功耗嵌入式设备。这为图形处理单元(GPGPU)上的通用计算打开了新世界,无论您的应用程序运行在哪里。GPGPU意味着您可以在GPU上进行通用计算,这在传统上是CPU的领域。原创 2024-08-27 23:02:48 · 438 阅读 · 0 评论 -
Vulkan入门系列17 - 多重采样( Multisampling)
我们的程序现在可以加载多个级别的纹理,从而解决了在渲染远离观察者的物体时出现的伪影问题。现在图像变得平滑多了,但仔细观察,你会发现绘制的几何图形边缘呈现锯齿状。这在我们早期渲染一个四边形的程序中尤为明显:这种不希望有的效果被称为 “锯齿”,这是由于可用于渲染的像素数量有限造成的。由于没有无限分辨率的显示器,因此在某种程度上总是会出现这种现象。解决这一问题的方法有很多,本章我们将重点介绍其中一种比较常用的方法: 多采样抗锯齿 (MSAA)。原创 2024-08-26 00:14:00 · 406 阅读 · 0 评论 -
Vulkan入门系列16 - 生成多级纹理贴图( Mipmaps)
我们的程序现在可以加载和渲染 3D 模型了。在本章中,我们将再添加一项功能-- Mipmaps 生成。Mipmaps 广泛应用于游戏和渲染软件中,Vulkan 让我们可以完全控制 Mpmaps 的生成方式。Mipmaps 是预先计算的、缩放的图像。每个新图像的宽度和高度都是前一个图像的一半。Mipmaps 是一种细节层次(Level of Detail)或 LOD 的形式。距离摄像机较远的物体将从较小的 mip 图像中获取纹理样本。使用较小的图像可以提高渲染速度,避免出现摩尔纹等人工痕迹。原创 2024-08-25 22:58:57 · 220 阅读 · 0 评论 -
Vulkan入门系列15 - 加载模型
现在,我们的程序已经可以渲染带纹理的 3D 网格图形了,但我们前面文章中使用的几何图形还不是很有趣。在本章中,我们将扩展程序功能,从实际的3D模型文件中加载顶点和索引数据,让显卡做些实际有趣的工作。许多图像API教程都像本章这样,让读者编写自己的 OBJ 加载器。这样做的问题是,任何稍微有趣的3D应用需要一些该(OBJ)文件格式不支持的功能,比如骨骼动画。在本章中,我们将从 OBJ 模型中加载网格数据,但我们将更多地关注网格数据和程序本身,而不是从文件中加载网格数据的细节。原创 2024-08-25 14:34:27 · 169 阅读 · 0 评论 -
Vulkan入门系列14 - 深度缓冲区
到目前为止,我们已经将几何体投影到 3D 中,但它仍然是完全平面的。在本章中,我们将为位置添加一个 Z 坐标,为 3D 网格做好准备。我们将使用第三个坐标将一个正方形放置在另一个正方形上面,以了解几何体未按深度排序时出现的问题。二:3D几何......接下来,更新顶点着色器,以接受并转换三维坐标作为输入。之后不要忘记重新编译!...最后,更新顶点数组以包含 Z 坐标:如果现在运行您的应用程序,您应该会看到与之前完全相同的结果。原创 2024-08-24 21:33:22 · 203 阅读 · 0 评论 -
Vulkan入门系列13 - Texture Mapping 图像采样器描述符
在之前的一致(uniform)缓冲区文章中,我们首次学习了描述符。在本章中,我们将学习一种新型描述符:图像采样器描述符。通过这种描述符,着色器可以通过采样器对象访问图像资源,就像我们在上一章中创建的采样器对象一样。我们将首先修改描述符布局、描述符池和描述符集,以包含这样一个图像采样器描述符。之后,我们将在顶点中添加纹理坐标,并修改片段着色器,以便从纹理中读取颜色,而不仅仅是对顶点颜色进行插值。原创 2024-08-24 11:45:23 · 80 阅读 · 0 评论 -
Vulkan入门系列12 - Texture Mapping 图像视图和纹理采样
本章我们将创建两个资源,它们用于图形流水线从图像中采样。第一个资源是我们在处理交换链图像时已经见过的,但第二个资源是新的——它与着色器如何从图像中读取像素有关。原创 2024-08-21 20:14:11 · 108 阅读 · 0 评论 -
Vulkan入门系列11 - Texture Mapping 图像
到目前为止,在我们介绍的例子中,几何体已经使用每个顶点的颜色进行了着色,这是一种相当有限的方法。在本教程的这一部分,我们将实现纹理映射,使几何体看起来更加有趣。这也将使我们能够在未来的章节中加载和绘制基本的3D模型。将一个纹理添加到我们的应用程序将需要以下几步:1. 创建一个图像对象,并存到设备内存中。2. 从图像文件中读取像素,并填充到图像对象中。3. 创建一个图像采样器。4. 添加一个图像采样器描述符以从纹理中采样颜色。原创 2024-08-20 09:57:17 · 221 阅读 · 0 评论 -
Vulkan入门系列10 - Uniform Buffer 资源描述符集
上一篇文章介绍了资源描述符布局(descriptor layout)。在本篇文章中,我们将为每个 VkBuffer 资源创建一个描述符集(descriptor set),介绍资源描述符集的使用。描述符布局(descriptor layout) 与 描述符集(descriptor set)的通俗解释:1. 描述符布局是用来描述资源的存储格式,数据类型,大小等信息,有了这些信息,着色器其才能访问,要不然资源就是一堆二进制数据,着色器是不知道它表示的是啥内容的。原创 2024-08-19 14:22:48 · 330 阅读 · 0 评论 -
Vulkan入门系列9 - Uniform Buffer 资源描述符布局
我们现在可以通过使用Vertex Buffer的形式,将顶点的任意属性传递到顶点着色器,但全局变量如何传递给着色器呢?从这一篇文章开始,我们将进入3D图形绘制阶段,这需要一个模型视图投影矩阵。我们可以将其作为顶点数据放到Vertex buffer中,但这会浪费内存,并且每当发生矩阵变换时,我们都需要更新顶点缓冲区。这些矩阵变换可能在每一帧中都会发生(如改变相机视角位置等)。在Vulkan中解决这个问题的正确方法是使用资源描述符。描述符是一种让着色器自由访问像缓冲区和图像等资源的方式。原创 2024-08-15 14:01:59 · 98 阅读 · 0 评论 -
Vulkan入门系列8 - Vetex Buffer 索引缓冲区
在实际应用中,我们要渲染的 3D 网格通常会在多个三角形之间共享顶点。即使是绘制矩形这样简单的操作也会出现这种情况:绘制一个矩形需要两个三角形,这意味着我们需要一个包含 6 个顶点的顶点缓冲区。问题是,两个顶点的数据需要重复,导致 50%的冗余。当网格更加复杂时,情况会变得更糟,平均 3 个三角形会重复使用顶点。解决这个问题的方法是使用索引缓冲区。索引缓冲区本质上是一个指向顶点缓冲区的指针数组。通过它,可以对顶点数据重新排序,并对多个顶点重复使用当前顶点数据。原创 2024-08-14 19:44:34 · 465 阅读 · 0 评论 -
Vulkan入门系列7 - Vetex Buffer 暂存缓冲区
我们现在的顶点缓冲区工作正常,但顶点缓冲区的内存类型可能不是最优内的存类型,最优的内存类型应该允许从图形卡内存中读取,而不是从CPU访问的内存。最优的内存类型具有VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT标志,通常在专用显卡上无法被CPU访问。在本章中,我们将创建两个顶点缓冲区。一个是在CPU可访问内存中的暂存缓冲区,用于将数据上传到顶点数组,另一个是在设备本地内存中的顶点缓冲区。然后,我们将使用缓冲区复制命令将数据从暂存缓冲区移动到实际的顶点缓冲区。更多内容请参考。原创 2024-08-13 23:08:09 · 917 阅读 · 0 评论 -
Vulkan入门系列6 - Vetex Buffer 创建顶点缓冲区
在Vulkan中,缓冲区是用于存储可以被显卡读取的任意数据的内存区域。它们可以用于存储顶点数据,我们将在本文中进行操作,但它们也可以用于许多其他用途,我们将在后面的文章中探讨。与我们迄今为止处理的Vulkan对象不同,缓冲区不会自动为自己分配内存。前几篇文章的工作表明,Vulkan API将几乎所有事情的控制权交给程序员,而内存管理就是其中之一。更多内容请参考一文带你了解GPU编程从入门到精通-CSDN博客。原创 2024-08-13 00:48:23 · 845 阅读 · 0 评论 -
Vulkan入门系列5 - Vetex Buffer 顶点输入描述
在接下来的几篇文章中,我们将把顶点着色器中的硬编码顶点数据替换为内存中的顶点缓冲区。我们将从创建一个CPU可见的缓冲区并使用memcpy直接将顶点数据复制到其中的最简单方法开始,然后我们将看到如何使用临时缓冲区将顶点数据复制到高性能内存中。原创 2024-08-12 00:16:27 · 935 阅读 · 0 评论 -
Vulkan入门系列4 - Command Buffers 和 Secondary Command Buffers
在前面入门系列2中,我们了解Vulkan绘制三角形的全过程,对Vulkan绘制流程和主要模块有了全局的了解,接下来是从局部介绍Vulkan中的主要模块,本节介绍 Command Buffers 和 Secondary Command Buffers。原创 2024-06-29 09:11:46 · 291 阅读 · 0 评论 -
Vulkan入门系列3 - 绘制三角形代码解析(全)
【代码】Vulkan入门系列3 - 绘制三角形完整代码(带详细注释)原创 2024-07-08 02:54:47 · 550 阅读 · 0 评论 -
Vulkan入门系列2- 绘制三角形整体流程
Vulkan的学习曲线是比较陡峭的,学习Vulkan刚开始是一个陡坡,等爬上这个陡坡之后,后面的过程就相对比较平缓了。用Vulkan绘制三角形,就相当于在爬这样一个陡坡,因为这里面需要写写很多代码,用到Vulkan里面很多概念。了解了一个三角形的绘制过程,基本上也就掌握了Vulkan的相关知识以及它的渲染流程。第一步:初始化Vulkan并选择合适的物理设备(GPU设备)第二步:创建逻辑设备和命令队列族。第七步:创建命令池以及命令缓冲区。第四步:创建图像视图和帧缓冲区。第三步:创建窗口画布和交换链。原创 2024-06-20 00:40:06 · 397 阅读 · 0 评论 -
Vulkan入门系列1- Windows VS2022 开发环境配置
Vulkan 在Windows 上的开发环境配置原创 2023-04-22 09:57:39 · 1357 阅读 · 1 评论 -
Vulkan入门系列0- Vulkan与OpenGL的区别
虽然Vulkan和OpenGL都是对GPU的抽象,都能达到相同的功能,但它们的设计理念不同,可以说设计差异是非常之大,由于OpenGL从1992年到现在,已经有30多年的历史,GPU功能日新月异,与当年不可同日而语,在OpenGL保持向下兼容情况下,还要在OpenGL基础上设计一套编程接口显然是不可能的,所以推出了新编程规范Vulkan。另外在一些无窗口的应用中,Vulkan可以有选择的不创建帧缓冲区,比如在数学运算,物理模拟,处理视频流的应用中并不需要窗口,所以Vulkan支持更灵活的应用场景。原创 2024-07-12 00:06:11 · 1498 阅读 · 0 评论