從 WWDC17 看蘋果圖形技術的革新

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 利用率。ide

除上述以外,此次 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 變得無比強大。ui

在這個 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 能夠自動補全被擋住的二維碼。

     源碼下載:http://www.jinhusns.com/Products/Download/?type=yhq

總結

ARKit、CoreML 和 Metal 2 這些新技術的推出,爲移動開發提供了新的可能性,ARKit 使得在應用中集成 AR 特性變得無比簡單。MoreML 則可以讓咱們的應用變得愈來愈智能,而 Meal 2 爲開發者釋放了強大的計算能力,使得不少本來只能在服務器作的事情,在手機端得以實現。歷史證實,每次技術的重大變革都會帶來很大的機遇,但願每個讀者都能從中受益,享受圖形技術以及機器學習技術的盛宴。

相關文章
相關標籤/搜索