首页 > 其他分享 >Vulkan/Graphics Pipelines

Vulkan/Graphics Pipelines

时间:2023-12-02 14:12:59浏览次数:38  
标签:vulkan Pipelines 片元 阶段 Graphics 顶点 Vulkan 着色器 管线

渲染是vulkan最基础的功能,也是众多图形化应用最核心的部分。vulkan的渲染过程可以当作是通过执行不同阶段的命令以此来在展示设备上渲染出图片的过程。

 

vulkan中,渲染管线可以看作是一条生产流水线,命令在管线的开头进入,并且在管线内不同阶段执行。每个阶段都有诸如变换,读取命令或关联的数据,然后变成其他的数据的操作。在管线的结尾,管线内命令就会渲染出许多像素来组成最终画面。

渲染管线的许多部分是可选的,你可以取消它们或者vulkan实现可能根本不支持这部分功能。管线内唯一必须启用的功能是顶点着色器(vertex shader)。整条vulkan的渲染管线由下图展示。然而,看到该图时不必惊慌,我们会在章节内逐阶段的介绍它们,深挖它们的细节。

 

下面是对管线内每阶段的简单介绍:

  • 绘制(Draw):这是vulkan渲染管线中命令进入的起点。一般来说,vulkan设备内的一个小处理器或专用硬件会解释command buffer中的命令,并且直接用硬件与之交互。
  • 输入装配(Input assembly):该阶段会读取包含顶点信息的顶点缓冲(vertex buffer)和索引缓冲。(index buffer)
  • 顶点着色器(Vertex shader):这里是顶点着色器执行的步骤。它会将顶点的各属性当作输入,为下个阶段准备由变换操作和生成操作而产生的顶点数据。
  • 细分曲面控制着色器(Tessellation control shader):这是一个可编程的着色阶段,负责产生细分因子(tessellation factors)和其他面片(patch)数据,这些数据会被其他固定功能的细分阶段使用。
  • 细分曲面图元生成(Tessellation primitive generation):没有在图中展示,该固定功能的阶段使用在细分曲面控制着色器中产生的细分因子将片面图元打碎成更小,更简单的图元,这些打碎后的图元会在细分曲面评估着色器中使用。
  • 细分曲面评估着色器(Tessellation evaluation shader):该着色阶段会在每个由曲面细分图元生成阶段产生的新的顶点上运行。它与顶点着色器类似,不过顶点数据是程序产生的而不是从内存中读取的。
  • 几何着色器(Geometry shader):该着色阶段使用整个图元。一个图元可能是点、线、三角形或者以上的变体,包括围绕它们的额外顶点。该阶段还可以在管线中改变图元类型。
  • 图元装配(Primitive assembly):该阶段会使用上述由顶点着色器,细分曲面阶段或几何着色器产生的顶点,将它们组装成适合光栅化的图元。也会裁剪、变换图元以适应视口。
  • 裁剪(Clip and cull):该固定阶段会决定哪些图元是对最终图像生成具有贡献的,从而忽略掉那些毫无贡献的成员,然后将潜在的可视图元转发给光栅器。
  • 光栅化(Rasterizer):光栅化是vulkan中的核心基础。光栅器会读取由一系列顶点组成的图元,然后将他们变成一个个独立的片元,它们将来可能就是你最终图像的像素。
  • 片元预处理(Prefragment operations):有些处理可以发生在片元着色之前,比如深度和模板测试。
  • 片元装配(Fragment assembly):没有在图片中展示,片元装配组装光栅化后的输出和每个片元的数据,然后把他们发送给片元着色器。
  • 片元着色器(Fragment shader):该阶段是管线最后运行的着色器,负责给最后固定功能阶段计算片元数据。
  • 片元后处理(Postfragment operations):某些情况下,片元着色器修改了片元预处理过的数据,需要再次进行一边和预处理一样的操作。
  • 颜色混合(Color blending):颜色运算读取片元着色器和片元后处理产生的最后结果,然后使用它们更新到帧缓冲中。颜色运算包括混合和逻辑运算。

正如看到的,渲染管线中有很多互相关联的阶段。不像运算管线(Compute Pipeline),渲染管线不仅包含配置大量的固定功能的阶段,还包括做多五个着色器的使用。此外,根据不同实现,某些固定阶段实际上部分在驱动生成的着色器代码中执行。

