Cordova Plugin: Được xây dựng trên nền tảng Javascript API, cho phép sử dụng Wikitude SDK kêt hợp với Apache Cordova Flutter Component: Được xây dựng trên nền tảng Javascript
Trang 1ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
ĐỒ ÁN 1
TÌM HIỂU CÁC FRAMEWORK HỖ TRỢ LÀM GAME
3D TƯƠNG TÁC, THỰC THỂ ẢO AR
Giảng viên hướng dẫn: Ths Nguyễn Thị Thanh Trúc
Sinh viên thực hiện: Lương Lý Công Thắng - 18520357
Hồ Công Thành - 18520359
TP Hồ Chí Minh, tháng 12 năm 2011
Trang 22.3.1 Thiết bị đeo qua đầu (Head-Mounted Display - HMD) 8
Trang 33.1.3.2 Object Tracking: 21
Trang 43.2.3.8 Ground Plane 52
Trang 6Chương 1: Giới thiệu đề tài
1.1 Lý do chọn đề tài
Ngành công nghiệp phát triển game đang phát triển cực kỳ mạnh mẽ trên thêgiới, và xu hướng đó đã bắt đầu ở Việt Nam Đặc biệt, những năm gần đây, thị phần game mobile đang gia tăng mạnh, kèm theo đó là xu hướng làm game AR nổibật là Pokemon Go đang phát triển Nhóm em muốn thông qua môn này có thể tìm hiểu thêm về lĩnh vực đang phát triển này
Trang 7Chương 2: Cơ sở lý thuyết
2.1 Công nghệ Augment Reality
Augmented Reality là một trải nghiệm mà ở đó trải nghiệm ở thê giới thực sẽ được hòa trộn với các vật thể ở thê giới ảo do máy tính tạo ra, người dùng có thểcảm nhận các vật thể ở thê giới ảo thông qua các giác quan như thị giác, xúc giác, vị giác, thính giác, mùi hương, nhiệt độ, … , đồng thời cho phép người dùng tươngtác với các vật thể ảo bằng các thiêt bị hỗ trợ đặc biệt Người dùng sẽ có cảm nhận (nghe, nhìn, ngửi, ) những vật thể ảo do máy tính tạo ra như đang thực sự ở trongthê giới thực, có thể là một chậu cây ở trên bàn hoặc một con khủng long đang chạy trên đường Nói ngắn gọn, Augmented Reality giúp tăng trải nghiệm của người, xóa nhòa ranh giới thực và ảo
2.2 Lịch sử
Tuy các khái niệm AR mới nổi lên gần đây với đại đa số công chúng thông qua các bộ phim khoa học viễn tưởng hoặc các ứng dụng của AR, nhưng các khái niệm và các ứng dụng của AR đã có lịch sử hình thành lâu đời cách đây hơn 50 năm trước
Năm 1901, Lyman Frank Baum, một nhà văn, đã đưa ra một ý tưởng về
một màn hình điện tử mà có thể hiển thị hình ảnh con người lên thê giới thật, ông gọi nó là thiêt bị đánh dấu con người (character marker)
Năm 1968, Ivan Sutherland, một giáo sư về khoa học máy tính, đã tạo ra
một cỗ máy tên gọi là The Sword of Damocles, chiêc máy này cho phép thay đổi
hình ảnh đầu ra dựa vào vị trí và góc quay của đầu người đeo
Năm 1975, Myron Krueger đã tạo nên một video cho phép người dùng tương
tác với các vật thể ảo realtime
Năm 1980, Steve Mann, tạo ra một chiêc máy tính có thể đeo được
Năm 1990, từ Augmented Reality mới được định nghĩa lần đầu tiên bởi
Thomas P Caudell, một nhà nghiên cứu cho hãng Boeing
Từ năm 1990 đên nay, Augmented Reality liên tục được phát triển, nhưng chủ yêu được sử dụng trong mục đích nghiên cứu, huấn luyện quân đội, và du hành vũ trụ.Mãi tới năm 2000, một game mới được ra đời dựa trên công nghệ AR với tên gọi là
Trang 8ARQuake, đánh dấu bước phát triển AR tới với người dùng phổ thông
(https://youtu.be/RiH0IXQQpio) Năm 2001, một công cụ để phát triển các ứng dụng
AR là ARToolkit được công bố dưới dạng mã nguồn mở bởi phòng thí nghiệm HIT của đại học Washington và tiêp tục được phát triển tới ngày nay Năm 2013, Google công bố dự án Google Glass, một chiêc kính AR Năm 2015, Microsoft công bố chiêc kính AR của hãng với tên gọi Hololens Microsoft gọi công nghệ này là Mixed Realitynhưng những tính năng của nó cũng tương tự như AR Từ 2015 đên nay, có hàng trăm ứng dụng có sử dụng công nghệ AR như công nghệ filter ảnh realtime của Instagram, Tiktok, hay các ứng dụng mạng xã hội khác, hoặc Game thì nổi bật nhất là game Pokemon Go, với việc cho phép các pokemon xuất hiện như ngoài đời thật
2.3 Các thiết bị dùng cho AR
2.3.1 Thiết bị đeo qua đầu (Head-Mounted Display - HMD)
Hình 2.1 Hình minh hoạ một thiêt bị đeo qua đầuMột dạng màn hình hiển thị được đeo qua đầu như một dạng nón (ảnh), bên trong chứa một màn hình hiển thị cho mỗi mắt HMD được sử dụng trong nhiều lĩnh vực, bao gồm gaming, y tê, quân đội, hàng không, giáo dục Mặc dù HMD có thể sử dụng cho AR gaming, nhưng theo đa phần thị trường hiện nay chỉ cung cấp loại HMD cho VR
2.3.2 Mắt kính AR
Hình dạng giống như một chiêc mắt kính mà mọi người hay đeo, nhưng được trang bị thêm một camera để theo dõi thê giới thực, một thiêt bị để xử lý hìnhảnh, và một máy chiêu để hiển thị các hình ảnh tăng cường vào mắt người sử dụng thông qua sự phản xạ trên bề mặt kính
Trang 9Hình 2.2 Hình minh hoạ kính AR
2.3.3 Kính áp tròng
Các thành phần và cách thức hoạt động tương tự như một chiêc mắt kính
AR, nhưng được tích hợp vào một chiêc kính áp tròng Công nghệ này được phát triển lần đầu vào năm 1999 bởi Steve Mann, và nó cần phải kêt hợp với một chiêc kính AR khác để hoạt động Một bản Prototype chưa hoàn thiện đã được giới thiệu ở CES 2020 bởi công ty Mojo Vision, thiêt bị này có khả năng hoạt động độc lập mà không cần một chiêc kính AR khác hỗ trợ
Hình 2.3 Kính áp tròng AR
2.3.4 Thiết bị cầm tay
Một thiêt bị hiển thị có kích thước vửa với tay người thiêt bị cầm tay hỗ trợ
AR phổ biên nhất hiện nay là chiêc điện thoại di động, nó sử dụng các cảm biên có sẵn của một chiêc điện thoại để đưa các vật thể ảo vào trong thê giới thực, các cảm biên có thể bao gồm la bàn, GPS, cảm biên gia tốc, cảm biên khoảng cách,
Hiện nay, các thiêt bị điện thoại vẫn còn hạn chê về mặt hiệu năng cũng như hạn chê về sự hỗ trợ đên từ các công ty làm thư viện AR như Google hay Apple nên số
Trang 10lượng các thiêt bị có hỗ trợ AR thuần chưa được phổ biên trên thị trường, hiện có khoảng 80% thiêt bị iOS và 35% thiêt bị Android có hỗ trợ.
2.3.5 Thiết bị chiếu
Một cách để đưa các vật thể ảo vào thê giới thật mà không cần các thiêt bị như HMD, mắt kính, hay điện thoại Thiêt bị chiêu sẽ map một đoạn video hoặc một bức ảnh vào một vật thể ở thê giới thực, điều này có thể hơi ngược với các thiêt bị vừa rồi vì chúng map một vật thể 3d ảo vào mắt chúng ta (một bức ảnh 2D) Điều này cho phép các vật thể ảo này là độc lập với người xem, mọi người đều nhìn thấy vật thể ảo này ở cùng một địa điểm, cùng một kích thước
Hình 2.4 Bức ảnh chụp việc map một đoạn video lên một tòa nhà
2.3.6 Các thiết bị Input
Bao gồm các thiêt bị cung cấp các thông tin cần thiêt về thới giới thực cho máy tính xử lý Các thiêt bị này có thể bao gồm camera, thiêt bị nhận dạng giọng nói, thiêt bị nhận dạng chuyển động cơ thể người, các tay cầm để điều khiển,
2.4 Cách thức hoạt động
Quá trình hoạt động của một hệ thống AR thường được chia là 2 phần chính
Trang 11Gia đoạn đầu tiên: Hệ thống sẽ lấy các bức ảnh từ camera, cũng như các thông tin nhận được từ các cảm biên Sau khi lấy được thông tin ảnh, hệ thống sẽ tiên hành xử lý những bức ảnh đó, có 2 kỹ thuật chính để xử lý ảnh:
1 Marker tracking: ở đây, hệ thống sẽ tìm kiêm những hình ảnh đã được
định trước (marker) trong những bức ảnh đó và đánh dấu chúng và bắt đầu theo dõinhững hình ảnh đó Ví dụ như chúng ta có bức ảnh một bình bông và chúng ta set
up cho hệ thống tìm bức ảnh đó, hệ thống sẽ thông qua camera để tìm kiêm hình ảnh bình bông đó trong các bức ảnh mà camera gửi tới để đánh dấu
Hình 2.5 Một số mẫu Marker
2 Markerless tracking (Instant tracking): Không sử dụng marker, thay vào
đó, hệ thống sẽ sử dụng các cảm biên để track vị trí , hướng nhìn của người dùng, cũng như detect được môi trường thực tại xung quanh người sử dụng (tường, đất, ánh sáng) Markerless có thể sử dụng các công nghệ nhận diện môi trường xung quanh như SLAM (2.5) để nhận biêt môi trường xung quanh
Giai đoạn hai: hệ thống sử dụng các thông tin đã được sử lý ở giai đoạn 1 để đưa các vật thể ảo vào trong ảnh và hiển thị ra màn hình cho người dùng Ví dụ đốivới marker, thì hệ thống sẽ hiển thị một vật thể là bình bông lên phía trên marker, với markerless thì người dùng có thể chọn đặt vật thể lên mặt đất Ở giai đoạn này, các phương pháp toán học có thể áp dụng để map vật thể vào ảnh bao gồm Phép chiêu, phép transformation, giải tích vector, thuật toán Kalman Filter (dùng để lọc nhiễu), Nonlinear Optimization,
Trang 12Hình 2.6 Marker tracking
Trang 13Hình 2.7 Markerless Tracking
2.5 Công nghệ SLAM
Công nghệ SLAM được dùng để tái tạo lại thê giới thực từ các bức ảnh mà camera gửi đên dồng thời liên tục theo dõi vị trí của thiêt bị trong thê giới thực Sử dụng những thông tin này, các nhà phát triển AR có thể tùy chỉnh ứng dụng của mình dựa vào thê giới xung quanh, đồng thời nó giúp hệ thống điều chỉnh các vật thể ảo cho phù hợp với vị trí, góc xoay, hướng nhìn của người sử dụng
Công nghệ này sẽ phân tích các bức ảnh để tìm ra các Feature Point Feature Point là các điểm mà hệ thống cho là cần chú ý, các điểm đa phần được tìm thấy ở các cạnh, các góc, các bức ảnh với đặc điểm nhận dạng cao của môi trường Hệ
Trang 14thống sẽ sử dụng các Feature Point để hiểu môi trường xung quanh, nhận diện được các mặt phẳng, các đồ vật, các bức ảnh,
Hình 2.8 Ví dụ về các Feature Point
2.6 Một số ứng dụng Game AR
2.6.1 Pokemon GO
Hình 2.9 Mô phỏng game Pokemon GO
Pokemon GO ra đời năm 2016, với chức năng cho phép người dùng nhìn cáccon thú pokemon đứng và hoạt động trong thê giới thực Người chơi sẽ vào vai người chuyên đi bắt các pokemon, đi theo các con đường để tìm kiêm pokemon
Trang 15Khi phát hiện pokemon, game sẽ chuyển người chơi sang sử dụng camera, lúc này người chơi sẽ sử dụng camera để tìm kiêm các pokemon đang ở gần mình và quăng bóng bắt chúng.
Pokemon GO nhanh chóng nổi tiêng toàn cầu với lối chơi áp dụng công nghệ AR vào game tương đối mới lạ với nhiều người
2.6.2 Angry Birds AR: Isle of Pigs
Hình 2.10 Mô phỏng game Angry Bird AR
Angry bird AR với lối chơi thừa hưởng từ dòng game tiền nhiệm, nay kêt hợp với công nghệ AR đã làm tăng đáng kể trải nghiệm của người chơi Người chơi khi bắt đầu game sẽ được chương trình hướng dẫn chĩa camera vào các bề mặtphẳng, ngay khi chương trình nhận diện được bề mặt phẳng sẽ xin phép người chơiđược đặt các tower ở đó Sau khi đặt tower, người dùng có thể đưa camera xung quanh khu vực để bắn các chú chim nhằm phá hủy các tower và tiêu diệt các chú heo xanh
Lối chơi của game không mới nhưng việc áp dụng công nghệ AR một cách khéo léo đã giúp game trở nên thú vị và mới lạ hơn
Trang 162.6.3 AR Dragon
Hình 2.11 Hình minh hoạ game AR DragonGame này cho phép chúng ta nuôi và chơi với các chú rồng Người chơi sẽ tìm một mặt phẳng trống rồi triệu hồi ra các chú rồng của mình, sau khi triệu hồi, người chơi sẽ được vuốt ve, cho ăn, huấn luyện và chơi đùa với các chú rồng của mình Game có đồ họa bắt mắt, dễ thương, sống động nhờ vào công nghệ AR manglại cảm giác các chú rồng đang ở cạnh chúng ta
Game thích hợp cho các bạn muốn nuôi thú cưng nhưng không có điều kiện hoặc muốn thử nuôi một chú rồng xem có hợp không trước khi đi mua về nuôi mộtchú rồng thật
Trang 17Chương 3: Các framework hỗ trợ làm game AR 3.1 Wikitude SDK for Unity
3.1.1 Tổng quan
Wikitude là bộ thư viện phát triển các ứng dụng AR cho các thiêt bị di động
Bộ thư viện chú trọng vào giải quyêt các công việc cần nhận dạng và theo dõi hình ảnh (AR phụ thuộc vào dữ liệu ảnh)
Wikitude được tin tưởng và sử dụng bởi nhiều công ty nổi tiêng trên thê giớivề lĩnh vực giải trí, như Marvel, Disney (thông tin được lấy trên trang chủ của Wikitude) Đồng thời, wikitude cũng nhận được nhiều giải thưởng danh giá
● 2017: Best Development Tool 2017, Augmented World Expo
● 2015: Honorable Mentions for Best Tool 2015, Augmented World Expo
● 2012 & 2011:
○ Best Augmented Reality Browser, Augmented Planet
○ Best Augmented Reality Tool, Augmented Planet
● 2010:
○ Best Augmented Reality Browser, Augmented Planet
○ World Summit Award
○ Galileo Master 2010 at European Sate Galileo Master 2010 at
European Satellite Navigation Competition
○ Global Champion at Navteq Challenge 2010
○ Hagenberg Award
○ Grand Prize Winner Navteq Challenge 2010 (EMEA Region)
● 2009:
○ Best Augmented Reality Browser, Augmented Planet
○ GSMA Mobile Innovation 2009 Global Competition EMEA "Top Innovator"
○ Salzburger Wirtschaftspreis
● 2008:
○ Android Developer Challenge Top-50 Award
Trang 183.1.2 Kiến trúc và các nền tảng hỗ trợ
Hình 3.1 Tổng quan kiên trúc của Wikitude
Computer Vision Engine: Là 1 phần trong Core Component, bao gồm 3 thành
phần chính: SLAM Engine, Image Recognition, Object/Scene Recognition Nhiệm vụ chính của phần này là để xử lý hình ảnh, nhận dạng hình ảnh từ camera của thiêtbị Mọi platform của Wikitude đều sử dụng CV Engine này, nhưng chúng không được phép access trực tiêp vào engine mà phải thông qua phần Native API (Java, ObjC) hoặc JavascriptAPI
Native API, cung cấp API để giao tiêp với phần CV Engine, Native API dùng cho
Android (Java), iOS (Objective C) hoặc Window Nó còn cho phép các kêt nối với các Plugin để mở rộng nền tảng hỗ trợ
Javascript API: Cho phép xây dựng ứng dụng AR trên nền tảng HTML và
Javascript Nó cung cấp access tới các chức năng của CV Engine, hệ thống
rendering, Plugin API
Plugin API: cung cấp API để kêt nối plugin tới Wikitude SDK
Trang 19Cordova Plugin: Được xây dựng trên nền tảng Javascript API, cho phép sử dụng
Wikitude SDK kêt hợp với Apache Cordova
Flutter Component: Được xây dựng trên nền tảng Javascript API, cho phép sử
dụng Wikitude SDK kêt hợp với Flutter
Xamarin Component: Được xây dụng trên nền tảng Javascript API, cho phép sử
dụng Wikitude SDK kêt hợp với Xamarin
Unity3D Plugin: Được xây dựng dựa trên Native API, cho phép sử dụng Wikitude
kêt hợp với Unity3D
3.1.3 Các chức năng
Wikitude Plugin cho Unity3D hỗ trợ 4 chức năng chính
● Bên trong chức năng Image Tracking được chia thành 2 loại chính, là Image Tracking và Extended tracking
○ Image Tracking: sự tồn tại của vật thể sẽ gắn liền với các target, nêu
wikitude không còn nhận dạng được target nữa, thì sự tồn tại của vật thể ảo sẽ bị xóa theo
Trang 20Hình 3.2 Chức năng Image Tracking
○ Extended Tracking: sự tồn tại của vật thể lúc này sẽ không còn bị
gắn chặt với target nữa Một khi wikitude nhận dạng được target, nó sẽ tạo một vật thể ảo, nhưng khi wikitude không còn nhận diện được sự tồn tại của target nữa, sự tồn tại của vật thể ảo vẫn được cho phép tiêp tục Điều này yêu cầu nhiều sức mạnh của phần cứng hơn chức năng Image Tracking bình thường nên hình ảnh đầu ra của wikitude có thể không ổn dịnh
Hình 3.3 Chức năng Extended Image Tracking
Trang 213.1.3.2 Object Tracking:
Ngoài nhận dạng ảnh, wikitude còn cho phép nhận dạng một vật thể 3D ở ngoài thê giới thực và thêm các vật thể ảo vào cho nó Wikitude sử dụng nhiều bức ảnh chụp vật thể ở nhiều góc độ khác nhau để có thể xác định được vật thể Chức năng này có thể ứng dụng trong việc tạo ra đồ chơi cho trẻ em, hiển thị thông tin của các vật thể ở các điểm du lịch, các hướng dẫn sử dụng cho các công cụ phức tạp Ứng dụng này yêu cầu object phải có các điểm nhận dạng nổi bật, hoặc không thay đổi nhiều so với nguyên bản ban đầu được chụp
● Scene Recognition được dùng để nhận dạng và track một khu vực hoặc một
vật thể lớn hơn kích thước của một món đồ thông thường nhờ vào công nghệnhận dạng ảnh, ví dụ như một tòa nhà, một căn phòng,
3.1.3.3 Instant Tracking:
Chức năng Instant tracking khác hoàn toàn với 2 chức năng đã nêu trên, nó không nhắm tới việc tìm kiêm các vật thể (ảnh 2D, vật 3D) như đã định trước, thayvào đó, nó theo dõi tất cả môi trường xung quanh Chức năng này gồm 2 giai đoạn thực hiện
● Initializing: Đầu tiên người dùng sẽ chọn gốc tọa độ cho ứng dụng bằng
việc chĩa camera vào vị trí mà người dùng muốn đặt Gốc tọa độ này sẽ xác định vị trí đặt các vật thể ảo trong thê giới thực Ở giai đoạn này, wikitude sẽcần người dùng cung cấp một thông số là độ cao của thiêt bị so với mặt đất, thông số này sẽ dùng để scale vật thể ảo cho phù hợp với không gian thực Một thông số nữa cũng quan trọng là độ nghiêng của mặt đất, điều náy cho phép người dùng có thể tracking tường thay thê cho mặt đất
● Tracking: Sau khi người dùng đã chọn được điểm đặt, wikitude sẽ đặt vật
thể ảo lên vị trí tương đối so với điểm đặt tọa độ gốc, và bắt đầu tracking chuyển động, vị trí, góc nhìn của người sử dụng
3.1.3.4 Plugin
Wikitude cho phép người dùng sử dụng ảnh của camera vào các Plugin khác để thực hiện các công việc nhất định phù hợp với yêu cầu của ứng dụng Ví dụ
Trang 22người dùng có thể gửi ảnh của camera vào một Plugin quét QR code để tạo một đường link tới trang web
Tính năng Professional Edition Expert Edition
Tracker Hỗ trợ một tracker cho
mỗi Unity Scene
Hỗ trợ nhiều Tracker
Image tracker Hỗ trợ nhiều image trên 1
tracker,Hỗ trợ Extended tracking
Hỗ trợ nhiều image trên 1tracker,
Hỗ trợ Cylinder trackingKhông hỗ trợ Extended tracking
Instant tracking Hỗ trợ Instant tracking Không hỗ trợ
Liên kêt với
ARFoundation(ARCore,
ARKit)
Thông qua Smart switch để sử dụng chức năng position tracking của ARFoundation
Liên kêt trực tiêp với ARFoundation thông qua ARBridge, giúp sử dụng được các chức năng của ARFoundation như Instant tracking, Face, Extend tracking,
Các thiêt bị hỗ trợ Máy tính
IOS: 9.0 trở lênAndroid: Tất cả điện thoại android 5.1 trở lên để sử dụng
Không hỗ trợ máy tínhIOS: 12.0 trở lênAndroid: Chỉ những dòngđiện thoại được hỗ trợ bởi ARCore mới sử dụng
Trang 23Do cả 2 bản đều có chức năng tương tự gần giống nhau, nhưng do bản Expert cần tới các chức năng hỗ trợ của ARFoundation nên nhóm em chọn bản Professional đểthấy đầy đủ nhất các tính năng thuần của Wikitude
3.1.4.1 Đăng ký tài khoản của wikitude
Wikitude yêu cầu phải có tài khoản mới có thể sử dụng được các chức năng của Plugin
Đầu tiên, chúng ta vào đường link này và đăng ký một tài khoản Sau khi đã có tài khoản, chúng ta sẽ vào trang tạo SDK key, key này dùng để setup SDK Ở đóchúng ta có thể làm theo hướng dẫn để mua một key hoặc bấm vào nút Generate Key và làm theo hướng dẫn để tạo một key dùng thử có hạn 45 ngày
Hình 3.4 Trang SDK keySau khi đăng ký thành công, chúng ta nhấn vào nút Download key, máy tính sẽ download một file txt có chứa key dùng thử
3.1.4.2 Download và Setup
Đầu tiên, chúng ta cần tải bộ Plugin Wikitude cho Unity, đường link tải ở đây Sau khi tải xong, chúng ta giải nén ra, chúng ta sẽ được thư mục, bên trong thư mục đó có chứa thư mục Package, bên trong chúng ta sẽ thấy file
Wikitude.unitypackage
Trang 24Sau đó mở Project Unity3D mà chúng ta muốn import Wikitude, chọn Assets -> Import Package -> Custom Package,
Hình 3.5 Import wikitudeMột cửa sổ File Explorer sẽ mở ra, chúng ta chọn file
Wikitude.unitypackage trong thư mục vừa giải nén rồi nhấn OK
Trang 25Hình 3.6 Giao diện import thư việnMột cửa sổ sẽ hiện ra như này, nêu chúng ta cần các example của Wikitude thì nên chọn tất cả, còn không thì bỏ chọn Streaming Assets và Samples như ảnh, sau đó nhấn Import
Sau khi import thành công chúng ta cần thực hiện import key dùng thử bằng cách: Chúng ta mở prefab WikitudeCamera trong đường dẫn
Trang 26Assets/Wikitude/Prefabs Trong cửa sổ Inspector, chúng ta nhập key đã được tải ở bước đăng ký tài khoản vào ô Wikitude License Key
Hình 3.7 Giao diện Inspector của Wikitude Camera
3.1.4.3 Image Tracking
Wikitude Camera
Để sử dụng chức năng Image tracking, đầu tiên chúng ta cần kéo thả prefab WikitudeCamera vào scene Prefab này cho phép wikitude mở camera của thiêt bị và sử dụng nó như một ARCamera
Image Tracker
Sau đó chúng ta kéo prefab ImageTracker vào Scene, trong game prefab chúng ta thấy có phần Component Image Tracker
Trang 27Hình 3.8 Component Image Tracker Wikitude
Phần này dùng để track các target
● Tracker Efficiency Mode: Lựa chọn giữa tối ưu hiệu năng hay tiêt kiệm năng lượng
● Target Source: Lựa chọn giữa Resource có sẵn trong máy hoặc
Resource được lưu trữ trên mạng
● Range Extension: Cho phép sử dụng hd camera để nhận biêt các vật thể ở xa
● Concurrent Target: Cho phép track tối đa bao nhiêu target
● Use Custom URL, cho phép sử dụng một đường dẫn tương đối tới nơichứa Target Collection
● Target Collection: Đường dẫn tới nơi chứa target, Target là một file ảnh hoặc một file nén gồm nhiều ảnh Cách tạo sẽ được giới thiệu ở các phần sau
● Phần Event, chứa các Observer cho các event xảy ra trong quá trình chương trình làm việc
○ On Finish Loading: Khi đã load thành công Target Collection
○ On Error Loading: Khi load Target Collection thất bại
○ OnTarget Loaded: Khi đã nhận diện được Target
○ Error Loading Targets: Khi nhận dạng Target bị lỗi
○ On Initialize Error: Khi khởi tạo thất bại
Trang 28○ On Extended Tracking Quality Changed: Khi có sự thay đổi
về chất lượng tracking trong chức năng Extended Tracking Callback này nhận 3 tham số, lần lượt là image target biểu thị cho target được detect, old quality biểu thị cho chất lượng lần callback trước, new quality biểu thị cho chất lượng của lần callback này
Image Trackable
Bên trong ImageTracker, là một game object con có tên là Trackable Chức năng của Trackable là để nhận biêt target nào trong collection sẽ được track, với mỗi target sẽ tạo ra vật thể gì hoặc gửi đi các callback nào Một tracker có thể có nhiều Trackable
Hình 3.9 Component Trackable Wikitude
Trang 29Component Image Trackable sẽ gồm các trường:
● Auto Toggle Visibility: Khi tắt, game object Trackable sẽ không tự động bị disable, điều này cho phép điều khiển sự hiện diện của vật thể ảo độc lập vớisự có mặt của target Chú ý: Drawable vẫn sẽ bị Destroy khi target mất
● Drawable: Một game object 3D sẽ được tạo với vị trí phú hợp khi Tracker nhận thấy được target
● Events: Chứa các callback event
○ On Image Recognized: Khi nhận diện được target
○ On Image Lost: Khi mất đi target
● Targets: xác định phần trackable này sẽ track những target nào trong
collection
Khi nhấn vào nút Preview bên góc phải dưới của từng ảnh trong phần
Targets, chúng ta sẽ được preview kích thước của target so với các game object, cũng như Drawable, từ đó điều chỉnh các game object cho phù hợp với kích thước và vị trí mong muốn
Hình 3.10 Preview Trackable Wikitude
Chúng ta có thể tùy ý kéo thả các prefab vào phần Drawable bên trong gameobject Trackable và preview Hoặc có thể tạo một Trackable mới bên trong Tracker
Trang 30tùy theo nhu cầu sử dụng của chúng ta Wikitude không giới hạn số lượng
Trackable bên trong 1 Tracker
Kêt quả lúc này khi chạy trên điện thoại
Khi target được nhận diện, game object của chúng ta sẽ được tạo ra dưới dạng child game object của một object khác gọi là Drawable (theo như trong ảnh làpageOne_1)
Hình 3.11 Object được khởi tạo
Trang 31, và một khi có ít nhất 1 target được nhận diện, wikitude sẽ thay đổi tọa độ, góc quay của camera để phù hợp với góc nhìn và vị trí của điện thoại Điều này để phân biệt với một số thư viện khác chủ yêu sẽ xoay các vật thể ảo quanh camera.
Hình 3.12 Camera của Wikitude
Custom Trackable
Ví dụ vừa rồi cho thấy cách sử dụng Trackable một cách đơn giản, nhưng khi chúng ta cần nhiều chức năng hơn như vậy, thì chúng ta có thể sử dụng các Events
Trong trường hợp này, chúng ta sẽ để trường Drawable trống, và tạo một script gọi là ImageTrackingController, bên trong class này, chúng ta tạo một function là OnImageRecognized như hình vẽ
Hình 3.13 Hàm OnImageRecognized
Đầu tiên chúng ta cần xem bên trong ImageTarget mà wikitude trả về cho chúng ta gồm những trường nào
Trang 32● Name: Chứa tên của target được nhận diện
● ID: số thứ tự được nhận diện, một target sau khi mất mà được nhận diện lại sẽ được cung cấp một ID khác
● Độ dài thực tê của target được nhận diện, sử dụng trong một số trường hợp khi cần thông tin size của target
● Scale: Mức độ scale của target lúc nhận diện so với trong collection
● ComputeCameraDistanceToTarget: Tính khoảng cách thực tê từ camera tới target
● ComputeDistanceToImageTarget: Tính khoảng cách từ ImageTarget này đênImage Target khác
● Drawable: Game object dùng để bọc prefab của chúng ta, theo như ví dụ phía trên thì nó là game object có tên pageOne_1
Sau khi biêt được các thông tin cần thiêt về ImageTarget, chúng ta sẽ đặt Instant của prefab chúng ta vào làm game object con của Drawable và set
localPosition thành (0,0,0) để nó được vẽ chính xác như đã xác định ban đầu
Sau đó chúng ta kéo thả script này vào Trackable và set callback function như ảnh Lưu ý chọn function trong phần Dynamic thay vì Static để tránh các thông số bị thay đổi bởi Unity
Trang 33Kêt quả, chúng ta có thể tạo ra một vật thể ảo bằng Event của Trackable
Extended Image Tracking
Chức năng Extended Image Tracking có thể được sử dụng bằng cách click chọn Extend trong phần Target
Hình 3.14 Kích hoạt chức năng Extended Tracking
Lưu ý: một Tracker chỉ track được tối đa 1 Extended AR Object, nhưng chúng ta có thể set nhiều Trackable là extended, nhưng trong 1 lúc, chỉ 1 Extened AR Object được tạo và track Đồng thời, khi Tracker đang track 1 Extended AR Object thì không thể track thêm các AR Object khác
Kêt quả
Sau khi nhận diện được target Sau khi mất target, vật thể ảo vẫn còn
Trang 343.1.4.4 Instant tracking
Instant tracking
Tương tự như Image tracking, đầu tiên chúng ta sẽ cần prefab Wikitude camera Sau đó chúng ta cần prefab Instant Tracker bên trong thư mục Prefab của wikitude
Hình 3.15 Component Instant Tracker Wikitude
Component Instant Tracker sẽ bao gồm các thuộc tính sau:
Trang 35● Tracker Efficiency Mode: tương tự như bên Image tracker
● SMART Enabled: Cho phép wikitude sử dụng ARFoundation để nâng cao hiệu suất làm việc
● Plane Orientation: Chọn hướng của bề mặt đất, ở đây có 3 lựa chọn
○ Horizontal: bề mặt ngang như sàn, mặt bàn
○ Vertical: bề mặt đứng như tường
○ Custom: Cho phép thay đổi góc nghiêng của bề mặt ngang như dóc
● Plane Detection: dùng để nhận diện bề mặt (sẽ giới thiệu sau)
● Events: Các sự kiện callback của tracker
Ở đây chúng ta chọn bề mặt ngang là Horizontal cho Plane Orientation
Tương tự như Image tracking, tracker sẽ đi kèm với một trackable object
Hình 3.16 Component Instant Trackable WikitudeComponent sẽ có các thuộc tính
● Auto Toggle Visibility: tương tự như Image trackable
● Drawable: Object sẽ được tracking
● Plane Drawable: dùng cho Plane Detection
● Events: Các event callback của Trackable
Ở phần Trackable này, tương tự như Image tracking, chúng ta kéo thả prefab vào phần Drawable Kê đên chúng ta sẽ viêt 1 script để chuyển qua lại giữa 2 giai đoạn initializing và tracking
Trang 36Hình 3.17 Đoạn script để chuyển giữa hai giai đoạn
● Hàm Start, chúng ta setup độ cao của thiêt bị so với mặt đất, tính theo
meter Lưu ý, chúng ta có thể chỉnh sửa thông số này tùy ý khi tracker vẫn trong giai đoạn Initializing, sau khi chuyển sang Tracking, chúng ta không thể thay đổi giá trị này
● Hàm Enable, chúng ta sẽ yêu cầu tracker chuyển sang giai đoạn tracking,
tương tự là hàm Disable, chúng ta chuyển tracker về lại giai đoạn Initializing
Sau đó chúng ta tạo ra 2 nút Enable và Disable và set mỗi nút tương ứng với mỗi hàm
Kết quả khi chạy trên điện thoại như sau
Ban đầu, trackable sẽ tạo ra 1 game object từ prefab, game object này là con của trackable, và đặt tại tọa độ (0,0,0) Camera lúc này sẽ chỉ xoay theo chiều dọc, zoom xa gần, để tạo cảm giác vật thể ảo của chúng ta đang tự do di chuyển Chúng
ta điều chỉnh điện thoại sao cho có cảm giác vật thể ảo đang nằm trên một bề mặt và nhấn Enable Lúc này tracker sẽ chuyển sang chê độ tracking, Camera sẽ được
Trang 37tự do di chuyển xung quanh tọa độ (0,0,0), làm cho vật thể ảo trông như được cố định tại 1 vị trí.
Giai đoạn Initializing Giai đoạn tracking
Trang 38Hình 3.18 Hàm Update
Do quá trình tính toán này cần thời gian nên nó sẽ được thực hiện ở một thread khác và trả kêt quả về thông qua callback Chúng ta phải subcribe một listener để nhận callback này
Hình 3.19 Awake và OnScreenConversionComputedTrong callback:
● Success: Cho biêt việc tính toán có thành công hay không
● screenCoordinate: Tọa độ trên màn hình mà mình truyển vào
● pointCloudCoordinate: Tọa độ đã được chuyển sang thê giới ảo
Save and Load Instant Target
Wikitude cho phép save và load instant target vào một file để chia sẽ cho nhiều máy khác nhau Instant Target ở đây có nghĩa là khi bạn để điện thoại ở vị trí(x,y) trên gps quay về hướng đông, hướng điện thoại chêch xuống một góc 10 độ và đặt tâm cách 2m Thì khi bạn lưu và load lại thì tâm vẫn sẽ ở vị trí cũ, hướng đông, chêch xuống 10 độ và cách 2m
Cách thức thực hiện bằng cách chúng ta viêt script như sau
Cách save
Trang 39Hình 3.20 Đoạn code để save instant target
Cách load
Hình 3.21 Đoạn code để load instant target
Đây chúng ta chỉ mới load instant target, tức là điểm tâm ảo so với thực tê Nêu chúng ta muốn save và load các object ảo, chúng ta cần một cấu trúc khác để lưu
Trang 40lại object nào nằm ở đâu so với tâm ảo, và load lên như file đã lưu để khôi phục các object ảo lên.
Plane Detection
Một khi mở plane detection lên thì khi tracker trong quá trình tracking, nó sẽliên tục kiểm tra các bề mặt phẳng trong không gian
Hình 3.22 Component dùng cho Plane Detection
● PlaneFilter: Wikitude hiện tại cho phép track 4 loại mặt phẳng như trong
phần Plane Filter, chi tiêt như sau
○ Horizontal Upward: Mặt phẳng hướng lên (nền đất)
○ Horizontal Downward: Mặt phẳng hướng xuống (trần nhà)
○ Vertical: Mặt phẳng dọc (tường)
○ Arbitrary: Bất kỳ mặt phẳng nào (con dóc, mặt cầu thang)
● ConvexHull cho phép wikitude tính toán một convex hull cho bề mặt được
track, giá trị trả về sẽ là danh sách các float, cứ mỗi một cặp như vậy sẽ tạo nên một điểm trong convex hull
Chúng ta có thể chọn bất kỳ loại nào trong đây để track, khuyên khích chỉ chọn những loại cần thiêt vì sử dụng nhiều rất tốn chi phí tính toán
Để thể hiện các bề mặt đã được track thành công, chúng ta có 2 cách
● Sử dụng Plane Drawable và để trackable tự vẽ object