Vulkan与OpenGL对比——Vulkan的全新渲染架构(vulkan和opengl游戏渲染哪个好)


本文主要分享【vulkan和opengl游戏渲染哪个好】,技术文章【Vulkan与OpenGL对比——Vulkan的全新渲染架构】为【iijik55】投稿,如果你遇到面试,学习路线,阿里巴巴相关问题,本文相关知识或能到你。

vulkan和opengl游戏渲染哪个好

OpenGL是Khronos Group组织发布的跨平台图像渲染引擎。在这里科普一下Khronos组织,由Intel、Nvidia等公司共同创立,致力于创建开放标准的应用程序API。大名鼎鼎的OpenGL、OpenGL ES、WebGL、Vulkan都是来自Khronos。而vulkan称为“下一版本的OpenGL”,旨在提供更低的CPU开销和更多GPU控制。Android API 24以后支持vulkan,iOS在WWDC2014也推出Metal图像渲染。本文主要探讨Vulkan的全新渲染架构。

目录

一、OpenGL与Vulkan渲染架构

1、OpenGL渲染架构

2、Vulkan渲染架构

3、OpenGL与Vulkan互操作

二、Vulkan Components

三、Graphics Pipeline

四、Memory & Objects

1、Memory

2、Objects

五、Shaders

1、SPIR-V结构

2、GLSL转换SPIR-V

六、Image & ImageView

七、Buffer & Command-Buffer

1、Buffer

2、Command-Buffer

八、Synchronization & Descriptor-Set

1、Synchronization

2、Descriptor-Set

九、Resource Management

十、Multi-Thread & Thread Safety

1、Multi-Thread

2、Thread Safety


一、OpenGL与Vulkan渲染架构 1、OpenGL渲染架构

OpenGL架构分为三层:应用层、驱动层、GPU层。OpenGL命令从应用层经过驱动层,再到GPU层处理;OpenGL资源从应用层经过驱动层(由图像管线状态机管理),再到GPU层的内存。OpenGL具体架构如下图所示:

2、Vulkan渲染架构

Vulkan架构也是分为三层:应用层、驱动层、GPU层。Command-Buffer从应用层经过驱动层,再到GPU层处理。Vulkan资源也是从应用层经过驱动层(由内存管理器管理),再到GPU层的内存。Vulkan具体架构如下图所示:

3、OpenGL与Vulkan互操作

OpenGL与Vulkan互操作包括如下步骤,如下图所示:

可供替代的WSI;创建OpenGL上下文和通用操作;创建Vulkan设备;在OpenGL与Vulkan之间循环渲染;OpenGL与Vulkan混合渲染;

二、Vulkan Components

Vulkan组件包括:Memory、Image、ImageView、FrameBuffer、Sampler、Graphics pipiline、Descriptor-set、Command-buffer、Device等。各组件之间关系如下图所示:

从Image到ImageView,再到FrameBuffer,最终到达Render-Pass。其中FrameBuffer比OpenGL更简单、不需要为资源定义角色,Render-Pass真正为FrameBuffer定义角色、可以有多个Sub-Pass。具体示意图如下:

三、Graphics Pipeline

图像管线具有如下特点,如下图所示:

描述所有状态,包括着色器;预编译;在初始化时机完成;防止渲染时过度校验;某些渲染状态可以从中排除,变成动态状态;

此外,图像管线必须与着色器一致、没有内省。如下图所示:

四、Memory & Objects 1、Memory

Memory来自Heap堆内存。Memory分为Video和System两种形式,其中Video由rgb或rgba组成,而System主要由矩阵组成。Memory可以转化为Image。Memory关系图如下:

2、Objects

Objects对象包括以下特点,如下图所示:

引用数据缓冲区的Vulkan对象需要绑定内存;Vulkan设备暴露不同的内存堆;这些堆有不同的内存类型;

五、Shaders 1、SPIR-V结构

SPIR-V全称Standard, Portable Intermediate Representation - V,是一种用于GPU通用计算的标准化中间语言。它的模块结构包括:rotate、lighting、vtx_main、frag_wood、frag_pastic、frag_metal等。它具有以下特征,具体如下图所示:

多个入口点:可以被定义在单个SPIR-V着色器模块; 防止重复代码:着色器模块使用多个图像管线;允许共享代码片段;更容易共享通用的着色器代码;

2、Vulkan读取GLSL

着色器具有如下图特点:

Vulkan使用SPIR-V直接传递到驱动层;NVIDIA允许直接编译GLSL;

Vulkan读取GLSL过程如下图所示,可以通过VK_NV_glsl_shader直接读取GLSL,也可以经过glslang读取再转换为SPIR-V,最终到达Vulkan。

六、Image & ImageView

Image与ImageView有如下特点,如下图所示:

Image代表所有类型的像素数组;纹理:颜色或深度模板;渲染目标:颜色或深度模板;当ImageView需要特定格式时,需要正确暴露Images;给着色器使用;给帧缓冲区使用;

七、Buffer & Command-Buffer 1、Buffer

Buffer缓冲区具有如下特点,如下图所示:

用于不同场景,包括:索引/顶点缓存,统一缓存;Vulkan对象必须绑定到设备内存,可以被CPU访问与缓存,被GPU访问;

2、Command-Buffer

命令缓冲区具有如下特点,如下图所示:

Vulkan可以渲染命令缓冲区数据;GPU大多数情况以FIFO形式获取;可以被创建用于一个或多个子任务;不能从GPU创建图形工作;支持多线程;主Cmd-buffer可以调用二级Cmd-buffer;

八、Synchronization & Descriptor-Set 1、Synchronization

同步方式有三种,如下图所示:

信号量;事件和屏障;栅栏;

2、Descriptor-Set

描述集具有如下特点,如下图所示:

每个描述集持有资源的引用;描述集布局定义资源如何放置到描述集合中;命令缓冲区可以高效绑定它们;它们必须匹配着色器期望的每个阶段;

九、Resource Management

十、Multi-Thread & Thread Safety 1、Multi-Thread

Vulkan支持多线程渲染,每个线程由本地命令缓存池,具体如下图所示:

2、Thread Safety

命令缓存池是线程安全的,提供fence栅栏进行隔离,具体以下特点,如下图所示:

不能回收用于重写的命令缓冲区,直到它不再被使用;不能刷新队列的每个帧;VkFences可以提供队列等待,当命令缓冲区准备被回收时;

参考文献:

Vulkan官网

Khronos Group组织

Nvidia开发者官网Vulkan

Android开发者官网Vulkan

iOS开发者官网Metal

先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

本文《Vulkan与OpenGL对比——Vulkan的全新渲染架构》版权归iijik55所有,引用Vulkan与OpenGL对比——Vulkan的全新渲染架构需遵循CC 4.0 BY-SA版权协议。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: