ARKit: Overview

Introduction

Tại sự kiện WWDC tháng 06/2017, Apple đã giới thiệu hàng loạt các sản phẩm iPad, iMac, Macbook thế hệ mới đi kèm với macOS High Sierra và iOS 11. Trong đó, Apple cũng cung cấp thêm 2 bộ kit mới cho các developer: ARKitCoreML. CoreML giúp developer có thể sử dụng machine learning vào trong các app, giúp chúng trở lên "more intelligent". Còn ARKit cho phép bạn tích hợp và sử dụng camera các thiết bị iOS và các cảm biến biến chuyển động để tạo ra trải nghiệm tăng cường thực tế trong các game và ứng dụng. AR - viết tắt của Augmented Reality (tăng cường thực tế, khác với VR - Vitual Reality - thực tế ảo) bản chất là thêm các yếu tố hình ảnh 2D hoặc 3D vào live view của camera thiết bị, làm cho các yếu tố đó xuất hiện trong thế giới thực và là một phần trong đó. ARKit kết hợp việc theo dõi chuyển động của thiết bị, kết hợp với chụp ảnh camera, xử lý hình ảnh thu được và công nghệ hiển thị nhằm đơn giản hoá việc xây dựng một trải nghiệm AR.

Supported devices

ARKit yêu cầu thiết bị iOS sử dụng CPU Apple A9 hoặc hơn. Nghĩa là chỉ có iPhone 6S, SE, iPad 2017, iPad Pro... trở lên chạy iOS 11 mới chơi được với ARKit. Để khiến cho app của bạn "only available" trên các thiết bị hỗ trợ ARKit kể trên, hãy thêm vào file Info.plist key UIRequiredDeviceCapabilities với value arkit. Còn nếu tăng cường thực tế chỉ là chức năng phụ trong app của bạn. Bạn muốn app vẫn chạy được trên các thiết bị không support ARKit thì có thể sử dụng type property isSupported để kiểm tra.

    guard ARWorldTrackingConfiguration.isSupported else {
        // Current iOS device doesn't support ARKit, then return it
        return
    }
    // Continue using ARKit

Concepts, features and best pactices

Overview

Đặc điểm cơ bản của AR là khả năng tạo ra và tracking chuyển động, phản hồi giữa không gian ảo với các object ảo được đặt lên màn hình live view điện thoại khi người di chuyển thiết bị trong thế giới thực. Khi đó, hình ảnh object ảo được hiển thị trên màn hình điện thoại trên nền hình ảnh của thế giới thực thu được từ camera chân thực, sống động như thật. Người dùng sẽ có cảm giác thật như chính vật đó đang tồn tại giữa đời thực. Vì vậy, nó được gọi là tăng cường thực tế. ARKit sử dụng hệ trục toạ độ không gian 3 chiều Oxyz theo quy tắc bản tay phải: trục Oy (+) hướng lên trên theo ngón giữa, trục Ox (+) hướng sang phải theo ngón trỏ và trục Oz (+) vuông góc với lòng bàn tay, hướng về mặt người nhìn. Một AR session có nhiều anchor. Mỗi anchor cũng có hệ trục toạ độ riêng, tuân theo quy tắc bàn tay phải. Mỗi khi sử dụng ARKit, ta cần tạo ra một session để quản lý việc tracking, xử lý, hiển thị... Chúng ta cũng có thể cấu hình cho session, thay đổi toạ độ gốc và hướng của hệ toạ độ phản ảnh thế giới thực qua property worldAlignment với enum có 3 giá trị: gravity, gravityAndHeadingcamera.

  • case gravity = 0: Hệ trục toạ độ mà trục y song song với chiều trọng lực, gốc toạ độ trùng với vị trí ban đầu của thiết bị. Trục Oy trùng với chiều của trọng lực mà cảm biến chuyển động của thiết bị detect được. Vector (0, -1, 0) chỉ xuống dưới. Vị trí và phương của thiết bị khi session configuration lần đầu chạy xác định phần còn lại của hệ trục toạ độ. Với trục Oz, ARKit chọn vector đơn vị (0, 0, -1) chỉ hướng của bề mặt camera và vuông góc với phương trọng lực. Trục Ox được chọn dựa trên 2 trục còn lại sử dụng quy tắc bàn tay phải.
  • case gravityAndHeading = 1: Hệ trục toạ độ mà trục y song song với chiều trọng lực, trục Ox và Oz được xác định theo hướng la bàn, gốc toạ độ trùng với vị trí ban đầu của thiết bị. Tương tự case gravity, trục Oy trùng với chiều của trọng lực mà cảm biến chuyển động của thiết bị detect được. Vector (0, -1, 0) chỉ xuống dưới. Trục Ox và Oz trùng với chiều của kinh độ và vĩ độ đo được bởi Location Services. Cụ thể vector đơn vị (0, 0, -1) chỉ hướng chính bắc và vector (-1, 0, 0) chỉ hướng chính đông.
  • case camera = 2: ARKit không theo dõi chuyển động của thiết bị. Vị trí của các object ảo sẽ chỉ phụ thuộc vào vị trí và hướng hiện tại của thiết bị.

