Εργασία στα Γραφικά Υπολογιστών Ακαδημαϊκό Έτος 2016-17 Asteroid Blaster Εκφώνηση Να δημιουργήσετε ένα διαδραστικό παιχνίδι τύπου topdown scroller shoot-em up σε OpenGL 3.3 με χρήση shaders στο οποίο ο χρήστης ελέγχει ένα διαστημόπλοιο και να προσπαθεί να επιβιώσει σε ένα πεδίο μετεωριτών όση ώρα περισσότερη μπορεί, είτε αποφεύγοντας τους μετεωρίτες είτε καταστρέφοντάς τους με τα όπλα του σκάφους (δείτε το σχετικό video). Όταν ένας μετεωρίτης προσκρούσει στο σκάφος, αυτό καταστρέφεται και το παιχνίδι τερματίζει. Με την κίνηση του σκάφους, αποφεύγετε τους μετεωρίτες, ενώ μπορείτε να εξαπολύετε ριπές που αν πετύχουν έναν μετεωρίτη, αυτός καταστρέφεται και δεν αποτελεί πλέον κίνδυνο για εσάς. Οι μετεωρίτες έρχονται διαρκώς προς το σκάφος από την πάνω πλευρά της οθόνης (-Ζ άξονας) και ο καθένας έχει ανεξάρτητη περιστροφή (άξονα περιστροφής και ταχύτητα) και αρχική θέση εκκίνησης πάνω στο επίπεδο ΧΖ (μπροστά από εσάς και εκτός του οπτικού σας πεδίου). Παρακολουθείτε τη δράση από ψηλά και ακολουθείτε σε γενικές γραμμές τη θέση του σκάφους, ενώ είστε ελεύθεροι να δώσετε μικρούς βαθμούς ελευθερίας στο παρατηρητή για ομαλότερη κίνηση. Κάτω από το σκάφος βλέπετε το έδαφος ενός άγονου πλανήτη να «τρέχει» ατέρμονα προς το μέρος σας και παράλληλα με το επίπεδο που εξελίσσεται η δρ Ο Τρισδιάστατος Κόσμος Για την εργασία σας δίνεται ένα σύνολο από μοντέλα τα οποία είναι αυτά που χρειάζεστε για να συνθέσετε το χώρο. Όποιος θέλει, μπορεί να προσθέσει και δικά του μοντέλα στο υπάρχον ρεπερτόριο. Το κάθε μοντέλο δίνεται σε μορφή OBJ και συνοδεύεται από το αντίστοιχο MTL αρχείο που περιγράφει τις ιδιότητες των υλικών και ποια textures χρησιμοποιεί. Η αρχή των αξόνων και ο προσανατολισμός του κάθε μοντέλου απεικονίζονται στη συνέχεια. Κάθε μοντέλο δύναται να χρησιμοποιεί παραπάνω από ένα υλικά και κάθε υλικό συνοδεύεται από τις ακόλουθες εικόνες υφής σε μορφή TGA (RGB/RGBA bpp):
Εικόνα diffuse χρώματος (albedo map). Αντιστοιχεί στο k d του υλικού (RGB δεδομένα). Εικόνα normal map (tangent-space normal map). Κάθε pixel (RGB) αντιστοιχεί στις τοπικές συντεταγμένες του κανονικού διανύσματος ενός σημείου σε εφαπτομενικό χώρο. Τα μοντέλα σας περνάνε ως vertex attribute το εφαπτομενικό διάνυσμα, οπότε από αυτό μαζί με το κανονικό διάνυσμα του σημείου μπορείτε να υπολογίσετε και το συνεφαπτόμενο διάνυσμα και να κατασκευάσετε έτσι το τοπικό σύστημα συντεταγμένων σε κάθε σημείο. Οι συντεταγμένες του τοπικού φορτωμένου κανονικού διανύσματος από το texture προκύπτει ως (x,y,z) = (2*R-1, 2*G-1, B). Η μετατροπή του διανύσματος σε συντεταγμένες παρατηρητή (eye-space coordinates -ECS) γίνεται με βάση τη θεωρία. Το σκάφος. Η κίνηση του σκάφους γίνεται πάνω στο επίπεδο ΧΖ και μπορείτε να την περιορίσετε προαιρετικά μόνο στον άξονα Χ. Σε κάθε περίπτωση, η ταχύτητα του σκάφους πρέπει να είναι περιορισμένη σε σχέση με την ταχύτητα των μετεωριτών ενώ η κίνηση θα πρέπει να ελέγχεται με το ποντίκι ή τα πλήκτρα. Σε ηρεμία, μπορείτε να θεωρήσετε ότι σε σχέση με το πεδίο μετεωριτών το σκάφος είναι ακίνητο και μόνο κινείται όταν το επιταχύνετε εσείς. Η κίνηση επίσης του σκάφους πρέπει να είναι φραγμένη σε στενά περιθώρια γύρω από την αρχική θέση του σκάφους (στο (0,0,0)). Το μοντέλο του σκάφους με τον προσανατολισμό και τις διαστάσεις του.
Το έδαφος αποτελείται από ένα μεγάλο πλακίδιο με κρατήρες που σας δίνεται έτοιμο και κεντραρισμένο ως προς τους XZ άξονες στο μηδέν, ενώ ήδη βρίσκεται τοποθετημένο σε αρνητικό ύψος, όπως φαίνεται στην εικόνα και το video. Για να αποδώσετε τη σχετική και αέναη κίνηση του σκάφους ως προς το διαστημόπλοιο, θα πρέπει να έχετε 2-3 πολλαπλά αντίγραφα του ίδιου πλακιδίου και να τα μετακινείτε προς τον +Ζ άξονα. Όταν ένα από αυτά βγει με ασφάλεια εκτός οπτικού πεδίου (λαμβάνοντας υπόψη οποιαδήποτε σχετική μετακίνηση του σκάφους για την αποφυγή των μετεωριτών) τότε του επαναπροσδιορίζουμε τη μετακίνηση ώστε να μπει μπροστά μας και μετά από τα άλλα πλακίδια, εναλλάσσοντάς τα έτσι κυκλικά κάτω από το σκάφος. Το μοντέλο του εδάφους με τον προσανατολισμό και τις διαστάσεις του. Οι μετεωρίτες. Σας δίνονται 3 διαφορετικά μοντέλα μετεωριτών για να δημιουργήσετε παραλλαγές τους. Κατά τη «γέννηση» (spawning) ενός μετεωρίτη, του προσδιορίζετε την κλίμακα, την αρχική γωνία περιστροφής, καθώς και τον άξονα και την ταχύτητα περιστροφής. Οι μετεωρίτες πρέπει να βγαίνουν σε τυχαία θέση στον άξονα Χ και τυχαία χρονική στιγμή με μια πιθανότητα και ένα ρυθμό εμφάνισης που καθορίζετε εσείς και που αντιστοιχεί στο βαθμό δυσκολίας του παιχνιδιού. Συγκεκριμένα, αν rr mm είναι ο ρυθμός εμφάνισης μετεωριτών ανά δευτερόλεπτο (π.χ. 2 μετεωρίτες/s), σε ένα καρέ όπου έχει μεσολαβήσει χρόνος Δt από το προηγούμενο καρέ o αριθμός των μετεωριτών που θα πρέπει να δημιουργηθούν και να τοποθετηθούν στο χώρο είναι: NN mm = rr mm ΔΔttξξ, ξ τυχαίος αριθμός ομοιόμορφα κατανεμημένος στο διάστημα [0,1].
Το μοντέλο του πρώτου μετεωρίτη. Το μοντέλο του δεύτερου μετεωρίτη.
Το μοντέλο του τρίτου μετεωρίτη. Εκρήξεις, Ριπές και Jet. Τα αντικείμενα που φωτοβολούν, μπορείτε να τα κατασκευάσετε μόνοι σας χρησιμοποιώντας απλά ορθογώνια παραλληλόγραμμα και αναθέτοντάς τους τις υφές που σας δίνονται ή άλλες. Για να εμφανιστούν φωτεινές αυτές οι επιφάνειες, πριν τις σχεδιάσετε ενεργοποιήστε το blending και βάλτε ως blending function GL_ONE και GL_ONE στα ορίσματα source και destination blending factor. Επιπλέον, θα χρειαστεί όσο σχεδιάζετε τέτοιες επιφάνειες να απενεργοποιήσετε την εγγραφή αποτελεσμάτων στον depth buffer (με την εντολή gldepthmask()). Οι υφές που σας δίνονται είναι οι ακόλουθες: Εικόνες υφής για τα φωτεινά τμήματα γεωμετρίας
Τρόπος να μοντελοποιηθούν τα φωτεινά αντικείμενα ώστε να φαίνονται καλά από διάφορες οπτικές γωνίες. Για να φαίνονται καλά τα εφέ από διάφορες γωνίες, χρησιμοποιήστε πολλαπλά ορθογώνια διασταυρούμενα μεταξύ τους. Για να φαίνονται και από τις 2 πλευρές οι απεικονιζόμενες υφές, απλά απενεργοποιείστε το back face culling κατά τη σχεδίασή τους. Ανίχνευση συγκρούσεων Για να ανιχνεύσετε τις συγκρούσεις μεταξύ α) μετεωριτών και σκάφους, β) βαλών και μετεωριτών, χρησιμοποιείστε απλές σχέσεις μέτρησης αποστάσεων μεταξύ σφαιρών με κέντρο το κάθε αντικείμενο και ακτίνα τη μισή διαγώνιό του. Δύο σχήματα με ακτίνες ρρ 1 και ρρ 2 και κέντρα cc 1 και cc 2 βρίσκονται σε επαφή αν και μόνο αν: cc 1 cc 2 <ρρ 1 + ρρ 2. Εκτέλεση και παράδοση Μπορείτε να εργασθείτε σε ομάδες 1-2 ατόμων. Αν σχηματίσετε ομάδες των 3 ατόμων, τότε οι επιπρόσθετες λειτουργίες είναι υποχρεωτικές (βαθμός max 3). Χρησιμοποιείστε τη φαντασία σας και επεκτείνετε τα δεδομένα της εργασίας και τους κανόνες του παιχνιδιού. Για παράδειγμα, μπορείτε να εισάγετε Power ups για πολλαπλές δέσμες βολίδων, μεγαλύτερη ταχύτητα, έκρηξη και καταστροφή όλων των υπαρχόντων μετεωριτών, ασπίδα προστασίας κλπ. Δημιουργείστε ή/και ενσωματώστε δικά σας μοντέλα για τις παραπάνω λειτουργίες, βάλτε αντικείμενα πάνω στο έδαφος κλπ. Η δημιουργική διάθεση θα εκτιμηθεί. Η παράδοση και ταυτόχρονη εξέταση των εργασιών θα γίνει ακριβώς μετά το πέρας των εξετάσεων Φεβρουαρίου.
Βαθμολόγηση Η εργασία είναι αρθρωτή με την έννοια ότι οι λειτουργίες που ζητούνται είναι προσθετικές και βαθμολογούνται αυτόνομα, σύμφωνα με τον παρακάτω πίνακα: Κριτήριο Περιγραφή Βαθμός Σύνθεση και κίνηση σκηνής Με χρήση μετασχηματισμών θα πρέπει να δημιουργήσετε όλα τα απαραίτητα δυναμικά στοιχεία του περιβάλλοντος τα οποία θα πρέπει να κινούνται και να ανανεώνονται σωστά. Χειρισμός, προβολή και διαδραστική λειτουργία Βασικός φωτισμός και φωτοσκίαση Σκιά Μετακίνηση του σκάφους, βολές και ανίχνευση συγκρούσεων, μετακίνηση της κάμερας. Σύνθετη και ομαλή κίνηση στο σκάφος και την κάμερα είναι επιθυμητά. Τοποθέτηση 1 σημειακής πηγής φωτισμού στο χώρο και φωτισμός της σκηνής από αυτή. Από τα μοντέλα που δίνονται, να χρησιμοποιηθεί τουλάχιστο η εικόνα χρώματος για τον προσδιορισμό του albedo (diffuse reflectivity) μέσα στο shader σας. Ο shader θα πρέπει να υποστηρίζει και specular φωτισμό. Προσθήκη shadow map και έλεγχος σκιάς για την πηγή σας με υλοποίηση PCF σύμφωνα με το εργαστήριο. 0.8 1.0 0.6 0.6 Σύνολο: 3.0 Επιπρόσθετες λειτουργίες: Normal maps, post processing effects όπως defocus blur (depth of field), gamma correction / color grading και color bloom. < +1.0 Καλή επιτυχία.