Βιντεοπαιχνίδια: Βιομηχανία και Ανάπτυξη Ανάπτυξη βιντεοπαιχνιδιών IV Κώστας Αναγνώστου Τμήμα Πληροφορικής Ιόνιο Πανεπιστήμιο
Τι θα δούμε σήμερα Η αρχιτεκτονική ενός παιχνιδιού Ανάπτυξη λογισμικού ενός παιχνιδιού Τεχνολογίες λογισμικού για παιχνίδια
Αρχιτεκτονική ενός παιχνιδιού
Λειτουργίες που συνθέτουν ένα παιχνίδι Ένα παιχνίδι πρέπει να εκτελέσει μια πληθώρα λειτουργιών προκειμένου να δημιουργήσει και να αποδώσει τον εικονικό κόσμο στο παίκτη Γραφική απεικόνιση Καθορισμό ορατότητας Κίνηση Φυσική εξομοίωση Ήχος Αλληλεπίδραση Ανίχνευση συγκρούσεων Τεχνητή νοημοσύνη Επικοινωνία με το χρήστη (user interface) Δικτυακή επικοινωνία Διαχείριση δεδομένων Διαχείριση συμβάντων (events) Networking Input/Output
Γραφική απεικόνιση Η εικόνα είναι ο βασικός τρόπος με το οποίο ο χρήστης αντιλαμβάνεται το κόσμο Μετατροπή κάποιας αναπαράστασης του κόσμου (πολύγωνα) σε διδιάστατη εικόνα Αύξηση ρεαλισμού με χρήση σκιών, ανακλάσεων, φωτισμού Τεχνικές αύξησης λεπτομέρειας επιφάνειας, normal/parallax/displacement mapping Networking Input/Output
Κίνηση/Φυσική Εξομοίωση Κάνουν τον εικονικό κόσμο να μοιάζει ζωντανός! Η κίνηση μπορεί να καθοριστεί από τον καλλιτέχνη Μπορεί να υπολογιστεί και δυναμικά με εξομοίωση Networking Input/Output
Ήχος Ο ήχος συμπληρώνει την εικόνα ως μέσο αντίληψης του εικονικού κόσμου Η εικόνα μεταφέρει το τι γίνεται στο κόσμο Ο ήχος μεταφέρει το τι σημαίνει αυτό Μπορεί να δημιουργήσει ατμόσφαιρα Αποτελεί και στοιχείο παιχνιδιού
Ανίχνευση συγκρούσεων Τα αντικείμενα και χαρακτήρες του κόσμου αλληλεπιδρούν Διαστημόπλοια συγκρούονται Σφαίρες και ακτίνες laser εκτοξεύονται Κλειστοί χώροι περιορίζουν την κίνηση Κάθε σύγκρουση συνοδεύεται και από μια απόκριση (έκρηξη, σταμάτημα κίνησης, μείωση ζωής) Ακριβή διεργασία
Καθορισμός ορατότητας Σε ένα εικονικό κόσμο ο χρήστης έχει περιορισμένο οπτικό πεδίο Δεν φαίνεται κάθε στιγμή όλο το background, χαρακτήρες και αντικείμενα Καθορισμός του τι είναι ορατό μπορεί να επιταχύνει δραματικά το παιχνίδι (λογική και απεικόνιση)
Τεχνητή νοημοσύνη Ο εικονικός κόσμος γίνεται ποιο αληθοφανης και διασκεδαστικός με χαρακτήρες και αντιπάλους που παρουσιάζουν «νοημοσύνη» Στα παιχνίδια είναι περιορισμένη η «νοημοσύνη» των χαρακτήρων Κάθε είδος παιχνιδιού έχει διαφορετικές απαιτήσεις σε νοήμονα συμπεριφορά Από τους λιγότερο εξελιγμένους τομείς στα βιντεοπαιχνίδια
Τεχνητή νοημοσύνη Τρία στάδια κατά τον υπολογισμό νοήμων συμπεριφοράς Αίσθηση: ανίχνευση περιβάλλοντος Σκέψη: χρήση πληροφορίας περιβάλλοντος και εσωτερικής λογικής Δράση: αποτέλεσμα της σκέψης
Διεπαφή με το χρήστη Αλληλεπίδραση με το παιχνίδι Παθητική : απεικόνιση πληροφορίας Ενεργητική : παραμετροποίηση Η πολυπλοκότητας εξαρτάται από το παιχνίδι
Διαχείριση δεδομένων Ένα παιχνίδι βασίζεται σε αποδοτική διαχείριση δεδομένων για την λειτουργία του Πολύγωνα, υφές, κίνηση, ήχοι είναι όλα δεδομένα Πρέπει να υποστηρίζεται γρήγορη ανάγνωση και αποδοτική αναπαράσταση στην μνήμη Πολλά παιχνίδια υποστηρίζουν συνεχή ανάγνωση (streaming)
Αρχιτεκτονική παιχνιδιού Οι περισσότερες από τις λειτουργίες που αναφέραμε μπορούν να υλοποιηθούν ως ανεξάρτητες οντότητες με καλά καθορισμένη είσοδο και έξοδο Η αρχιτεκτονική ενός παιχνιδιού καθορίζει τις οντότητες αυτές και την μεταξύ τους αλληλεπίδραση
Άναρχη σχεδίαση Δεν υπάρχει διαχωρισμός στις λειτουργίες Μικρά παιχνίδια Ελάχιστες δυνατότητες επαναχρησιμοποίησης κώδικα Δύσκολο να εντοπιστούν σφάλματα Απεικόνιση Ήχος Κίνηση Συγκρούσεις Δεδομένα Τεχνητή νοημοσύνη Συμβάντα
Σχεδίαση με οντότητες Σαφής διαχωρισμός των λειτουργιών και υλοποίηση σε οντότητες Η μεταξύ τους επικοινωνία δεν καθορίζεται Ευκολότερος εντοπισμός σφαλμάτων Η ανεξέλεγκτη επικοινωνία δημιουργεί εξαρτήσεις
Σχεδίαση με γράφο Ιεραρχική αρχιτεκτονική, παραλλαγή της σχεδίασης με οντότητες Διακριτά υποσυστήματα Περιορισμός της ενδοεπικοινωνίας με γράφο Διαχωρισμός σε υποσυστήματα υψηλού και χαμηλού επιπέδου Τα υψηλού επιπέδου υποσυστήματα μπορούν να επικοινωνήσουν με χαμηλού επιπέδου
Σχεδίαση σε επίπεδα Βασίζεται στην σχεδίαση με γράφο, εισάγοντας επιπλέον περιορισμού στην επικοινωνία Διαμοιράζει τις οντότητες σε επίπεδα Τα υψηλού επιπέδου υποσυστήματα μπορούν να επικοινωνήσουν μόνο με αμέσως χαμηλότερου επιπέδου Απαιτεί επιπλέον κώδικα για την σύνδεση των επιπέδων
Βρόγχος παιχνιδιού (game loop) Κάθε παιχνίδι περνά από μια σειρά συγκεκριμένων διαδικασιών προκειμένου να απεικονίσει κάθε καρέ παιχνιδιού Τα βήματα που πρέπει να πραγματοποιηθούν σε κάθε καρέ για την απεικόνιση του ονομάζεται βρόγχος παιχνιδιού ( game loop )
Βρόγχος παιχνιδιού (game loop) Η αρχικοποίηση πραγματοποιεί εργασίες απαραίτητες για την εκκίνηση του παιχνιδιού Το στάδιο της φόρτωσης μεταφέρει τα δεδομένα από το αποθηκευτικό μέσο στην μνήμη Το στάδιο της ανανέωσης (Λογική), υλοποιεί κίνηση, ανίχνευση συγκρούσεων, εξομοίωση Το στάδιο της απεικόνισης ζωγραφίζει τον εικονικό κόσμο στην οθόνη (ένα καρέ) Τα δύο τελευταία βήματα επαναλαμβάνονται μέχρι να κλείσουμε το παιχνίδι Για 60Ηz έχουμε 16.6 ms για να ανανεώσουμε τον κόσμο και ζωγραφίσουμε ένα καρέ Για 30Hz έχουμε 33.3 ms
Στάδιο της Λογικής Υπεύθυνο για την λειτουργία του εικονικού κόσμου. Υλοποιεί μια πληθώρα εργασιών Είσοδος από χειριστήριο Ενημέρωση χαρακτήρα παίκτη Ανίχνευση ορατότητας Ενημέρωση αντικειμένων κόσμου Απλά αντικείμενα Αντικείμενα με νοημοσύνη Επικοινωνία μέσω δικτύου Ενημέρωση οντότητας ήχου
Στάδιο της Απεικόνισης Οι λειτουργίες του προηγούμενου βήματος καθορίζουν ένα στιγμιότυπο του κόσμου. Το στάδιο της απεικόνισης το φωτογραφίζει και το δείχνει στην οθόνη. Προσδιορισμός ορατότητας Απεικόνιση σκηνικού Απεικόνιση αντικειμένων Απεικόνιση χαρακτήρα παίκτη Εφαρμογή επιπλέον εφέ Απεικόνιση διεπαφής Αναπαραγωγή ήχου
Βρόγχος παιχνιδιού Ο συνολικός αναλυτικότερος βρόγχος σε ψευδοκώδικα Αρχικοποίηση Φόρτωση περιεχόμενου Αρχή βρόγχου Λογική Έλεγξε είσοδο από χειριστήριο Έλεγξε μηνύματα μέσω δικτύου Ενημέρωση χαρακτήρα παίκτη Δημιουργία λίστας αντικειμένων/χαρακτήρων προς ανανέωση Ενημέρωση αντικειμένων με απλή λογική Ενημέρωση αντικειμένων με σύνθετη λογική (τεχνητή νοημοσύνη) Αποστολή μηνυμάτων μέσω δικτύου Ενημέρωση ήχου Απεικόνιση Δημιουργία λίστας ορατών αντικειμένων/χαρακτήρων Απεικόνιση ορατού σκηνικού Απεικόνιση ορατών αντικειμένων/χαρακτήρων Απεικόνιση χαρακτήρα παίκτη Εφαρμογή ειδικών εφέ Απεικόνιση διεπαφής Αναπαραγωγή ήχου Αν όχι έξοδος πήγαινε στην αρχή Αποδέσμευση πόρων Έξοδος Και όλα αυτά πρέπει να γίνουν μέσα σε 16.6 ms!!
Ανάπτυξη λογισμικού ενός παιχνιδιού
Περιοχές ανάπτυξης λογισμικού Η ομάδα ανάπτυξης λογισμικού ενός παιχνιδιού ασχολείται με 3 περιοχές: Κώδικα του παιχνιδιού Μηχανή του παιχνιδιού Βοηθητικά εργαλεία
Κώδικας παιχνιδιού Ο κώδικας του παιχνιδιού (game code) υλοποιεί την λογική του παιχνιδιού τα στοιχεία παιχνιδιού (gameplay) το χειρισμό του χαρακτήρα του παίκτη και της κάμερας την τεχνητή νοημοσύνη και συμπεριφορά των αντιπάλων πώς υπολογίζεται το σκορ του παίκτη πως θα ανανεωθεί η ενέργεια του και το πώς θα αναβαθμίσει το χαρακτήρα του Ο κώδικας του παιχνιδιού είναι αυτό που υλοποιεί το όραμα του σχεδιαστή και δημιουργεί τον εικονικό κόσμο και τις αλληλεπιδράσεις του.
Μηχανή παιχνιδιού Μηχανή παιχνιδιού (game engine) ονομάζεται η εφαρμογή που αναλαμβάνει τη διεκπεραίωση των βασικών λειτουργιών ενός παιχνιδιού απεικόνιση των γραφικών αναπαραγωγή ήχου φυσική εξομοίωση κίνηση είσοδο/έξοδο επικοινωνία μέσω δικτύου Δεν έχει γνώση της λογικής του παιχνιδιού, ούτε γνωρίζει το νόημα της αλληλεπίδρασης του με το χρήστη
Βοηθητικά εργαλεία Βοηθητικό εργαλείο είναι το λογισμικό που διευκολύνει και αυτοματοποιεί μια διαδικασία που αφορά την ανάπτυξη ενός παιχνιδιού Χρήστες είναι συνήθως οι σχεδιαστές και οι καλλιτέχνες Στα παιχνίδια τελευταίας γενιάς η ανάγκη για αποδοτικά και εύχρηστα εργαλεία είναι επιτακτική
Βοηθητικά εργαλεία Πολλές κατηγορίες βοηθητικών εργαλείων Editors: τα προγράμματα αυτά βοηθούν στην σύνθεση του εικονικού κόσμου και των αλληλεπιδράσεων μέσα σε αυτό. Επεκτάσεις (plugins): προσθήκη λειτουργικότητας σε έτοιμες εφαρμογές (Maya, 3D Studio και Zbrush) Μετατροπείς: μετατρέπουν το περιεχόμενο που αναπτύσσουν οι σχεδιαστές και οι καλλιτέχνες με τα εργαλεία σε μορφή κατάλληλη για φόρτωση και χρήση στο παιχνίδι. Αυτοματοποίηση: αυτοματοποίηση επαναληπτικών εργασίες που απαιτούν πολύ χρόνο να διεκπεραιωθούν.
Βοηθητικά εργαλεία Σχεδιασμός επιπέδου με κώδικα for each building in level { if building.id is in enemyBuildingsList { numEnemies = number of enemies in building for i = 1 to numEnemies { enemy = new Enemy; Setup(enemy); building.Add(enemy) at location X }
Βοηθητικά εργαλεία
Software engineering για παιχνίδια
Τεχνολογία λογισμικού Η μείωση του κόστους και του οικονομικού ρίσκου είναι αυτά που χαρακτηρίζουν την ανάπτυξη λογισμικού ενός παιχνιδιού σήμερα. Προβλέψιμη ανάπτυξη βιντεπαιχνιδιών Κινείται στα πλαίσια χρονοδιαγράμματος, του προϋπολογισμού και της ποιότητας που έχουν οριστεί. Οι εταιρίες στρέφονται στην υιοθέτηση μεθόδων τεχνολογίας λογισμικού (software engineering)
Τεχνολογία λογισμικού Η Τεχνολογία Λογισμικού είναι ένα σύνολο προτεινόμενων κανόνων και μεθόδων που καθοδηγούν την παραγωγή λογισμικού. Είναι μια συστηματική, πειθαρχημένη και με μετρήσιμα αποτελέσματα προσέγγιση κατά το σχεδιασμό, την υλοποίηση και τον έλεγχο σφαλμάτων Αυξάνει την παραγωγικότητα των προγραμματιστών Κάνει τον κώδικα πιο αξιόπιστο Μειώνει την πιθανότητα σφαλμάτων και κατά συνέπεια καθυστερήσεων στην έκδοση του παιχνιδιού Η συντήρηση αλλά και η επέκταση του κώδικα γίνεται φθηνότερη, Η επαναχρησιμοποίηση κώδικα για άλλα παιχνίδια είναι εφικτή.
Οι 3 συνιστώσες της ανάπτυξης Η ανάπτυξη ενός παιχνιδιού χαρακτηρίζεται από 3 συνιστώσες: ο χρόνος που απαιτείται για την ανάπτυξη το κόστος ανάπτυξης η ποιότητα του παραγόμενου παιχνιδιού
Οι 3 συνιστώσες της ανάπτυξης Βασικό αξίωμα ανάπτυξης λογισμικού Οι 3 συνιστώσες δεν είναι ανεξάρτητες μεταξύ τους Για να καταφέρω να βγει το παιχνίδι για την περίοδο των Χριστουγέννων, θα πρέπει είτε να προσλάβω αρκετούς προγραμματιστές, είτε να ρίξω την ποιότητα Ποιοτικά παιχνίδια, με μικρό κόστος και εμπρόθεσμα είναι πρακτικά αδύνατο να κατασκευαστούν!
Κύκλος ζωής του λογισμικού Τα στάδια ανάπτυξης του λογισμικού ενός παιχνιδιού είναι Προσδιορισμός και ανάλυση απαιτήσεων (requirement analysis) Σχεδίαση (software design) Ανάπτυξη κώδικα (coding) Έλεγχος (testing) Παράδοση/Υποστήριξη (delivery/support) Στην θεωρία, τα στάδια αυτά μπορούν να εγγυηθούν προβλέψιμη ανάπτυξη και τήρηση χρονοδιαγραμμάτων και προϋπολογισμού
Αστάθμητοι παράγοντες Η ανάπτυξη ενός παιχνιδιού επηρεάζεται από πολλούς αστάθμητους παράγοντες Μη τήρηση ημερομηνίας παράδοσης Ακύρωση παιχνιδιού Το παιχνίδι δεν είναι διασκεδαστικό Το παιχνίδι έχει τεχνικά προβλήματα Αλλαγές στην αγορά Παραιτήσεις προσωπικού Το οικονομικό ρίσκο που ενέχει η ανάπτυξη ενός παιχνιδιού δεν αφήνει περιθώρια για αστάθμητους παράγοντες!
Μεθοδολογίες ανάπτυξης Μια μεθοδολογία ανάπτυξης καθορίζει το πώς θα οργανώσει μια εταιρία το ανθρώπινο δυναμικό και τους πόρους της ώστε να αναπτύξει με επιτυχία ένα έργο Προσπαθεί να μειώσει το δυνατό περισσότερο την αβεβαιότητα και το οικονομικό ρίσκο που ενέχει η ανάπτυξη του παιχνιδιού Κυριότερες μεθοδολογίες που συναντούμε στην βιομηχανία βιντεοπαιχνιδιών Άναρχη ανάπτυξη Μεθοδολογία του καταρράκτη Επαναληπτική ανάπτυξη Ευέλικτη ανάπτυξη
Άναρχη ανάπτυξη (code and fix) Έλλειψη αρχικού σχεδιασμού του κώδικα του παιχνιδιού Απευθείας στην υλοποίηση αντιμετωπίζοντας τα προβλήματα καθώς εμφανίζονταν. Χαμηλής ποιότητας κώδικα και αυξημένο κόστος παρατεταμένες περιόδους διόρθωσης σφαλμάτων κατά την Beta φάση του παιχνιδιού η τελική ποιότητα του παραγόμενου παιχνιδιού είναι αμφίβολη. Κατάλληλο μόνο για πολύ μικρές ομάδες και παιχνίδια
Μέθοδος του καταρράκτη (waterfall) Εκ των προτέρων συνολικός σχεδιασμός της ανάπτυξης με πλήρη περιγραφή κάθε βήματος, της υλοποίησης και των αποτελεσμάτων του. Καταγράφει προβλήματα και τρόπους αντιμετώπισης τους δίνει μια εποπτική εικόνα του έργου και της ανάπτυξης του τήρηση του χρονοδιαγράμματος, στην έγκαιρη αντιμετώπιση προβλημάτων και στην παράδοση ενός ποιοτικού προϊόντος (θεωρητικά) είναι ευαίσθητο σε μεγάλες αλλαγές στις συνθήκες ανάπτυξης!
Αστάθμητοι παράγοντες (ξανά) Η ανάπτυξη ενός παιχνιδιού κάθε άλλο παρά από σταθερότητα χαρακτηρίζεται Μη τήρηση ημερομηνίας παράδοσης Ακύρωση παιχνιδιού Το παιχνίδι δεν είναι διασκεδαστικό Το παιχνίδι έχει τεχνικά προβλήματα Αλλαγές στην αγορά Παραιτήσεις προσωπικού
Μέθοδος του καταρράκτη (waterfall)
Επαναληπτική μέθοδος (iterative) Θέτει μικρότερους στόχους (παραδοτέα) που απαιτούν μικρότερο χρόνο υλοποίησης (μέχρι 2 μήνες). Στο τέλος της περιόδου ανάπτυξης αξιολογείται η πρόοδος του έργου αναπροσαρμόζονται οι στόχοι και σχεδιάζεται η επόμενη σύντομη περίοδος ανάπτυξης Σχεδιασμός Υλοποίηση Έλεγχος καλής λειτουργίας Αξιολόγηση Ανάλυση - Προδιαγρα φές
Ευέλικτη ανάπτυξη (agile) Η ευέλικτη μεθοδολογία είναι μια φιλοσοφία ανάπτυξης που εμφανίστηκε προς το τέλος του ’90. Δίνει έμφαση σε Ανθρώπους και μεταξύ τους αλληλεπιδράσεις αντί για διεργασίες και εργαλεία Λογισμικό που να λειτουργεί αντί λεπτομερή τεκμηρίωση Συνεργασία με τον πελάτη αντί σε διαπραγματεύσεις για συμβόλαια Απόκριση σε αλλαγή αντί για προσκόλληση σε σχέδιο Διακήρυξη της ευέλικτης ανάπτυξης (2001)
Ευέλικτη ανάπτυξη (agile) Μια ευέλικτη μεθοδολογία ξεκινά την ανάπτυξη αμέσως χωρίς λεπτομερές σχέδιο το προσαρμόζει αργότερα ανάλογα την αποκτηθείσα εμπειρία αλλά και εξωγενής παράγοντες. Μόνο η αρχή και ο στόχος (ένα πετυχημένο παιχνίδι, στη ώρα του) είναι γνωστά, τα ενδιάμεσα στάδια καθορίζονται στην πορεία προς το στόχο. Δυο ευέλικτες μεθοδολογίες που γνωρίζουν ανάπτυξη τα τελευταία χρόνια είναι η Scrum και η Extreme Programming
Scrum Mεθοδολογία οργάνωσης και διοίκησης της ομάδας ανάπτυξης ενός παιχνιδιού (λογισμικού γενικότερα), χρησιμοποιώντας επαναληπτικές, αυξητικές διεργασίες.
Ερωτήσεις;