一个专注音视频领域问答的小圈子

捋一捋 Vulkan 。

Vulkan 是什么 ?

文章开始之前先来讲一讲《王者荣耀》,作为曾经珠海市香洲区第五十号鲁班七号,可是有着辉煌的战绩。

18年9月份的时候,小米出了小米8青春版,采用高通骁龙660处理器,并且支持《王者荣耀》Vulkan 版;同年11月,老东家魅族也出了魅族 X8,采用710处理器,开始支持《王者荣耀》Vulkan 版。

可见这年头,没有个支持 Vulkan 的手机,玩起游戏来都不好意思再闪现交大、越塔强杀了。

那么 Vulkan 到底是何方神圣,让各路手机厂商在发布新品时都会强调它呢?

正如 维基百科 中写道:

Vulkan是一个低开销、跨平台的二维、三维图形与计算的应用程序接口(API)。

与 OpenGL 类似的是,Vulkan 针对全平台即时3D图形程序(如电子游戏和交互媒体)而设计,并提供高性能与更均衡的CPU与GPU占用。

与 OpenGL 区别的是,Vulkan是一个底层API,而且能执行并行任务。除此之外,Vulkan还能更好地分配多个CPU核心的使用。

简单来说,Vulkan 与 OpenGL 功能类似,都是二维、三维图形绘制接口,但是 Vulkan 功耗更低,可以节省电量,同时在 CPU 与 GPU 调度上更均衡,发挥硬件的性能,最后的结果就是打《王者荣耀》时帧数更高、更稳定、耗电更低。

口说无凭,一起来看个测评视频吧 First comparison of Vulkan API vs OpenGL ES API on ARM ~~~

视频地址(科学上网):https://www.youtube.com/watch?v=rvCD9FaTKCA

视频截图一张,作为示例:

在 ARM 平台上作为对比,可以看到,渲染同样的场景,OpenGL ES 的 CPU 使用率达到了 50%,并且是单核在高速运行,类似于一核有难,三核围观;反观 Vulkan 版本的绘制,CPU 的使用率目测不到 20%,而且是四核都参与了运算,这样一来,Vulkan 当然更加省电、功耗低了。

Vulkan 和 OpenGL 的今生前世

难免还是要讲一些历史。

OpenGL 主要是由 Khronos Group (科纳斯组织)在进行维护。它最早的版本发布于 1992 年,那时候还是 OpenGL 1.0 固定渲染管线的年代,现在已经到了 OpenGL 4.6 版本,早已经是可编程渲染管线了。并且为了能够在嵌入式设备上使用 OpenGL ,还有了一个子集叫做 OpenGL ES ,同样的技术还得弄两个名字就很不好了(文章中把两者统称 OpenGL ,暂不做详细区分)。

后来这个组织在 18年3月 由发布了 Vulkan 1.1 正式版本。另外,不管是在嵌入式设备上还是 PC 上,它都只有一个名字了。随着 Vulkan 的逐渐发展,也就意味着 OpenGL 的维护将要停止更新了,后续也是添加一些新的拓展在里面。

与 OpenGL 一样,Vulkan 也是支持跨平台的。但不同的平台愿不愿意让它跨就又是另外一回事了。在 iOS 平台上,苹果公司主推自家的 Metal 图形接口;在 Windows 平台上,微软公司主推 DirectX 图形接口。两家大厂都有自己的脾气,Vulkan 想要做到一统江湖还有很长的一段路要走。

但对于 Android Developer 就不一样了,Android 从 7.0(Nougat) 开始加入了对 Vulkan 的支持,可见谷歌对它还是有信心的。

至于 Vulkan 在实际中到底有哪些用处呢?除了熟知的《王者荣耀》,目前市面上的应用中使用 Vulkan 的确实不多,如果有的话,也是在游戏中。

反观 OpenGL ,近年来很火的音视频应用中都能看到它的身影,比如相机滤镜、贴纸、视频特效、多媒体相关特效等等,这些方面等我稳定一点之后再来分享了。

不知道 Vulkan 的特性能不能用在视频处理方面,并没有很好的思路,如果你有的话,欢迎一起分享。

另外,基于 Vulkan 在渲染方面的特性,很可能在未来 VR 等应用中大发光彩。总之,对于这一门新的技术,笔者还是很看好它的,更多地去了解它的使用和原理。

Vulkan 学习之路

如果说学程序语言,第一行代码是 Hello World;那么对图形学程序,第一行代码就应该是画个三角形。

这将会是一个系列的文章,去分享关于 Vulkan 的开发学习,国内目前关于 Vulkan 的学习博客还是挺少的。

首先是 劝退篇

并不是所有的应用都需要用到 Vulkan ,如果你的瓶颈在于 CPU 开销太大,那么就可以考虑。另外,对于 Windows 、iOS 程序员,还有不懂 OpenGL ,不会 C/C++ 的同学,强撸 Vulkan 的话只能是一脸懵逼。

本文章主要会偏向于在 Android 设备上使用 Vulkan ,同时也会介绍相关的 OpenGL、图形学理论知识点。

然后是关于 学习资源 方面的。

