Οι AR και VR γίνονται mainstream, και όλες οι κορυφαίες μεγάλες εταιρείες υψηλής τεχνολογίας τις ακολουθούν: η Apple διαθέτει ARKit, η Google έχει ARCore και η Microsoft έχει το δικό τους HoloLens (και, φυσικά, υπάρχει η Unity). Και με λίγες αιτήσεις που λαμβάνουν πολλή προσοχή του κοινού, Ανάπτυξη εφαρμογών επαυξημένης πραγματικότητας γίνεται μια πολύ επιθυμητή ικανότητα για προγραμματιστές κινητής τηλεφωνίας.
Σε αυτό το άρθρο, θα ήθελα να δείξω μια απλή, αλλά ουσιαστική, μικρή εφαρμογή που θα κάνει κάτι περισσότερο από απλώς έναν περιστρεφόμενο κύβο. Ποιος χρειάζεται περιστρεφόμενους κύβους ούτως ή άλλως; Ας φτιάξουμε το The Matrix.
ARKit είναι ένα πλαίσιο της Apple για τη δημιουργία εφαρμογών AR για συσκευές iOS. Μπορούν να χρησιμοποιηθούν αρκετές συσκευές απόδοσης: SpriteKit για 2D αντικείμενα, SceneKit για 3D και Μέταλλο αν θέλουμε να εφαρμόσουμε μια προσαρμοσμένη απόδοση.
Για αυτήν την επίδειξη, θα χρησιμοποιούμε το SceneKit για την απόδοση και την τοποθέτηση τρισδιάστατων αντικειμένων (μαχαίρια).
Από το ARKit v2, υποστηρίζονται πέντε τύποι διαμόρφωσης στο ARKit:
AROrientationTrackingConfiguration - Όταν θέλετε να παρακολουθείτε μόνο τον προσανατολισμό της συσκευής (π.χ. για μια εφαρμογή αστερισμού). Με αυτήν τη διαμόρφωση, οι φυσικές κινήσεις όπως το πλευρικό σκαλοπάτι δεν παρακολουθούνται και δεν θα επηρεάσουν τη θέση ή την κατεύθυνση των αντικειμένων στη σκηνή.
ARWorldTrackingConfiguration - Αυτή είναι ίσως η πιο συχνά χρησιμοποιούμενη διαμόρφωση για το AR, καθώς υποστηρίζει αυτό που οι περισσότεροι άνθρωποι θα θεωρούσαν επαυξημένη πραγματικότητα. Παραδείγματα περιλαμβάνουν εικονικές εφαρμογές για κυνήγι κατοικίδιων ζώων ή Pokémon.
ARFaceTrackingConfiguration - Αυτή η διαμόρφωση υποστηρίζεται προς το παρόν μόνο από το iPhone X, επειδή απαιτεί κάμερα TrueDepth (όπως το Face ID). Αυτή η διαμόρφωση παρακολουθεί τις δυνατότητες στο πρόσωπο και τη σχετική αντιστάθμισή της από την ουδέτερη έκφραση του προσώπου (π.χ., μια εφαρμογή όπου οι χρήστες μπορούν να δοκιμάσουν γυαλιά ηλίου μόδας πριν το παραγγείλουν).
ARImageTrackingConfiguration - Εάν έχετε ένα σύνολο δεικτών και θέλετε να δείξετε τα ζώα να πηδούν έξω από το δείκτη, τότε αυτή η διαμόρφωση είναι κατάλληλη για εσάς. Αυτά δεν πρέπει να είναι δείκτες που μοιάζουν με κάρτα, αλλά οποιαδήποτε δισδιάστατη εικόνα. Θα μπορούσες να δείξεις τη φωτογραφική σου μηχανή στη Μόνα Λίζα και θα γύριζε το κεφάλι της και θα σου έλεγε κάτι. Ένα μειονέκτημα είναι ότι πρέπει να πείτε εκ των προτέρων ποιο είναι το φυσικό μέγεθος του δείκτη εικόνας.
ARObjectScanningConfiguration - Αυτή η διαμόρφωση είναι η τρισδιάστατη έκδοση του ARImageTrackingConfiguration.
Σε αυτό το demo, θα προσθέσουμε μαχαίρια και σφαίρες στη σκηνή και θα θέλαμε να έχουμε έξι βαθμούς ελευθερίας, οπότε το κατάλληλο εργαλείο είναι το ARWorldTrackingConfiguration.
Όλοι όσοι έχουν δει το The Matrix μπορούν να θυμηθούν τους Neo (Keanu Reeves) να αποφεύγουν τις σφαίρες και να τις σταματούν στον αέρα. Η εφαρμογή μας θα μας βοηθήσει να αναδημιουργήσουμε αυτήν τη σκηνή από μια ζωντανή ροή κάμερας. Έτσι, μπορούμε να δημιουργήσουμε προσαρμοσμένα βίντεο που δείχνουν Neo-like δυνάμεις.
Η εφαρμογή μας θα έχει τρισδιάστατα μοντέλα από σφαίρες και μαχαίρια. Εξαρτάται από τον χρήστη πόσες σφαίρες ή μαχαίρια θέλουν στην ταινία τους. Εάν θέλετε να αφιερώσετε λίγο χρόνο και να προσθέσετε άλλα μοντέλα, ο κώδικας της εφαρμογής είναι ανοιχτού κώδικα και είναι διαθέσιμος στο GitHub ( https://github.com/altaibayar/toptal_ar_video_maker ). Αν και δεν πρόκειται για πλήρες σεμινάριο AR, η επίδειξη και η πηγή θα πρέπει να αποτελούν πολύτιμο πόρο εάν προσπαθείτε να μπείτε στην ανάπτυξη εφαρμογών AR σε iOS.
Το σενάριο της προβλεπόμενης περίπτωσης χρήσης έχει ως εξής:
Όπως αναφέρθηκε προηγουμένως, θέλουμε να είμαστε σε θέση να κινούμαστε ελεύθερα ενώ καταγράφουμε και τις 360º της σκηνής και να έχουμε τις σφαίρες και τα μαχαίρια να παρακολουθούν την κίνηση της κάμερας κατάλληλα.
Για σκοπούς επίδειξης, θα έχουμε μόνο δύο τύπους εικονικών αντικειμένων: μαχαίρια και κουκκίδες.
Τα μαχαίρια είναι λεπτομερή αντικείμενα και θα χρησιμοποιώ το δωρεάν μοντέλο από https://poly.google.com/view/3TnnfzKfHrq (Ευχαριστώ Andrew).
Οι σφαίρες κυνηγετικών όπλων, ωστόσο, είναι απλά σφαιρικά αντικείμενα και μπορούμε απλά να τα κωδικοποιήσουμε. Θα τα κάνουμε μεταλλικά και κόκκινα για ποικιλία. Επειδή μιμούμαστε ένα κυνηγετικό όπλο, θα τα δημιουργήσουμε και ως ομαδοποιημένα σμήνη. Για να γίνει κατανοητό το clustering χωρίς υπερβολική ταλαιπωρία, μπορούμε να χρησιμοποιήσουμε τη γεννήτρια τυχαίων αριθμών Gauss από το GamplayKit.
Το GameplayKit είναι ένα χρήσιμο εργαλείο που είναι χρήσιμο κάθε φορά που χρειάζεστε τυχαία παραγωγή θορύβου, μηχάνημα κατάστασης, AI ή λήψη αποφάσεων βάσει πιθανότητας.
override init() { super.init(); // generate 50 gaussian distributed position around [0, 0, 0] let positions = Randomness.gaussian(center: SCNVector3Zero, count: 50); for pos in positions { let node = SCNNode(geometry: sphereGeometry()); node.position = pos; self.addChildNode(node); } } private func sphereGeometry() -> SCNGeometry { // radius of one projectile sphere is 5mm/0.2inch let sphere = SCNSphere(radius: 0.005); // sphere is reddish sphere.firstMaterial?.diffuse.contents = UIColor.red; // reflection on light is gray/silver sphere.firstMaterial?.reflective.contents = UIColor.gray; // metalness is 0.3 sphere.firstMaterial?.metalness.contents = 0.3; // shading should be realistic sphere.firstMaterial?.lightingModel = .physicallyBased; return sphere; }
Παρόμοια λογική τυχαίας μετατόπισης μπορεί να χρησιμοποιηθεί για τα μαχαίρια, αλλά επειδή δεν συμπεριφέρονται ως συστάδες, μπορεί να χρησιμοποιηθεί μια απλή τυχαία κατανομή.
Είναι πέρα από το πεδίο αυτής της επίδειξης να εμβαθύνουμε σε συζητήσεις για το ποιο πρότυπο αρχιτεκτονικής είναι το καλύτερο. Υπάρχουν πολλά άρθρα εκεί έξω που εξετάζουν αυτό το θέμα.
Αντ 'αυτού, απλώς θα παρουσιάσω τη δομή του έργου ως οδηγό για να βρείτε το δρόμο σας γύρω από το συνδεδεμένο έργο GitHub: ποια είναι τα κύρια στοιχεία, πώς συνδέονται και γιατί επιλέχθηκαν.
Η εφαρμογή έχει μόνο τρεις οθόνες:
PermissionViewController - Η οθόνη όπου ζητάμε από τον χρήστη να παραχωρήσει στην εφαρμογή πρόσβαση στις απαιτούμενες δυνατότητες για κινητά.
ExportViewController - Αυτή η οθόνη εμφανίζει ένα εγγεγραμμένο βίντεο και προσφέρει τις επιλογές για κοινή χρήση ή αποθήκευση του βίντεο.
MainViewController - Όλη η μαγεία συμβαίνει εδώ.
Από την εμπειρία μου, είναι καλύτερο να ολοκληρώσετε όλα τα απαραίτητα μαθήματα ARKit όπως το ARSession, το ARConfiguration και όλους τους μοναδικούς τύπους SCNNode. Με αυτόν τον τρόπο, ο κωδικός είναι αυτονόητος.
Το ARSession κληρονομείται στο ApeeScapeARSession και η νέα κλάση συνεδρίας έχει μόνο τρεις μεθόδους: τον κατασκευαστή κλάσης όπου ρυθμίζουμε ό, τι απαιτείται και τις μεθόδους resetTracking και pauseTracking.
Η εφαρμογή αναγνωρίζει τέσσερις μοναδικούς τύπους SCNNodes:
BulletsNode - Αυτός ο κόμβος αντιπροσωπεύει ένα σύνολο κελυφών κυνηγετικών όπλων. Ο τυχαίος θόρυβος Gauss, τα χρώματα και η φυσική λειτουργία φωτισμού ρυθμίζονται αυτόματα.
Δεν απαιτείται ειδική ή πρόσθετη εργασία στις τάξεις που χρησιμοποιούν KnifeNode ή BulletsNode και μπορούν να χρησιμοποιηθούν ως πρότυπα για την προσαρμογή της εφαρμογής για την προσθήκη περισσότερων ειδών τρισδιάστατων αντικειμένων.
Μοντέλο μαχαιριού: https://poly.google.com/view/3TnnfzKfHrq
Εγγραφή από το SCNScene: https://github.com/svtek/SceneKitVideoRecorder
Εικονίδια κουμπιών, εφαρμογή επίδειξης ARKit: https://developer.apple.com/documentation/arkit/handling_3d_interaction_and_ui_controls_in_augmented_reality
Το ARKit είναι ένα πλαίσιο της Apple για τη δημιουργία εφαρμογών επαυξημένης πραγματικότητας για συσκευές iOS.
Το SceneKit είναι ένα πλαίσιο για την ανάπτυξη τρισδιάστατων γραφικών σε περιβάλλον Apple. Χρησιμεύει ως μια αφηρημένη διεπαφή προς API χαμηλότερου επιπέδου, όπως απόδοσης.