【编者按】这是图形技术蓬勃发展的一年,在刚结束不久的 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《程序员》原创文章,未经许可,请勿转载,如需转载,请留言。

从 WWDC17 看苹果图形技术的革新相关推荐

  1. 今日话题:库克FBI撕逼大战结束,怎么看苹果的加密技术?

    库克和FBI的撕逼终于戏剧化的结束了.此前库克以保护用户隐私为由,拒绝帮助FBI解锁恐怖分子的iPhone手机,也曾宣称苹果的"强加密"技术连苹果自己都打不开,结果FBI靠第三方解 ...

  2. GitChat·前端 | 从软件工程角度看大前端技术栈

    GitChat 作者:韩亦乐 前言 我们都知道,大学几乎是没有 Web 前端课的.以我所在的大学为例,唯一引导我们了解 JavaScript 的也只是'人机界面'和'Web应用开发'选修课.再者,由于 ...

  3. 从软件工程角度看大前端技术栈

    从软件工程角度看大前端技术栈 优秀人才不缺工作机会,只缺适合自己的好机会.但是他们往往没有精力从海量机会中找到最适合的那个. 100offer 会对平台上的人才和企业进行严格筛选,让「最好的人才」和「 ...

  4. 转载:: 完全用命令行工作-4: 苹果图形界面脚本化

    以下内容均为转载,原作者为 徐宥, 一个计算机专业的 Ph.D. 学生.原文地址为 http://blog.youxu.info/2008/10/19/macos-and-command-line-s ...

  5. mac怎么合并两个容器_看苹果表演黑魔法:macOS Catalina 文件和硬盘出现两个

    看苹果表演黑魔法 首先恭喜你成功升级到了最新的 macOS Catalina 10.15,普通用户可能在使用中感受不出特别的变化,但开发者在程序开发时会遇到一些奇怪的现象,因为苹果在新系统中使用了黑魔 ...

  6. 直击苹果 ARKit 技术

    苹果在 WWDC2017 中推出了 ARKit,通过这个新框架可以看出苹果未来会在 AR 方向不断发展,本着学习兴趣,对此项新技术进行了学习,并在团队进行了一次分享,利用业余时间把几周前分享的内容整理 ...

  7. 【Agni-s Philosophy】使用的图形技术解说(后篇)Volume渲染和粒子处理

    在2012年11月举办的[SQUARE ENIX 开放会议 2012]的第2天,进行了新世代游戏引擎[Luminous Studio]制作的实时技术演示作品[Agni's Philosophy]中使用 ...

  8. 企业服务总线(ESB)技术与革新

    企业服务总线(ESB)技术与革新 (用异步消息传递和智能路由选择扩展Web服务) 作者:Nigel Thomas和Robrert Dalies 由于更大任务所带来的要求,消息传递技术现在正处于发展之中 ...

  9. 实时3D图形技术的进化历史2

    那么,在上次最后介绍的是可编程着色器架构(Programmable Shader Architecture),最早支持它的DirectX是2000年末发表的DirectX 8. 作为对应DirectX ...

  10. 【西川善司的3D图形技术连载】GPU和Shader技术的基础知识(1~8回)

    本连载的主要目的,是介绍最新的PC和GAME所使用的最新3D图形技术的发展趋势. 暂时的方针是,首先是考虑介绍比较新的PC Game和PS3,XBOX360等新时代游戏机的游戏所采用的技术. 那么首先 ...

最新文章

  1. 机器学习与高维信息检索 - Note 2 - 统计决策和机器学习
  2. linux驱动:TI+DM8127+GPIO(四)之设备
  3. java内部类gc_Java内部类持有外部类的引用详细分析与解决方案
  4. 柱状图添加数字标签_Python之利用Plotnine作图(一)——简单柱状图
  5. Node-RED安装图形化节点dashboard实现订阅mqtt主题并在仪表盘中显示温度
  6. win10删除开机密码_新版WIN10 如何取消开机密码的操作
  7. JMS : Java Message Service (Java消息服务)之一 [转]
  8. 【原理图操作】原理图更新PCB时未改动元器件布局变动问题?
  9. mysql 数据库 文件夹_mysql 数据库 文件夹
  10. xcode 怎么调用midi开发录音_音频应用专业录音声卡:雅马哈UR242声卡教程
  11. mysql的命令行常用命令_MySQL Command Line[mysql命令行常用命令]
  12. Centos7搭建LAMP+Typecho博客
  13. 【Golang】解决Go test执行单个测试文件提示未定义问题
  14. Windows10安装Gooey
  15. axure教程:产品设计流程图
  16. 竹间智能:人机交互未来如何改变人类生活
  17. 监听软键盘中的删除键
  18. html如何画出四个圆圈,css3如何绘制一个圆圆的loading转圈动画
  19. linux 服务器中文乱码问题解决
  20. FPGA系统性学习笔记连载_Day7【16位比较器设计】 【原理及verilog实现、仿真】篇

热门文章

  1. 杂记:Atmel sama5d3 DMA Controller (DMAC)
  2. 笔记一:领导力是什么
  3. 用Node.js写一个爬虫来爬小说
  4. uniapp小程序src引用服务器图片时全局变量与图片路径拼接
  5. 计算机硬件故障与软件故障,电脑的故障分硬件故障与软件故障的两大类
  6. Convolution1D与Convolution2D区别
  7. itunes怎么下载,有什么好的教程
  8. STM32 MDK(Keil5) Contents mismatch错误总结
  9. id门禁卡复制到手机_怎么把手机变成门禁卡 手机NFC复制门禁卡图文教程
  10. Python Flask 微信验证