Πριν λίγες μέρες δημοσίευσα αυτό το βίντεο στα κανάλια μου στα μέσα κοινωνικής δικτύωσης όπου Έριξα μερικά μπισκότα από ένα κουτί μπισκότων του πραγματικού κόσμου στην κουζίνα μου VR για να πάρω πρωινό:
Το βίντεο κέντρισε κάποιο ενδιαφέρον από την κοινότητα και κάποιοι με ρώτησαν πώς το έκανα. Επειδή είμαι πάντα ευνοϊκός για την ανταλλαγή γνώσεων, επιτρέψτε μου να σας πω τα μυστικά πίσω από αυτήν την εφαρμογή, έτσι ώστε μπορείτε επίσης να κάνετε την εφαρμογή επαυξημένης εικονικότητας για το Quest σας!
Πριν ξεκινήσουμε, επιτρέψτε μου να σας πω μόνο μερικές επιφυλάξεις σχετικά με αυτό το άρθρο:
- Αυτό που έκανα ήταν ένα πρωτότυπο, επομένως οι λύσεις που βρήκα δεν είναι βελτιστοποιημένες. Ήθελα απλώς να πειραματιστώ με την τεχνολογία, όχι να φτιάξω ένα προϊόν
- Δεν πρόκειται να κάνω ένα σεμινάριο βήμα προς βήμα, αλλά αν είστε λίγο έμπειροι με το Unity, μπορείτε να χρησιμοποιήσετε τις πληροφορίες που σας παρέχω για να δημιουργήσετε κάτι παρόμοιο μόνοι σας.
Η επαυξημένη εικονικότητα και οι συνδέσεις μεταξύ του πραγματικού και του εικονικού κόσμου
Ένα πράγμα που με γοητεύει περισσότερο στη μικτή πραγματικότητα είναι δημιουργώντας μια σύνδεση μεταξύ του πραγματικού και του εικονικού κόσμου. Βλέπω πολλά demo για το Vision Pro ή το Quest σε μικτή πραγματικότητα, όπου το passthrough είναι απλώς ένα υπόβαθρο για ένα εικονικό παιχνίδι, αλλά νομίζω ότι αυτός δεν είναι ο καλύτερος τρόπος για να εκμεταλλευτεί κανείς αυτήν την τεχνολογία. Ο καλύτερος τρόπος για να χρησιμοποιήσετε την μαγνητική τομογραφία είναι όταν υπάρχει μια πλήρης ανάμειξη μεταξύ των πραγματικών και των εικονικών στοιχείων. Και με γοητεύει ιδιαίτερα το πώς μπορούμε να δημιουργήσουμε μια σύνδεση μεταξύ αυτών των κόσμων, και πώς το ένα μπορεί να επηρεάσει το άλλο.
Γι’ αυτό αποφάσισα να κάνω μερικά πειράματα για το θέμα, με την εμπειρία του πρωινού να είναι ένα από αυτά. Το κύριο σημείο αυτού του demo είναι αυτό το πραγματικό κουτί μπισκότων υπάρχει τόσο στον πραγματικό όσο και στον εικονικό κόσμοκαι ακόμα κι αν είναι πραγματικό στοιχείο, έχει αντιπροσωπεία στον εικονικό κόσμο (το ρίχνει μπισκότα).
Η εμπειρία χρησιμοποιεί μια τεχνολογία που ονομάζεται Augmented Virtuality και έχω εμπνευστεί από τον φίλο μου Κρις Κούμεν στη χρήση του. Μου αρέσει να ταξινομώ τις πραγματικότητες χρησιμοποιώντας τη συνέχεια του Milgram και η επαυξημένη εικονικότητα σημαίνει ουσιαστικά ότι βρίσκεστε σε έναν εικονικό κόσμο, αλλά υπάρχουν μερικά πραγματικά στοιχεία σε αυτόν. Η κουζίνα είναι το εικονικό σκηνικό και το κουτί είναι το πραγματικό στοιχείο που ζει σε αυτό.
Πώς να δημιουργήσετε μια εμπειρία επαυξημένης εικονικότητας για το Quest in Unity
Η δημιουργία αυτής της εμπειρίας ήταν ευκολότερη από όσο νόμιζα, χάρη στις ευκολίες που προσφέρει το Meta SDK.
Αρχικοποίηση
Ξεκίνησα το Unity (χρησιμοποιώ την έκδοση 2022.3 LTS, σε περίπτωση που αναρωτιέστε) και δημιούργησα ένα νέο έργο URP. Μετά εισήγαγα το νέο Meta All-in-One SDK για να προσθέσετε όλα τα πακέτα Meta στο έργο.
Σε εκείνο το σημείο, χρησιμοποίησα τα νέα δροσερά εργαλεία που πρόσφερε η Meta για να εγκαταστήσω το passthrough στο έργο μου. Υπάρχει τώρα μια καταπληκτική δυνατότητα στο Meta SDK που σας επιτρέπει να προσθέσετε συγκεκριμένες λειτουργίες της εφαρμογής σας ως “δομικά στοιχεία”με τον Μέτα φροντίζοντας για τη ρύθμιση και τις εξαρτήσεις τους. Αφαίρεσα την Κύρια κάμερα από τη σκηνή, μετά επέλεξα τη φωνή του μενού Oculus-> Tools -> Building Blocks και πρόσθεσα την κάμερα και το passthrough στο έργο μου. Κάνοντάς το μόνο αυτό, εγώ έχει ήδη ρυθμίσει ολόκληρο το έργο να είναι μια εφαρμογή μικτής πραγματικότητας, με μόλις δύο κλικ. Αρκετά εντυπωσιακό, αν δείτε όλα τα βήματα που έπρεπε να κάνω στο δικό μου μάθημα για το πώς να ρυθμίσετε μια εφαρμογή διέλευσης στο Quest.
Αφού ρυθμίστηκε η εφαρμογή για διέλευση, ήρθε η ώρα να προσθέσετε τα εικονικά στοιχεία. Δεδομένου ότι ήθελα να κάνω πρωτότυπο, δεν ήθελα να αφιερώσω χρόνο στη δημιουργία περιουσιακών στοιχείων, οπότε Μόλις κατέβασα μερικά πολύ ωραία δωρεάν πακέτα από το asset store. Για την κουζίνα, σήκωσα αυτόκαι για τα μπισκότα αυτό το άλλο. Έβαλα τα πάντα στη σκηνή… τώρα είχα όλα όσα χρειαζόμουν, έπρεπε απλώς να βρω έναν τρόπο να κάνω την Επαυξημένη Εικονικότητα.
Πώς να δημιουργήσετε «τρύπες» στον εικονικό σας κόσμο
Ξεκινώντας τη σκηνή σε αυτό το σημείο, μπορούσα να δω την κουζίνα γύρω μου, χωρίς ορατή διέλευση. Μια μικρή καθυστέρηση στην ενημέρωση της εικόνας μου αποκάλυψε αυτό η δίοδος αποδόθηκε σωστά πίσω από την κουζίνα, έτσι ήταν εκεί, αλλά δεν μπορούσα να το δω γιατί ήταν σαν το skybox του κόσμου μου. Δεδομένου ότι βρισκόμουν σε μια κλειστή κουζίνα VR, δεν μπορούσα να δω κανένα υπόβαθρο πίσω από αυτό. Αυτό που χρειαζόμουν ήταν ένας τρόπος για να δημιουργήσετε μια «τρύπα» στην οπτικοποίηση της κουζίνας για να δείτε το φόντο «skybox». Αλλά πώς να το κάνουμε;
Κατευθυνόμενος προς το Τεκμηρίωση API διέλευσης, μπορείτε να ανακαλύψετε ότι υπάρχουν πολλά εργαλεία για να χειριστείτε το passthrough. Αυτό που επέλεξα ήταν να δουλέψω σε επίπεδο shader για να δημιουργήσω μια τρύπα στον κόσμο της εικονικής πραγματικότητας για να δω το πέρασμα πίσω από αυτό. Δημιούργησα έναν κύβο στη σκηνή και τον εφάρμοσα ένα υλικό που βασίζεται στο shader “PunchThroughPassthrough” που βρίσκεται στο πακέτο Meta XR Core SDK. Εάν χρησιμοποιείτε αυτό το εργαλείο, ολόκληρο το πλέγμα που χρησιμοποιεί αυτόν τον σκίαστρο γίνεται μια τρύπα στον εικονικό σας κόσμο για να αποκαλύψει το πέρασμα.
Μια δοκιμή στο πρόγραμμα επεξεργασίας με τον προσομοιωτή έδειξε ότι λειτουργούσε, οπότε βρήκα έναν τρόπο να δω μερικά πραγματικά πράγματα μέσα σε έναν εικονικό κόσμο, που ήταν ο σκοπός μου να κάνω επαυξημένη εικονικότητα! Αλλά πώς θα μπορούσα να δείξω κάτι σημαντικό;
Πώς να εμφανίσετε ένα συγκεκριμένο αντικείμενο στην Επαυξημένη Εικονικότητα;
Δεν ήθελα απλώς να δείξω μια τυχαία τρύπα, Ήθελα να δω το πραγματικό μου κουτί με μπισκότα στον εικονικό κόσμο, οπότε η τρύπα θα έπρεπε να δείχνει ακριβώς αυτό το κουτί, ακόμα κι αν το μετακινούσα. Αλλά πώς να το κάνουμε αυτό;
Λοιπόν, η δημιουργία μιας τρύπας όπως η συσκευασία μπισκότων είναι μάλλον εύκολη: Μόλις πήρα τον κύβο του βήματος πριν και τον έφτιαξα στις ίδιες διαστάσεις με το πραγματικό κουτί: Το Unity λειτουργεί με μέτρα, οπότε ήταν πολύ εύκολο να δημιουργήσω μια χαρτογράφηση των δύο μεγεθών.
Ο εντοπισμός και η παρακολούθηση της συσκευασίας μπισκότων ήταν λίγο πιο περίπλοκη. Η ιδανική λύση θα ήταν να είχε αυτό το είδος Τρισδιάστατη παρακολούθηση αντικειμένων που διαθέτουν τα SDK AR όπως το Vuforia ή το ARKit. Το πρόβλημα είναι ότι η Meta δεν το προσφέρει ακόμα. Και αφού εμείς οι προγραμματιστές δεν έχουν πρόσβαση στα πλαίσια της κάμερας, δεν μπορούσα καν να σκεφτώ να δοκιμάσω κάποιο εξωτερικό SDK για να προσπαθήσω να εφαρμόσω κάτι παρόμοιο. Έπρεπε λοιπόν να καταφύγω στις μοναδικές επιλογές παρακολούθησης που προσφέρει η Meta: παρακολούθηση χεριών και παρακολούθηση ελεγκτή. Επειδή ήθελα να κάνω ένα γρήγορο τεστ, Πήγα για το πιο γρήγορο και αξιόπιστο: κόλλησα το δεξί μου χειριστήριο πάνω από το κουτίώστε να μπορεί να παρακολουθεί τη θέση του κουτιού στον εικονικό κόσμο.
Τώρα έπρεπε απλώς βάλτε τον 3D κύβο που δημιούργησα παραπάνω ως παιδί του ελεγκτή στη σκηνή Unity να παρακολουθείται το κουτί μου σε πραγματικό και εικονικό κόσμο. Ο κύβος πρέπει να τοποθετηθεί σε μια τοπική θέση και περιστροφή που αντιπροσωπεύει τη θέση του φυσικού κουτιού σε σχέση με τον φυσικό ελεγκτή.
Για να το κάνω αυτό, χρησιμοποίησα δύο κόλπα για να διευκολύνω τη δουλειά μου: πρώτα απ ‘όλα, έβαλα το πραγματικό κουτί να στέκεται στο τραπέζι, έτσι ώστε η μόνη περιστροφή του ήταν στους άξονες Υ στις παγκόσμιες φυσικές μου συντεταγμένες (αφαίρεση δύο βαθμών ελευθερίας μεταβλητότητας), στη συνέχεια Τοποθέτησα το χειριστήριο λίγο πολύ στο κέντρο της επάνω όψης του κουτιού, ευθυγραμμισμένο με τον προσανατολισμό του κουτιού. Όλα αυτά ήταν απαραίτητα για να γίνει πιο εύκολη η ευθυγράμμιση μεταξύ του πραγματικού και του εικονικού κόσμου. Πάτησα το play στο Unity, και έβαλα τον κύβο σαν παιδί του χειριστηρίου, φροντίζοντας αυτό η περιστροφή του ήταν μόνο στον άξονα Υ σε καθολικές συντεταγμένες και προσαρμόζοντας την τοπική θέση και τον προσανατολισμό Y έτσι ώστε να ταιριάζουν λίγο πολύ με την παραπάνω περιγραφή, έτσι με το χειριστήριο να κάθεται λίγο πολύ στη μέση της επάνω όψης του κουτιού και το χειριστήριο και το κουτί να έχουν παρόμοιο προσανατολισμό. Λειτουργούσε αρκετά καλά: όταν πήρα το χειριστήριό μου στο χέρι, ο «κύβος» κινούνταν μαζί του, έμοιαζε με το σχήμα του κουτιού και δημιουργούσε μια τρύπα στον εικονικό κόσμο που έμοιαζε πολύ με το σχήμα του κουτιού: Είχα τα μπισκότα μου σε επαυξημένη εικονικότητα!
Υπάρχει ένα πρόβλημα που θέλω να επισημάνω σχετικά με τη χρήση των ελεγκτών Touch Plus ως ιχνηλάτες. Ή καλύτερα, δύο προβλήματα. Το πρώτο είναι αυτό αυτοί οι ελεγκτές μπαίνουν σε κατάσταση αναμονής αρκετά γρήγορα για εξοικονόμηση μπαταρίας, οπότε αν δεν τα μετακινήσετε, μπαίνουν σε αναμονή και χάνετε την παρακολούθηση του αντικειμένου σας. Το δεύτερο είναι ότι δεδομένου ότι το Touch Plus παρακολουθείται με ένα συνδυασμό της παρακολούθησης IR LED και της παρακολούθησης χεριών, εάν δεν βάλετε το χέρι σας γύρω από το χειριστήριο, η παρακολούθηση μπορεί να γίνει ασταθής ή ακόμα και μερικές φορές το σύστημα μπορεί να αρχίσει να ακολουθεί το χέρι σας αντί του ελεγκτή (ειδικά μέσω της σύνδεσης Link). Γι’ αυτό όταν έπιανα το κουτί, το έπιανα πάντα με τρόπο που το χέρι μου ήταν γύρω από το χειριστήριο.
Προσθέτοντας μπισκότα
Η προσθήκη των μπισκότων ήταν κάτι σχετικά εύκολο αφού είναι απλά Unity physics. Αφαίρεσα τον κύβο και τον αντικατέστησα με ένα “ανοιχτό κουτί κύβων”, δηλαδή έναν κύβο χωρίς την επάνω όψη και με πιο χοντρές πλευρικές όψεις, προσθέτοντας επικρουστές παντού. Μέσα σε αυτό το εικονικό κουτί που δημιούργησα, έβαλα τα cookies, με αυτά να είναι άκαμπτα σώματα με επιταχυντές. Με αυτόν τον τρόπο, Αφήνω τη μηχανή φυσικής να κάνει τα πάντα: όταν το εικονικό κουτί τοποθετήθηκε ανάποδα, η εικονική βαρύτητα θα είχε τραβήξει τα μπισκότα να πέσουν από το κουτί.
Το μόνο που έπρεπε να προσέξετε ήταν να μην βάλετε τα μπισκότα ως παιδιά του κουτιού… οι μεταμορφώσεις τους δεν θα έπρεπε να μετακινούνται από τον γονέα, αλλά θα πρέπει να είναι οι συγκρουόμενοι του κουτιού που τα κινούν μέσω φυσικών αλληλεπιδράσεων. Επίσης, θα πρέπει να «ενεργοποιούνται» μόνο όταν ο ελεγκτής αρχίζει να παρακολουθείται, διαφορετικά όταν ο ελεγκτής έχει την έναρξη παρακολούθησης, πηγαίνει από τη συντεταγμένη προέλευσης στην πραγματική πρώτη θέση που ανιχνεύτηκε και αυτό το άλμα κάνει όλα τα cookies να πετάξουν μακριά.
Δοκιμή και κατασκευή
Θέλω να σας πω μερικές πληροφορίες επίσης για τη διαδικασία δοκιμής και κατασκευής. Για δοκιμή, το βρήκα πολύ χρήσιμο δοκιμάστε την εφαρμογή μέσω του Quest Link. Υπάρχει μια ρύθμιση στο PC Oculus App (τώρα ονομάζεται Meta Quest Link App) που σας επιτρέπει να κάνετε ροή δεδομένων διέλευσης μέσω του Oculus Link, ώστε να μπορείτε να πατήσετε το Play στο πρόγραμμα επεξεργασίας Unity και να δοκιμάσετε την εφαρμογή διέλευσης στο πρόγραμμα επεξεργασίας. Έχει ποιότητα πατάτας της διέλευσης, αλλά είναι αρκετά καλό για να ελέγξετε ότι η εφαρμογή σας λειτουργεί προτού κάνετε μια μακρά κατασκευή στη συσκευή.
Ωστόσο, υπάρχουν ορισμένες προειδοποιήσεις κατά τη δοκιμή στο Editor: η παρακολούθηση του ελεγκτή μου φάνηκε περισσότερο εξαρτώμενη από την παρακολούθηση με το χέρι ενώ βρίσκομαι στο Link, έτσι έπρεπε πάντα να βάζω τα χέρια μου γύρω από το χειριστήριο όταν έκανα τη δοκιμή, δεν μπορούσα απλώς να πιάσω το κουτί. Επίσης, το shader που επέλεξα για Augmented Virtuality στο πλαίσιο δούλευε μόνο στο ένα μάτι στον υπολογιστή, ενώ ήταν τέλειο στην κατασκευή του Quest. Επίσης, η εκτέλεση όλης της εφαρμογής ήταν πιο ασταθής στο Link, ενώ ήταν ομαλή στο Build.
Όσον αφορά τη διαδικασία κατασκευής, ήταν η ίδια όπως για κάθε εφαρμογή Quest. Το Meta SDK προσφέρει ευκολίες για να σας βοηθήσει να ορίσετε τις απαιτούμενες ρυθμίσεις πριν από την κατασκευήόπως το OVR Performance Lint Tool ή το Project Setup Tool που βρίσκονται επίσης στο μενού Oculus -> Tools.
Και αυτό ήταν: Ελπίζω αυτός ο μικρός οδηγός να σας ενέπνευσε να δημιουργήσετε την εφαρμογή επαυξημένης εικονικότητας στο Quest! Εάν κάνετε κάτι με αυτό, ενημερώστε με, είμαι περίεργος να δω τα πειράματά σας…