Ο Λέκτορας Πληροφορικής Κώστας Αναγνώστου αναλύει τη δομή της ομάδας ανάπτυξης παιχνιδιών
Ο καθηγητής Πληροφορικής Κώστας Αναγνώστου αναλύει τη δομή της ομάδας ανάπτυξης παιχνιδιών
Με το παρόν άρθρο το GameOver εγκαινιάζει μια ειδική συνεργασία με τον Λέκτορα Κώστα Αναγνώστου. Ο κ. Κώστας Αναγνώστου (Phd, MSc, DipEng) έχει εργαστεί επί σειρά ετών στην Microsoft Game Studios (Rare) στην Αγγλία, αναπτύσσοντας τεχνολογία για βιντεοπαιχνίδια για κονσόλες νέας γενιάς όπως τα Xbox και Xbox 360. Έχει λάβει μέρος στην ανάπτυξη των παιχνιδιών Conker: Live and Reloaded για το Xbox και Kameo: Elements of Power, Perfect Dark Zero και Forza 2 για το Xbox 360. Τελευταία, ο Κώστας Αναγνώστου διδάσκει τα μαθήματα «Τεχνολογίες Ψυχαγωγικού Λογισμικού(videogames)», «Εικονική Πραγματικότητα» και «Γραφικά Με Υπολογιστές» στο Τμήμα Πληροφορικής του Ιονίου Πανεπιστημίου. Διατηρεί ένα νηφάλιο blog ενάντια στην υστερία που διακρίνει σήμερα τα ΜΜΕ, την πολιτεία και τους γονείς ενάντια στα videogames. Μπορείτε να το βρείτε εδώ
Μέρος Πρώτο
Η εξέλιξη της ομάδας ανάπτυξης
1978. Καλή εποχή για να αναπτύσσεις βιντεοπαιχνίδια. Τότε που για να κάνεις μια παγκόσμια επιτυχία, όπως το Space Invaders, με τεράστιες πωλήσεις και μεγάλο αντίκτυπο στο σχεδιασμό των βιντεοπαιχνιδιών για χρόνια, απαιτούσε γνώση, μεράκι και 12 μήνες εργασίας από ακριβώς ένα άτομο, το οποίο έκανε εξολοκλήρου το σχεδιασμό, τα γραφικά και τον προγραμματισμό του παιχνιδιού. Η περίπτωση αυτή ίσως είναι μεμονωμένη και όχι τόσο κοινή. Γεγονός όμως είναι ότι μέχρι πριν το 1994 μια χούφτα ανθρώπων χωρίς, σε πολλές περιπτώσεις, ιδιαίτερη εκπαίδευση στα γραφικά ή τον ήχο παρά μόνο στο προγραμματισμό, ήταν αρκετή για την ανάπτυξη ενός παιχνιδιού σε λογικό χρονικό διάστημα.
Αυτό άλλαξε ανεπιστρεπτί από το 1994 και μετά με την εισαγωγή ειδικών κυκλωμάτων για επιτάχυνση τριδιάστατων γραφικών στις κονσόλες (και στον προσωπικό υπολογιστή). Ξαφνικά όλος ο σχεδιασμός παιχνιδιών αλλάζει από τις 2 στις 3 διαστάσεις και αρχίζει μια ανελέητη μάχη μεταξύ των εταιρειών (Sony, Nintendo, Sega και αργότερα Microsoft) για την παραγωγή ολοένα και πιο μεγάλων και ρεαλιστικών κόσμων στα παιχνίδια με στόχο την κυριαρχία πάνω στην αγορά βιντεοπαιχνιδιών.
Άρχισαν τότε οι ομάδες ανάπτυξης να μεγαλώνουν σημαντικά και να δημιουργούνται διακριτοί ρόλοι και μεγάλη ειδίκευση: ο καλλιτέχνης έπρεπε να είναι εξειδικευμένος στη τρισδιάστατη μοντελοποίηση του κόσμου και των αντικειμένων του. Ο προγραμματιστής ήταν αδύνατο να ασχοληθεί με την δημιουργία των γραφικών του κόσμου, κάτι που μπορούσε να κάνει παλαιότερα. Όσο μεγαλύτεροι και πιο λεπτομερείς γίνονται οι κόσμοι τόσο μεγαλύτερη εξειδίκευση απαιτείται: χρειάζεται άλλος καλλιτέχνης για τα backgrounds, άλλος καλλιτέχνης για τα μοντέλα, άλλος για τις υφές. Παρομοίως, για τον προγραμματισμό του παιχνιδιού, άλλος είναι υπεύθυνος για την μηχανή γραφικών, άλλο για την επικοινωνία μέσω δικτύου, και άλλος για την τεχνητή νοημοσύνη των χαρακτήρων.
Η τάση αυτή συνεχίστηκε και αυξήθηκε στην τελευταία γενιά κονσόλων (2005 και μετά, κυρίως μεταξύ Xbox360, PlayStation 3 αλλά και του PC) που οι αυξημένες δυνατότητες στην απεικόνιση των γραφικών, η περισσότερη επεξεργαστική ισχύς και η μεγαλύτερη μνήμη επιτρέπουν μεγαλύτερη ελευθερία στους σχεδιαστές ενός παιχνιδιού για ολοένα και μεγαλύτερους και πιο σύνθετους εικονικούς κόσμους. Ομάδες ανάπτυξης 100+ ατόμων είναι κάτι το σύνηθες σήμερα και προϋπολογισμοί ανάπτυξης που ξεπερνούν τα 30 εκατομμύρια δολάρια.
Τα παιχνίδια που παίζουμε και απολαμβάνουμε σε κονσόλες και προσωπικούς υπολογιστές αποτελούν συλλογική προσπάθεια μιας μεγάλης ομάδας ατόμων με διακριτούς ρόλους και ειδικότητες, μιας ομάδα που πρέπει να συντονιστεί σωστά και να είναι αποδοτική ώστε να καταφέρει να φέρει εις πέρας ένα ποιοτικό προϊόν και στο σωστό χρόνο στην εξαιρετικά ανταγωνιστική αγορά των βιντεοπαιχνιδιών. Ας δούμε πως γίνεται αυτό αρχίζοντας μακροσκοπικά με την οργάνωση ολόκληρης της εταιρείας ανάπτυξης.
Η δομής μιας εταιρείας ανάπτυξης παιχνιδιών
Οι εταιρείες ανάπτυξης βιντεοπαιχνιδιών δεν διαφέρουν στη δομή τους ιδιαίτερα από τις υπόλοιπες εταιρείες ανάπτυξης λογισμικού. Στη γενική περίπτωση, και ανάλογα με το μέγεθος τους, μπορεί να έχουν ένα ή και παραπάνω ανεξάρτητα studio (ομάδα), το κάθε ένα από τα οποία αναλαμβάνει εξολοκλήρου την ανάπτυξη ενός παιχνιδιού. Στις πολύ μεγάλες εταιρείες (όπως η Microsoft Game Studios και η Epic), μπορεί να υπάρχει και μια ανεξάρτητη ομάδα ανάπτυξης της μηχανής γραφικών της εταιρείας ή και μια ομάδα που κάνει το testing το παιχνιδιού. Περισσότερα όμως για αυτές τις εξειδικευμένες ομάδες σε λίγο. Λιγότερο συνηθισμένο την σήμερον ημέρα, στην εποχή των μέγα-publishers που ζούμε, είναι μια εταιρεία να έχει και ομάδα marketing και προώθησης ενός παιχνιδιού. Αυτό κατά κανόνα το αναλαμβάνει η εταιρεία που θα διαθέσει το παιχνίδι στην αγορά (εκτός αν η εταιρία ανάπτυξης είναι και publisher μαζί).
Ο υπεύθυνος και συντονιστής όλων των ομάδων (studio) έχει εντυπωσιακά ονόματα όπως Διευθυντής Λογισμικού (Software Director). Στην ουσία δίνει την κατευθυντήρια γραμμή της εταιρείας, λαμβάνει μέρος στην έγκριση μιας ιδέας παιχνιδιού, παίρνει αποφάσεις για την χρήση λογισμικού τρίτων (middleware όπως π.χ. το Havok, Unreal Engine). Επίσης, η παρουσία ενός Διευθυντή Περιεχομένου (Art Director) σε μια εταιρία δεν είναι ασυνήθιστη. Ο Art Director είναι υπεύθυνος για την εξασφάλιση της ποιότητας και την έγκαιρη ολοκλήρωση εργασίας πάνω στο περιεχόμενο του παιχνιδιού σε όλα τα studio της εταιρίας.
Κεφαλή και υπεύθυνος κάθε ομάδας είναι ο επικεφαλής (head) του studio. Σε αυτόν δίνουν αναφορά όλα τα μέλη της ομάδας και κυρίως ο υπεύθυνος προγραμματισμού (lead programmer), ο υπεύθυνος σχεδιασμού (lead designer) και ο υπεύθυνος περιεχομένου (lead artist) του παιχνιδιού. Ο επικεφαλής του studio έχει τη γενική επίβλεψη της ομάδας ανάπτυξης του παιχνιδιού. Ίσως έχει γίνει φανερό από την παραπάνω συζήτηση ότι ουσιαστικά μια ομάδα ανάπτυξης ενός βιντεοπαιχνιδιού αποτελείται από κυρίως τρεις υποομάδες: την ομάδα σχεδιασμού του παιχνιδιού (design), την ομάδα προγραμματισμού (programming) και την ομάδα περιεχομένου (art). Ας τις δούμε αναλυτικά.
{PAGE_BREAK}
Η ομάδα σχεδιασμού
Ξεκινάμε με την ομάδα σχεδιασμού (design) γιατί αυτή είναι που δίνει το σχήμα στο παιχνίδι, ορίζει τους κανόνες και την λογική, σχεδιάζει τις αποστολές του, και πιθανώς γράφει το σενάριο του παιχνιδιού. Ο σχεδιαστής του παιχνιδιού δεν έχει να κάνει απαραίτητα με την τέχνη. Πολλοί σχεδιαστές παιχνιδιών είναι στην πραγματικότητα προγραμματιστές. Ο σχεδιαστής δημιουργεί ένα λειτουργικό κόσμο με καλά ορισμένους κανόνες και αλληλεπιδράσεις μέσα στον οποίο μπορεί να περιηγηθεί ο παίκτης. Γνωστοί σχεδιαστές παιχνιδιών είναι οι: Shigeru Miyamoto (Donkey Kong και παιχνίδια με το Μάριο, η σειρά Zelda), Peter Molyneux (Black & White, Fable), Will Wright (Sims), Warren Spector (Deus Ex) και Sid Meir (Civilisation).
Υπεύθυνος σχεδιασμού (lead designer)
Πολύ σημαντικός ρόλος στην κατασκευή του παιχνιδιού, ο υπεύθυνος σχεδιασμού συντονίζει όλα τα μέλη τη ομάδας σχεδιασμού, και επιβεβαιώνει ότι όλοι εργάζονται πάνω σε ένα κοινό σχέδιο και όραμα. Κάνει καταμερισμό εργασίας στα μέλη της ομάδας, επιβλέπει το αποτέλεσμα και επικοινωνεί το σχέδιο και την εξέλιξη του παιχνιδιού στις άλλες ομάδες. Τέλος βλέποντας το υπο σχεδιασμό παιχνίδι μέσα από τα μάτια του παίκτη, εξασφαλίζει ότι παραμένει ενδιαφέρον και ψυχαγωγικό.
Σχεδιαστής μηχανισμού παιχνιδιού (gameplay mechanics designer)
Μηχανισμό παιχνιδιού (gameplay mechanics) ονομάζουμε όλο το εύρος των κινήσεων που μπορεί να πραγματοποιήσει ο παίκτης κατά την περιήγηση του στον εικονικό κόσμο του παιχνιδιού. Ο σχεδιαστής gameplay βρίσκεται σε επικοινωνία με την ομάδα προγραμματισμού για να επιβεβαιώσει ότι οι κινήσεις που σχεδιάζει είναι υλοποιήσιμες. Παράδειγμα μηχανισμού παιχνιδιού που σχεδιάζει ο σχεδιαστής gameplay είναι η ικανότητα του Prince of Persia να τρέχει κατά μήκος ενός τοίχου για να περάσει ένα χάσμα.
Σχεδιαστής επιπέδου/αποστολής (level designer)
Ο σχεδιαστής ενός επιπέδου παιχνιδιού κατασκευάζει το περιβάλλον του παιχνιδιού και όλες τις προκλήσεις και τα παζλ, τις επιλογές και τις επιπτώσεις που συναντά και αντιμετωπίζει ο παίκτης προκειμένου να ολοκληρώσει το επίπεδο και την αποστολή του. Εξασφαλίζει ότι το παιχνίδι παρέχει μια σωστή ισορροπία πρόκλησης/δυσκολίας ώστε να μπορεί ο παίκτης να ολοκληρώσει την αποστολή επιτυχώς και με ικανοποίηση. Χρησιμοποιεί εργαλεία σχεδιασμού επιπέδου που παρέχει ο προγραμματιστής εργαλείων (βλέπε παρακάτω) ή έτοιμα εργαλεία όπως το Unreal Editor ή CryEngine Editor (αν φυσικά χρησιμοποιείται η ανάλογη μηχανή για την κατασκευή του παιχνιδιού)
Σεναριογράφος (story writer)
Στα περισσότερα παιχνίδια ο σχεδιαστής επιπέδων, παρέχει και μια υποτυπώδη ιστορία στα παιχνίδια. Τα τελευταία χρόνια, όμως, τα studio αρχίζουν να προσλαμβάνουν επαγγελματίες σεναριογράφους για αυτό το ρόλο. Ο σεναριογράφος σχεδιάζει τη αφηγηματική δομή του παιχνιδιού σε συνεννόηση με τον υπεύθυνο σχεδιασμού. Εξασφαλίζει την αλληλεπίδραση στο παιχνίδι και επιβεβαιώνει, με τη βοήθεια του σχεδιαστή επιπέδου, ότι τα στοιχεία της ιστορίας μπορούν πράγματι να υλοποιηθούν με τα διαθέσιμα εργαλεία.
Η ομάδα προγραμματισμού
Ρίχνοντας μια ματιά σε μια αγγελία μιας μεγάλης εταιρείας ανάπτυξης βιντεοπαιχνιδιών για προγραμματιστές για το επόμενο της παιχνίδι, συνήθως βλέπουμε ότι αναζητά πολλών διαφορετικών ειδικοτήτων προγραμματιστές: προγραμματιστή γραφικών, προγραμματιστή τεχνητής νοημοσύνης, προγραμματιστή δικτύου (graphics programmer, AI programmer, network programmer). Το να είσαι (αποδεδειγμένα) καλός προγραμματιστής στην βιομηχανία βιντεοπαιχνιδιών είναι αρκετό. Στα πρώτα βήματα σου τουλάχιστον. Γρήγορα διαφαίνεται όμως ότι για να ανέβεις κλίμακα πρέπει να εξειδικευτείς σε ένα συγκεκριμένο τομέα. Μια ομάδα προγραμματισμού ενός παιχνιδιού αποτελείται από μια πληθώρα ειδικοτήτων. Παρακάτω αναλύουμε τις κυριότερες από αυτές.
Υπεύθυνος προγραμματιστής (Lead programmer)
Άτομο με μεγάλη εμπειρία στον προγραμματισμό βιντεοπαιχνιδιών, ο υπεύθυνος προγραμματιστής επιβλέπει την ομάδα προγραμματισμού του παιχνιδιού, λύνει δύσκολα προβλήματα υλοποίησης και παρέχει την κατεύθυνση που θα πάρει τεχνολογικά η ομάδα. Παραδείγματα γνωστών lead programmers είναι ο John Carmack της id και ο Tim Sweeney της Epic
Προγραμματιστής γραφικών (Graphics programmer)
Το πώς φαίνονται τα μοντέλα στα σχεδιαστικά εργαλεία των καλλιτεχνών (παράδειγμα Maya ή 3D Studio) με το πώς φαίνονται τελικά στο παιχνίδι διαφέρει πολύ. Ο προγραμματιστής γραφικών, συνήθως ένα μείγμα καλλιτέχνη-προγραμματιστή, είναι αυτός που αναλαμβάνει να μεταφέρει τα υλικά, τον φωτισμό και την υφή των μοντέλων όσο πιο πιστά γίνεται στο παιχνίδι. Επίσης συνήθως υλοποιεί και ειδικά εφέ όπως σωματίδια (particles), νερό, ομίχλη κλπ. Απαιτείται καλή γνώση APIs όπως DirectX ή OpenGL και προγραμματισμός επεξεργαστών γραφικών (GPUs) με γλώσσες όπως HLSL ή GLSL.
Προγραμματιστής μηχανής παιχνιδιού (Engine programmer)
Ο προγραμματιστής μηχανής αναπτύσσει την «καρδιά» του παιχνιδιού, το λογισμικό αυτό δηλαδή που αναλαμβάνει να απεικονίσει τα γραφικά στην οθόνη, να δώσει κίνηση στα μοντέλα και να ανιχνεύσει συγκρούσεις μεταξύ αντικειμένων του κόσμου. Στην προσπάθεια αυτή συνεργάζεται στενά με τον προγραμματιστή γραφικών. Αν το παιχνίδι χρησιμοποιεί κάποιο middleware –π.χ. το Havok- για ανίχνευση συγκρούσεων, ο προγραμματιστής μηχανής είναι αυτός που αναλαμβάνει να το ενσωματώσει στο παιχνίδι.
Προγραμματιστής μηχανισμού παιχνιδιού (Gameplay mechanics programmer)
Με βάση τις οδηγίες του σχεδιαστή μηχανισμού παιχνιδιού (βλέπε παραπάνω) , ο προγραμματιστής αυτός υλοποιεί κάθε κίνηση που μπορεί να κάνει ο παίκτης, αλλά και οι υπόλοιποι χαρακτήρες και αντικείμενα, στο παιχνίδι.
Προγραμματιστής τεχνητής νοημοσύνης (AI programmer)
Ο προγραμματιστή τεχνητής νοημοσύνης είναι υπεύθυνος για την συμπεριφορά των χαρακτήρων σε ένα παιχνίδι. Κάνει τα αντικείμενα του κόσμου να αντιδρούν με «έξυπνο»τρόπο ανάλογα με τις ενέργειες του χρήστη. Παράδειγμα, η συμπεριφορά των συντρόφων του παίκτη σε ένα squad-based παιχνίδι, το πόσο ικανοί είναι το προφυλάσσονται και να ενεργούν μόνοι τους, είναι αποτέλεσμα της δουλειάς του προγραμματιστή τεχνητής νοημοσύνης.
{PAGE_BREAK}
Προγραμματιστής δικτύου (Network programmer)
Τα περισσότερα παιχνίδια τελευταίας γενιάς (είτε σε PC είτε σε κονσόλα) χρησιμοποιούν κάποιας μορφής δικτυακή επικοινωνία, είτε για multiplayer παιχνίδι, είτε για να κατεβάσουν έξτρα περιεχόμενο είτε απλά για να ανεβάσουν το σκορ και τις επιδόσεις μας σε ένα κεντρικό server, όπως στο Xbox Live. Ο προγραμματιστής δικτύου είναι υπεύθυνος για την ανάπτυξη και καλή λειτουργία των υπηρεσιών αυτών.
Προγραμματιστής εργαλείων (Tools programmer)
Από τους σπουδαιότερους ρόλους στην ομάδα ανάπτυξης, ο προγραμματιστής εργαλείων αναλαμβάνει να κατασκευάσει λογισμικό που θα μετασχηματίσει το περιεχόμενο που αναπτύσσουν οι καλλιτέχνες (το οποίο μπορεί να είναι π.χ. είναι σε φορμά Maya για τους modelers) σε μορφή που μπορεί να το χρησιμοποιηθεί στο παιχνίδι. Παρέχει επίσης editors που μπορούν να χρησιμοποιήσουν οι σχεδιαστές για να σχεδιάσουν τον τρισδιάστατο κόσμο και να τοποθετήσουν όλα τα αντικείμενα και όλες τις λειτουργίες σε αυτόν. Τέλος, φτιάχνει και τα plugin για προγράμματα όπως το Maya ώστε να διευκολύνει την εργασία των καλλιτεχνών.
Insider’s Story
Για το παιχνίδι Kameo: Elements of Fire για το Xbox360, ο καλλιτέχνης μπορούσε απλά να επισημάνει στην Maya ποια τμήματα της γεωμετρίας του επιπέδου (background) θα έχουν γρασίδι μέσα στο παιχνίδι. Ήταν δουλειά του προγραμματιστή γραφικών να υλοποιήσει το γρασίδι και να το παραμετροποιήσει. Έφτιαξα λοιπόν ένα plugin στην Maya που επέτρεπε στο καλλιτέχνη να δημιουργήσει και να παραμετροποιήσει το γρασίδι μέσα από την Maya, το οποίο έπειτα μεταφερόταν αυτόματα στο παιχνίδι παρακάμπτοντας τον προγραμματιστή γραφικών.
Προγραμματιστής ήχου (Audio programmer)
Ο προγραμματιστής ήχου κατασκευάζει το κομμάτι του παιχνιδιού που ασχολείται με αναπαραγωγή ήχου, δηλαδή μουσικής και ηχητικών εφφέ.
Προγραμματιστής interface (Interface programmer)
Σε συνεργασία με τον σχεδιαστή interface, ο προγραμματιστής αυτός υλοποιεί όλη την αλληλεπίδραση του παιχνιδιού με το χρήστη, τα μενού και τις επιλογές του, το head-up display αν υπάρχει στο παιχνίδι και γενικά όλες της πληροφορίες που ρέουν από το παιχνίδι προς το παίκτη. Εργαλεία δουλειάς ενός μέλους της ομάδας προγραμματισμού είναι ένα καλό περιβάλλον ανάπτυξης σε C/C++, όπως Visual Studio, ένας υπολογιστής και το επονομαζόμενο development kit. Το development kit είναι μια ειδική (και πανάκριβη) έκδοση της κονσόλας που έχει τα ίδια χαρακτηριστικά αλλά μπορεί να τρέξει προγράμματα που φτιάχνει ο προγραμματιστής στον υπολογιστή του μέσω δικτύου (σε αντίθεση με τις κονσόλες εμπορίου που τρέχει τα παιχνίδια μόνο από DVD ή από το σκληρό δίσκο).
Insider’s Story
Τo πρώτο development kit που διέθεσε η Microsoft για το Xbox360 ήταν ένα τεράστιο G5 της Apple, με επεξεργαστή PowerPC, 1GB RAM και κάρτα γραφικών ATI DirectX 9.0.
Στο δεύτερο μέρος ολοκληρώνουμε την περιήγηση μας στην ομάδα ανάπτυξης ενός παιχνιδιού με την περιγραφή της υποομάδας ανάπτυξης περιεχομένου (Art) του παιχνιδιού καθώς και ανεξάρτητων ομάδων όπως Έρευνας & Τεχνολογίας (Research & Development) και Ελέγχου και Πιστοποίησης καλής λειτουργίας (Testing & Quality Assurance) που είναι βασικές για την επιτυχημένη και έγκαιρη δημιουργία ενός παιχνιδιού.
Κώστας Αναγνώστου
{nomultithumb}