技术成就梦想

代码如诗

从 WWDC17 看苹果图形技术的革新

2017年8月29日 架构 移动开发 0

【编者按】这是图形技术蓬勃发展的一年,在刚结束不久的 WWDC17 上,苹果在图形技术方面推出了革命性的几项技术 —— ARKit 和 Core ML 为应用和游戏开发带来了新的可能;新的图片存储格式 HEIF 和 HEVC 视频编码的引入,则极大地提升了图片和视频的观感体验;而 Metal 2 的引入使得很多原本只能在服务器上完成的任务也可以在移动端实现。在此,本文将介绍 WWDC 上一些图形相关的关键 Sessions,希望能够对正在从事图像、视频和游戏类应用开发的读者有所裨益。

Introducing Metal 2

Metal 2 是 GPU 编程的重大更新,它可以直接访问图形处理器(GPU),为应用和游戏提供了强大的图形渲染和计算能力。Metal 2 的突破性功能使 GPU 能够控制渲染管道的运行,Metal 可以通过 GPU 实时指定基本任务,极大地提升了图像渲染的效率。因此,Metal 2 在此次 WWDC 上扮演着至关重要的角色,可谓是 VR、AR 以及机器学习的基石。
在这个 Session 中,苹果 GPU 软件工程师 Michal Valient 和 Richard Schreyer,介绍了 Metal 技术的关键在于 GPU 编程方面,使得资源需求大的操作或指令只执行一次,从而极大地提升了 GPU 的利用率,下面就详细介绍它是如何做到的。

为了进一步提升 GPU 程序执行效率,Metal 2 引入了 Argment Buffers、Raster Oder Groups、Promotion Displays 以及 Direct to Display 等新技术。这些新技术一起,提升了 Metal 2 程序的性能,使得 GPU 编程更加简单,并扩展了 GPU 的应用场景。

其中,为了减少开销,免去每次 Draw Command 之前都要做的 texture 或 buffer 的 binding,苹果引入了 Argment Buffers 来把所有需要用到的资源(texture、buffer、sampler 或常量) 统一放到 Argment Buffer 上,如果资源来自于 heap,为了进一步节省 CPU 时间,驱动程序甚至可以不做 Resouce Tracking。

Raster Order Groups 允许显式指定 Raster Order,它使得 Fragment Shaders 可以访问 Ordered memory,能够用来实现 Order-independent transparency、Dual-layer GBuffers、Voxelization、custom blending 之类的功能。

Promotion display 功能能够帮助实现每秒 120 帧的渲染,并且支持 Arbitrary presentation time,来消除每帧之间渲染的抖动,比如可以均匀的渲染出 50FPS。

Direct to Display 对于全屏幕来说,可以省去 compositor 的过程,直接渲染到屏幕上,以获得更高的 CPU 利用率。

除上述之外,这次 Session 上还介绍了 Metal 2 的其他一些特性,比如内存管理方面的 Memory Usage Queries、Buffer 间数据共享的 SIMDGroup-scoped Data Sharing、有助于线程管理的 Non-uniform Thread group Sizes 以及渲染相关的 Viewport Arrays 等。而由于这些针对 GPU 编程的新技术的使用,使得 Metal 2 的渲染计算速度,相比于 OpenGL 有 10 的提升。

在这次大会上,GPU 编程技术 Metal 被推到了一个至关重要的位置上,几乎所有的图形技术,以及机器学习技术都依赖于 Metal 的强大性能优势。另外,从苹果工程师处得到确认,苹果已经不再在 OpenGL 相关技术上进行新的研发,这进一步突显了 Metal 的重要性。

Vision Framework: Building on Core ML

借助于机器学习在计算机视觉方面的技术突破,新的 Version Framework 提供了更加精准的面部检测、脸部关键部位计算、物体追踪、文字识别、矩形框识别以及二维码识别等功能,为基于摄像头的应用打下了坚实的基础。更重要的是,开发者还可以在 Vision 模型中包装任何图像分析 Core ML 模型,这就使得 Vision Framework 变得无比强大。

在这个 Session 上,苹果工程师 Brett Keating 和 Frank Deopke 介绍了 Version Framework 能完成的一些挑战性的任务。以脸部识别为例,Version 既能在合影中,识别出非常小的面部,也可以识别出在高速行驶列车上人的侧脸,或戴着帽子和眼睛的脸部,甚至能识别出吃泡泡糖孩子的脸部,尽管泡泡糖已经挡住了三分之二的面庞。




图 1 多人合影中的脸部关键部位识别

脸部关键部位的识别功能,在多人合影的情况下,也有出色的表现。如图 1 所示,当照片或视频中有多个人脸的情况下,脸部关键部分识别能准确识别出图像中每个面孔的脸部特征。

而图像拼接功能,则可以将多张同一地点拍的的照片,合成为一张全景图。在此之中,Version Framework 能够识别并去除图片间冗余的部分,最终合成一个完美的全景照片。

此外,Version Framework 对矩形的识别、二维码的识别、文字的检测,以及物体追踪等的表现也非常优异。
除了以上的功能,Version Framework 还提供了 imaging pipeline 以支持 Core ML 的模型,这样开发者就可以用机器学习的技术来训练自己的模型,从而开发出更加强大的计算机视觉方面的应用。