How World Tracking Works

Để tạo ra sự hài hoà, tương xứng giữa không gian thực và không gian ảo, ARKit sử dụng một kỹ thuật được gọi là "visual-inertial odometry". Kỹ thuật này kết hợp thông tin dữ liệu thu được từ các cảm biến chuyển động thiết bị iOS với khả năng phân tích, xử lý hình ảnh cảnh quan từ camera. ARKit nhận biết các điểm đặc biệt trong các bức ảnh không gian thực, đồng thời theo dõi sự thay đổi về vị trí của các điểm này qua các frame theo thời gian, sau đó so sánh với thông tin dữ liệu cảm biến chuyển động. Kết quả là một mô hình có độ chính xác cao của vị trí và chuyển động của thiết bị với cảnh quan thực xung quanh. World tracking cũng phân tích và tìm hiệu nội dung của cảnh đó. Sử dụng các method hit-testing để tìm kiếm những bề mặt trong không gian thực tương ứng với một điểm trên ảnh từ camera. Nếu bạn enable property planeDetection trong session configuration, ARKit sẽ tự động phát hiện những mặt phẳng trong hình ảnh camera thu được cùng với vị trí và kích thước của chúng. Sau đó, bạn có thể đặt các đối tượng ảo vào các mặt phẳng tìm được trong thế giới thực và có thể tương tác với chúng, như xoay, di chuyển các đối tượng này.

Best Practices and Limitations

World tracking không hoàn toàn chính xác và chỉ mang tính tương đối. Quá trình này thường có thể mang lại độ chính xác ấn tượng, cho trải nghiệm AR rất thật. Tuy nhiên, nó dựa vào các chi tiết của môi trường vật lý thiết bị thu được mà không phải lúc nào cũng đồng nhất hoặc rất khó để đo đạc chính xác 100% mà không có một tỷ lệ sai sót nhất định. Vì vậy, ta cần chú ý những điều sau để có thể mang lại trải nghiệm AR chất lượng cao nhất cho người dùng.

  • Không gian, môi trường phải đủ ánh sáng, rõ ràng. World tracking liên quan đến phân tích hình ảnh, một bức ảnh rõ ràng sẽ tăng chất lượng xử lý. Khi môi trường quá tối, camera không thu được hình ảnh chi tiết, sẽ rất khó xác định, phân tích, AR khó có thể hoạt động hiệu quả, sai số rất lớn.
  • Sử dụng thông tin về tracking quality để phản hồi lại người dùng. World tracking phụ thuộc vào việc phân tích hình ảnh với chuyển động của thiết bị. ARKit định nghĩa một khái niệm tracking quality để phát hiện nếu như thiết bị chuyển động, cho dù chuyển động nhỏ nhất. Các chuyển động quá nhanh, quá mạnh, khoảng cách xa sẽ cho kết quả một bức ảnh thu được bị mờ, nhoè hoặc quá xa để có thể theo dõi, so sánh giữa các frame sẽ làm giảm tracking quality. Class ARCamera cung cấp các thông tin trạng thái của việc tracking. Nhờ vậy bạn có thể thông tin từ class này để hiển thị thông báo hướng dẫn cho người dùng khi bị low-quality tracking do di chuyển camera quá nhanh... Một số case position tracking quality của class ARCamera:
    • case notAvailable: Trạng thái tracking vị trí camera không available.
    • case limited(ARCamera.TrackingState.Reason): Trạng thái tracking available, nhưng chất lượng kết quả chưa biết.
    • case normal: Trạng thái tracking vị trí camera available, cho kết quả tối ưu.
  • Cho phép cập nhật mặt phẳng phát hiện được theo thời gian. Việc phát hiện mặt phẳng trong không gian thực thay đổi theo thời gian, khi một mặt phẳng được tìm thấy lần đầu tiên thì vị trí và kích thước có thể không chính xác ngay. Khi nào mặt phẳng đó còn trong scene hiện tại thì ARKit sẽ tự động update lại vị trí và kích thước của nó cho đến khi nào người dùng thoả mãn với kết quả, sẵn sàng đặt object vào.

Source: https://developer.apple.com/documentation/arkit