vulkan中,将渲染管线看作一个对象的具体原因是为了提供尽可能多的信息,以便让管线在固定阶段和可编程着色器之间进行移动。如果我们不能在同一时间在同一对象内获取全部信息,vulkan实现就可能需要根据配置状态来重新编译着色器。渲染管线内包含的各个状态是经过细致的选择,正是为了避免上述情况,让管线的状态转换变得尽可能快。

 

标签:vulkan,Pipelines,片元,阶段,Graphics,顶点,Vulkan,着色器,管线
From: https://www.cnblogs.com/FastEarth/p/17871528.html

相关文章

  • Vulkan/Renderpasses
    能将渲染管线和运算管线区别开了的要素之一是——通用,在你使用一个渲染管线渲染图像之后也可能进行其他处理或展示给yoghurt。在复杂的图形应用中,图像需要经过许多通道才能生成,每个通道都负责不同的部分,比如全屏幕的后处理或合成,或渲染UI元素等。这些通道可以由vulkan的一个渲染......
  • Vulkan/FrameBuffer
    帧缓冲(Framebuffer)代表由渲染管线进行渲染的一组图像。它们影响管线的最后几个阶段:深度模板测试,颜色混合,逻辑运算,多重采样等等。一个帧缓冲对象总是附着在一个渲染通道上并且可以用在多个具有相似模板编排的渲染通道中。调用vkCreateFramebuffer创建帧缓冲对象。在VkFramebuffer......
  • Visual Studio 2022:Vulkan 环境配置
    (前置)安装VulkanSDK,并确认安装目录,此后记为%VulkanDir%(例如:C:/VulkanSDK/1.3.261.1)VisualStudio中新建C++项目,进入“项目”>>“[项目名]属性”,上方两个选项设置为“所有配置”“所有平台”C/C++>>常规>>附加包含目录:添加%VulkanDir%/Include(替换%VulkanDir%为实际目录,下同)......
  • QGraphicsLineItem的位置
     上图中红线起始位置0,0,宽度1。若想与图像起始像素重合,应该设置起始位置为0.5,0.5。若宽度为2,则起始位置为1,1。此时红线与图像的第1、2行像素重合。......
  • 【小沐学Vulkan】Vulkan开发环境配置
    1、简介https://www.vulkan.org/Vulkan是新一代图形和计算API,用于高效、跨平台访问GPU。Vulkan是一个跨平台的2D和3D绘图应用程序接口(API),最早由科纳斯组织在2015年游戏开发者大会(GDC)上发表。号称是glNext。旨在提供更低的CPU开销与更直接的GPU控制,其理念大致与Direct3D12......
  • Qt 6.5.2 下 QGraphicsView 中使用触控手势的问题
    自定义的QGraphicsView中加入setScene后,其它Gesture能够触发,但QPanGesture不能在场景中触发。而空白QGraphicsView(QWidget)则可以正常触发PanGesture手势……源码和文档中都已经说明,gesture是给QGraphicsObject使用的……但我们就是想使用PanGesture手势来操作场景拖动……这可......
  • java中使用Graphics绘制图形验证图片,为什么图中的文字没有呈现?
       项目中做了一个图形验证的功能。可选择图形中的文字,想出现的效果如上。图形上有文字。而在实际做的过程中,发到测试环境linux系统上去之后,是下面的情况: 只有图,没有文字!于是问了问度娘,说是字体的原因。项目中使用了linux中没有的字体会导致上图的问题。但我是使用了......
  • [Mac] 安装paddle-pipelines出现 ERROR: Failed building wheel for lmdb
    今天在mac换了新系统,然后重新安装paddle-piplines的时候出现了下面的问题:xcrun:error:invalidactivedeveloperpath(/Library/Developer/CommandLineTools),missingxcrunat:/Library/Developer/CommandLineTools/usr/bin/xcrunerror:command'/usr/bin/clang'fai......
  • 3D Math for Graphics and Game笔记
    这个机器人的原点在世界坐标系下的(4.5,1.5),而她右肩膀上的那个灯的模型坐标系为(-1,5),怎样计算这个灯的世界坐标呢?开始:获取原点,这个原点为(4.5,1.5)向右移动一个位置,机器人的"左边"是[0.87,0.50],这样得到的位置为(4,5,1.5)+(-1)X[0.87,0.50]=(3.63,1)向上移动5个位......
  • 构造Vulkan图形管线:VkGraphicsPipeline
     创建Pipeline构造信息:它包括:基本构造信息VkStructureType构建Pipeline额外需要的结构:constvoid*pNext构建Pipeline时指定的Flags:VkPipelineCreateFlags多个ShaderStage信息:VkPipelineShaderStageCreateInfo*(数组)......