Introducing ARKit: Augmented Reality for iOS

要说这次大会对开发者来说,最大的惊喜是哪项技术,那就非 ARKit 莫属了,iOS 11 推出的 ARKit 使得 iPhone 成为了最大的 AR 平台,有强大的 API 支持,也大幅降低了开发 AR 相关应用和游戏的技术难度。

ARKit 为 iPhone 和 iPad 开发增强现实(AR)应用程序提供了一个前沿平台。在这个 Session 上,Mike Buerli 和 Stefan Misslinger 介绍了 ARKit 框架,以及如何利用其强大的位置跟踪和场景理解功能。如何与 SceneKit 和 SpriteKit 无缝集成来制作 AR 游戏,并介绍了如何直接控制使用 Metal 2 进行渲染。

ARKit 的核心技术点在于对虚拟世界的定位,包括位置和方向、物理距离、相对于起始位置的定位等。

其次,还包含对场景的理解、屏幕的检测、光线以及虚拟物体的检测。目前,3D 游戏引擎 Unity 以及 Unreal 已经提供了对 ARKit 的支持。

对一个 AR 应用来说,除了要用 ARKit 来进行增强现实技术的计算,还需要用到 SceneKit、SpriteKit、Metal 等渲染技术,以最终将虚拟对象渲染到屏幕上,如图 2 所示。




图 2 AR 应用架构

而 ARKit 本身是基于视频框架 AVFoundation 和核心移动框架 CoreMotion 来实现的,如图 3 所示。其中,AVFoundation 提供当前摄像头的实时图像,CoreMotion 则负责手机摄像头移动的相对位置。




图 3 ARKit 架构

具体的处理过程如图 4 所示,通过 ARSessionConfiguration 去初始化一个 Session,ARSession 结合 AVCaptureSesson 以及 CMMotionManager 进行运算,最后生成当前针 ARFrame 去渲染。其中,ARSessionConfiguration 负责配置管理,AVCaptureSession 负责图像信息捕获,CMMotionManager 负责提供摄像头的相对移动位置。这些信息作为输入给 ARSession, 在计算并绘制好需要实现的图像后,输出 ARFrame 给其他渲染模块,从而将 AR 图像显示到屏幕上。




图 4 ARKit 内部 API 框架

总的来说,AR 技术是对 3D 图形处理、运动检测以及渲染进行综合的技术,苹果提供了易用的 API 使得开发过程变得更加简单。

Introducing HEIF and HEVC

随着摄像头技术的提升,高清的图片和视频在手机中所占用的空间越来越大,苹果推出了新的图片以及视频编码格式,极大地提升了视频以及图片的显示质量。

高效图像文件格式(HEIF)和高效率视频编码(HEVC)是用于存储和传送图像和视听媒体的强大的新技术。在这个 Session 中,Gavin Thomson 和 Athar Shan 介绍了这些下一代节省空间的编解码器及其相关的容器格式,如何在 Apple 平台上与他们合作,以及如何在自己的应用程序中利用它们。

相比于 H.264,HEVC(High Efficiency Video Coding)可以节省 50%的存储空间以及传输带宽。同样,HEIF 相比较 JEPG,也可以节省 50%的存储空间。在 iOS 11 中,苹果平台提供了创建、访问以及传输的支持,来解决与其他平台的兼容性问题。

Advances in Core Image: Filters, Metal, Vision, and More

Core Image 基于 Metal,为图片、视频的处理提供了简单而强大的接口。在这个 Session 上,David Hayward 介绍了有关如何使用 Core Image 的最新功能的所有细节、有效渲染图像的新方法、如何在 Metal Shader 中创建自定义 CIKernels,并介绍了所有新的 CIFILTER,其中包括对图像处理应用于深度数据和处理条形码的支持。
新的 Core Image 主要对开发友好型上做了提升,体现在以下三个方面:

  • 性能,可以用 Metal 来写 CIKernels,以及提供新的 CIRenderDestination API;
  • 调试信息,提供 CIRenderInfo API,并且 Xcode 提供了 Quick Looks;
  • 新的功能,新的滤镜以及对二维码、条形码和图像 depth 的支持。

在这个 Session 中,最让人惊讶的一个应用场景是在二维码的识别中,当手指挡住了二维码的一部分,应用 Machine Learning 技术,Core Image 可以自动补全被挡住的二维码。

总结

ARKit、CoreML 和 Metal 2 这些新技术的推出,为移动开发提供了新的可能性,ARKit 使得在应用中集成 AR 特性变得无比简单。MoreML 则能够让我们的应用变得越来越智能,而 Meal 2 为开发者释放了强大的计算能力,使得很多原本只能在服务器做的事情,在手机端得以实现。历史证明,每次技术的重大变革都会带来很大的机遇,希望每一个读者都能从中受益,享受图形技术以及机器学习技术的盛宴。

  • 作者:杜雷明,短视频社交平台 Swaying iOS 技术负责人,前爱立信转发平台技术 Leader。专注于移动开发、图形处理、高并发互联网软件后台技术研究,Erlang 语言爱好者。
  • 责编:唐门教主(tangxy@csdn.net)
  • 声明:本文为 CSDN《程序员》原创文章,未经许可,请勿转载,如需转载,请留言。