Vulkan 集成管线 Vulkan 集成管线,我们现在整合前几章节的结构体和对象创建图形管线!以下是我们现在用到的对象类型,作为一个快速回顾: 所有这些决定了图形管线的最终功能,所以我们在createGraphicsPipeline函数的最后填充VkGraphicsPipelineCreateInfo结构体。 现在开始引用之前的VkPipelineShaderStageCreateInfo结构体...

Vulkan 深度缓冲区 Vulkan 深度缓冲区,到目前为止,我们所使用的几何图形为3D,但仍然完全扁平的。在本章节中我们添加Z坐标到3D模型数据中。我们将使用这个第三个坐标在当前平面上放置一个正方形,以查看几何图形没有进行深度排序造成的问题。 一、3D 空间 修改 Vertex 结构体使用3D vector作为位置,并且更新对应VkVertexInputAttributeDescription...

Vulkan-点光源阴影映射

vulkan

  

2020-04-02 08:41:18

Vulkan-点光源阴影映射   Cubemap是一种特殊数据结构,以其特殊的采样方式实现了球空间数据的采集。经典的使用是实现点光源的阴影映射。   在openGL中实现cubemap纹理的生成,有两种方式: 连续使用六次渲染,每次渲染cubemap的一面 在几何着色器中直接投影六个方向,一次渲染   两种渲染方式的性能在openL中差异...

原文链接:https://vulkan.lunarg.com/doc/sdk/1.2.131.2/windows/tutorial/html/06-init_depth_buffer.html 创建 Depth Buffer 这一章节的代码文件是 06-init_depth_buffer.cpp Depth buffer 是可选的,但是在最终的示例里,你需要 depth buffer 来...

Vulkan 图形管线 此篇文章对一般计算机图形管线讲述个人感觉较好,可参考:图形渲染管线简介 Vulkan 图形管线,通过接下来的章节,我们将会开启有关图形管线的话题,通过对图形渲染管线的配置完成最后的三角形绘画。所谓图形管线就是将mesh使用到的vertices定点数据和贴图数据,转化为渲染targets像素的操作序列。简要的概述如下图所示: Input assembler收集最原始的顶点数据...

Vulkan 帧缓冲区,我们在前面的章节中已经讨论了很多次framebuffers帧缓冲区,到目前为止我们配置了render pass渲染通道并希望输出一个与交换链图像格式一致的帧缓冲区,但是我们实际上还没有创建。 在render pass创建阶段我们指定了具体的附件,并通过VkFramebuffer对象包装绑定。帧缓冲区对象引用表示为附件的所有的VkImageView对象。在我们的例子中只会使用...

加载模型 Vulkan 加载模型(Loading models),应用程序现在已经可以渲染纹理3D模型,但是 vertices 顶点和 indices 索引数组中的几何体不是很有趣。在本章节我们扩展程序,从实际的模型文件冲加载顶点和索引数据,并使图形卡实际做一些工作。 许多图形API系列教程中让读者在这样的章节中编写自己的OBJ加载程序。这样做的问题是任何有趣的3D应用程序很快需要某种功能,但是该...

摄像机(Camera) 前面的教程中我们讨论了观察矩阵以及如何使用观察矩阵移动场景(我们向后移动了一点)。Vulkan本身没有摄像机(Camera)的概念,但我们可以通过把场景中的所有物体往相反方向移动的方式来模拟出摄像机,产生一种我们在移动的感觉,而不是场景在移动。 本节我们将会讨论如何在Vulkan中配置一个摄像机,并且将会讨论FPS风格的摄像机,让你能够在3D场景中自由移动。我们也会讨论键盘...

Vulkan 渲染通道 Vulkan 渲染通道,在我们完成管线的创建工作之前,我们需要告诉Vulkan渲染时候使用的framebuffer帧缓冲区附件相关信息。我们需要指定多少个颜色和深度缓冲区将会被使用,指定多少个采样器被用到及在整个渲染操作中相关的内容如何处理。所有的这些信息都被封装在一个叫做 render pass 的对象中。 一、设置 我们新添加一个createRenderPass函数,在...

Vulkan 固有功能 Vulkan 固有功能,早期的图形API在图形渲染管线的许多阶段提供了默认的状态。在Vulkan中,从viewport的大小到混色函数,需要凡事做到亲历亲为。在本章节中我们会填充有关固有功能操作的所有结构体。 一、顶点输入 VkPipelineVertexInputStateCreateInfo结构体描述了顶点数据的格式,该结构体数据传递到vertex shader中。它以...

在使用vulkan实现各项渲染工作的时候,我们经常会因为各种不经意的坑导致渲染失败,所以调试工作就尤为重要,所以今天我们就来说一下如何可视化vulkan的各项进程来调试程序。 一、简介 首先我们来说一下vulkan验证层:LunarG SDK附带的Vulkan验证层是在运行时调试应用程序所必需的,它们对于使应用程序根据规范进行验证并确保跨不同实现的可移植性至关重要。 但是它们无法捕获的是逻辑错误,...

Vulkan 着色器模块 GLSL语言可参照LearnOpenGL学习。 Vulkan 着色器模块,与之前的图像API不同,Vulkan中的着色器代码必须以二进制字节码的格式使用,而不是像GLSL和HLSL这样具有比较好的可读性的语法。此字节格式成为SPIR-V,它可以与Vulkan和OpenCL一同使用。这是一种可以编写图形和计算着色器的格式,但我们重点介绍本教程中Vulkan图形流水线使用的着...

Vulkan 开发环境搭建之Windows 一、Vulkan 开发环境搭建 SDK 开发Vulkan应用程序所需的最重要的组件就是SDK。它包括核心头文件、标准的Validation layers及调试工具集、和驱动Loader,如果现在这些关键词不是很明白的话,不要紧,我会在后续的教程上向大家说明。 首先下载SDK,登录LunarG网站:官网, 选择Windows平台下的最新SDK下载安装,特别...

几何着色器 我们大部分情况下仅使用顶点着色器(vertex shader)和片元着色器(fragment shader),而实际上vulkan还提供了一个可选的几何着色器(geometry shader)。几何着色器位于顶点和片元着色器之间,如果没有使用时,则顶点着色器输出到片元着色器,在使用几何着色器后,顶点着色器输出组成一个基础图元的顶点信息到几何着色器,经过几何着色器处理后,再输出到片元着色...

粒子系统 本部分主要是实现一个简单的基于CPU的粒子系统。粒子数据存储在主机内存中,每帧在CPU上更新,并在使用预乘alpha渲染之前与设备同步。 一个微粒,从vulkan的角度看就是一个总是面向摄像机方向且(通常)包含一个大部分区域是透明的纹理的小四边形。一个微粒本身主要就是一个sprite,但是当你把成千上万个这些微粒放在一起的时候,就可以创造出令人疯狂的效果。 当处理这些微粒的时候,通常是由...