在学习资源上,主要会参考 Vulkan 的 官网 和 Google 给的代码 官方例子

另外,在知乎上搜索 Vulkan 关键字,也能找到大神们关于 Vulkan 的 心得 。这里推荐几位知乎大佬的主页:Vinjn张静SnowFox空明流转陈勇。从这几位大佬的相关文章中,受益匪浅。

还有,在 Youtube 上有一些关于 Vulkan 的系列视频,推荐这个系列视频

对照着中文字幕,多看几遍还是能够理解的。

不像学习 OpenGL 那样,可以搞两本书来看看,这次就只能靠自己的学习理解了,还有一定要善用搜索。

这也印证了一句话:

你与知识,仅隔了一根网线。

有了学习资源之后,还有一项关键的东西,那就是一台支持 Vulkan 的手机。

谈到手机就不得不说一下显卡了,移动平台上的显卡主要是高通的 Adreno 系列和 ARM 的 Mail 系列 ,在 PC 上则是有 NVIDIA、AMD 这些巨头们。在选择手机的时候一定先判断是否支持 Vulkan ,否则调试了半天发现不支持就尴尬了,目前一些千元机也已经开始支持了。

有了学习资源和设备,接下来就是撸起袖子加油干了,充分发挥人的主观能动性,在知识的海洋里遨游~~~

当然,这只是个人的学习经验,仅供参考,有讲的不对之处,欢迎指出,也可以加我微信一起交流学习: ezglumes

系列文章的代码地址:

https://github.com/glumes/vulkan_tutorial

参考

这里有一些不错的参考链接:

  1. https://github.com/vinjn/awesome-vulkan

记录了很多关于 Vulkan 的文档,可以选择性地好好看看。

  1. https://renderdoc.org/vulkan-in-30-minutes.html

30 分钟了解 Vulkan 开发,显然,30 分钟肯定是不够的。

  1. https://www.khronos.org/registry/vulkan/specs/1.1/pdf/vkspec.pdf

Vulkan 1.1 版本的官方文档,对于各种参数调用,没有比它讲的更详细的了。

  1. http://developer.download.nvidia.com/gameworks/events/GDC2016/Vulkan_Essentials_GDC16_tlorach.pdf

一份讲述 Vulkan 渲染流程和组件的文档,里面的图内容很到位,加速理解,等明白了 Vulkan 之后再来看这里面的图就知道它有多么精髓了。

  1. https://github.com/googlesamples/vulkan-basic-samples

安卓开发者的福音,跟着 Google 的例子一步一个脚印的去学习。

知识星球

一个专注音视频领域问答的小圈子

公众号音视频开发进阶对应的知识星球,一个编程开发领域的专业圈子,贩卖知识和技巧!

※ 入群须知:了解该星球能提供的价值和帮助,在提问时务必阐述好背景,附带相关的信息。

iOS 用户可以加我微信 ezglumes 邀请你进星球,有疑问也可以加我微信咨询。

※ 星球内容:

基础教程:

在知识星球连载的干货教程,可以在专栏中找到,随着时间的推移,教程也会越来越多:

- 音视频基础概念
- WebRTC 入门教程及源码实践
- 播放器教程及源码实践
- OpenGL 和特效开发教程
- Vulkan 入门教程

部分内容可以在博客 https://glumes.com 中检索到,后面会在星球里持续更新.

干货分享:

涵盖了移动开发和音视频工程领域的绝大部分,从项目实战角度出发,提升能力,包括但不限于以下领域:

- Android/iOS 移动开发
- Camera 开发
- 短视频编辑 SDK 项目实践
- 在线直播和推流
- WebRTC 开发
- 播放器基础和提高
- OpenGL 图像渲染及特效开发
- C++ 基础和提高
- FFmpeg 使用和分析
- 干货资源和书籍分享

不止于技术方面的,各种 IT 新闻、茶余饭后、生活趣事也欢迎大家分享!!!

技术答疑解惑:

针对上述基础教程和干货分享的答疑,另外还有音视频和 IT 开发中的各种交流讨论。

- 基础知识点答疑
- 工业项目实践答疑
- 问题排查思路分析

一个 BUG 排查很久,不如来星球里提个问题,效率提升百倍。

求职和面试辅导:

一站式职场服务,每份工作都值得用心对待!!!

- 面试题和面试经验分享
- 简历修改和模拟面试
- 大厂内推和信息同步
- 职场经验分享
- 职业规划和发展分析

※ 星主和合伙人介绍

星主是公众号音视频开发进阶的作者,也是网站 https://glumes.com 的作者,曾参与过抖音、剪映等头部音视频 APP 底层 SDK 的开发。

合伙人也是在头条、快手从事音视频架构师的职位,具有多年的音视频开发经验,能力圈覆盖了音视频的绝大多数领域,资深音视频从业人员为你保驾护航。

微信公众号

扫描下面的二维码关注我的微信公众号《音视频开发进阶》,推送更多精彩内容!

添加我的微信 ezglumes 拉你入音视频与图形图像技术群一起交流学习~

wechat-account-qrcode

原创文章,转载请注明来源:    进击的 Vulkan 移动开发(一)之今生前世