Δθμιουργία, μελζτθ και βελτιςτοποίθςθ φωτορεαλιςτικϊν απεικονίςεων πραγματικοφ χρόνου με χριςθ προγραμματιηόμενων επεξεργαςτϊν γραφικϊν

Σχετικά έγγραφα
ΟΙ ΜΙΚΡΟΜΕΣΑΙΕΣ ΕΠΙΧΕΙΡΗΣΕΙΣ ΣΤΗΝ ΕΛΛΑΔΑ ΚΑΙ Ο ΚΛΑΔΟΣ ΤΗΣ ΥΠΟΔΗΣΗΣ

Πρόταςθ - ζκκεςθ για βελτίωςθ των ςυνκθκών διαβίωςθσ των ηώων του Ζωολογικοφ Κιπου Θεςςαλονίκθσ

237 Χημικών Μηχανικών Θεσσαλονίκης

ΤΕΙ ΚΑΛΑΜΑΤΑΣ. ΑΡΓΥΡΗ ΔΗΜΗΤΡΑ Σχολής Διοίκησης και Οικονομίας Τμήμα Χρηματοοικονομικής και Ελεγκτικής Επιστήμης Εισηγητής :Λυγγίτσος Αλέξανδρος

ΕΙΔΙΚΟ ΣΧΕΔΙΟ ΔΙΑΧΕΙΙΣΗΣ ΑΝΘΩΡΙΝΩΝ ΑΡΩΛΕΙΩΝ (ΣΔΑΑ)

Σα κφρια ςθμεία και οι βαςικζσ αλλαγζσ του νζου φορολογικοφ νομοςχεδίου:

Η Μ Ε Ρ Ο Μ Η Ν Ι Α ΠΕΜΠΤΗ 13 ΙΟΥΝΙΟΥ ώρα 10:00 π.μ. ΤΟΠΟΣ ΔΙΕΝΕΡΓΕΙΑΣ : ΑΤΕΙ- ΘΕΣΣΑΛΟΝΙΚΗΣ -ΣΙΝΔΟΣ-ΘΕΣ/ΝΙΚΗΣ

ΕΙΗΓΗΗ ΣΟΤ Δ.. ΣΗ ΤΚΕΨΗ ΜΕ ΣΑ Δ.. ΣΩΝ ΕΝΩΕΩΝ ΣΙ 10 ΙΑΝΟΤΑΡΙΟΤ 2016

Καλζσ Πρακτικζσ ςτην Προςχολική Εκπαίδευςη ΙIΙ.A

ΕΘΝΙΚΟ ΚΕΝΤΡΟ ΚΟΙΝΩΝΙΚΩΝ ΕΡΕΥΝΩΝ ΙΝΣΤΙΤΟΥΤΟ ΑΣΤΙΚΗΣ ΚΑΙ ΑΓΡΟΤΙΚΗΣ ΚΟΙΝΩΝΙΟΛΟΓΙΑΣ ΟΜΑΔΑ ΠΕΡΙΒΑΛΛΟΝΤΟΣ

ΕΘΝΙΚΟ ΚΕΝΤΡΟ ΚΟΙΝΩΝΙΚΩΝ ΕΡΕΥΝΩΝ ΙΝΣΤΙΤΟΥΤΟ ΑΣΤΙΚΗΣ ΚΑΙ ΑΓΡΟΤΙΚΗΣ ΚΟΙΝΩΝΙΟΛΟΓΙΑΣ ΟΜΑΔΑ ΠΕΡΙΒΑΛΛΟΝΤΟΣ

Ι ΡΥΜΑ ΚΡΗΤΗΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ

ΔΙΑΚΗΡΥΞΗ. ΠΡΟΧΕΙΡΟΥ ΔΙΑΓΩΝΙΣΜΟΥ ΓΙΑ ΤΗΝ ΠΡΟΜΗΘΕΙΑ «ΕΞΟΠΛΙΣΜΟΥ ΑΙΜΟΔΟΣΙΑΣ» προϋπολογιζόμενης δαπάνης ,00 συμπεριλαμβανομένου Φ.Π.Α.

Καθηγητές στο μικροσκόπιο, ιδιώτες στην έρευνα. Ο νέος νόμος-πλαίσιο για τα πανεπιστήμια. Εφημερίδα: ΤΟ ΒΗΜΑ Ρεπορτάζ: ΜΑΡΝΥ ΠΑΠΑΜΑΤΘΑΙΟΥ

Η Διαρκισ Επίγνωςθ ςτθν Κακθμερινι Ζωι

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΑΒΑΛΑΣ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ & ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΛΟΓΙΣΤΙΚΗΣ

Ιςοπεδϊνονται τα αςφαλιςτικά μασ δικαιϊματα με τθν πρόταςθ τθσ κυβζρνθςθσ για το Αςφαλιςτικό

ΠΡΑΚΣΙΚΟ ΟΔΗΓΟ ΓΙΑ ΣΙ «ΜΙΚΡΕ»ΣΟΤΡΙΣΙΚΕ ΕΠΙΧΕΙΡΗΕΙ

«Ο συγγραφέας στα σύγχρονα ΜΜΕ: ο λόγος και η απήχηση του»

ΜΟΥΣΕΙΟ ΚΑΠΝΟΥ ΚΑΒΑΛΑΣ ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ

ΤΓΓΡΑΦΘ ΕΠΙΣΘΜΟΝΙΚΘ ΜΕΛΕΣΘ. ΜΕΘΟΔΟΛΟΓΙΑ ΚΟΙΝΩΝΙΚΘ ΖΡΕΤΝΑ & ΚΟΙΝΩΝΙΚΑ ΠΡΟΒΛΘΜΑΣΑ Διδάςκοντεσ: Χρ. Σςουραμάνθσ Ι. Γουςζτθ Ακαδ.

Αυτονομία Θζρμανςθσ Παλιϊν Πολυκατοικιϊν

ΑΓΚΙΝΑΡΑ ι ΑΓΓΙΝΑΡΑ. Καλλιεργθτικζσ τεχνικζσ

ΣΥΜΒΑΣΗ ΔΠΑ/ΕΠ-6489/2012

«ΣΧΕΣΗ ΣΩΜΑΤΟΣ ΚΑΙ ΨΥΧΗΣ ΣΤΟΝ ΠΛΑΤΩΝΑ ΚΑΙ ΤΟΝ ΑΡΙΣΤΟΤΕΛΗ»

ΠΟΛ 1065 Δ/ΝΗ ΦΟΡΟΛΟΓΙΑ ΕΙΟΔΗΜΑΣΟ (Δ12)

Γραφικά Υπολογιστών Εισαγωγή

323 Φυτικής Παραγωγής Γεωπονικού Παν. Αθήνας

ΔΙΑΔΟΣΗ ΘΕΡΜΟΤΗΤΑΣ Φυσική Β' Γυμνασίου. Επιμέλεια: Ιωάννης Γιαμνιαδάκης

Διοίκηση & Γραφεία 2. Επιστολή του Προέδρου 4. Μήνυμα από την Αν. Γενική Διευθύντρια 5. Σύσταση και αρμοδιότητες 6. Αναπτυξιακό Πρόγραμμα 7

ΑΝΑΔΟΧΟΣ: Τ.Ε.Ι. ΚΑΒΑΛΑΣ. 1º ΠΑΡΑΔΟΤΕΟ (τροποποιημένο)

Καλές Πρακτικές Πρόληψης και Αντιμετώπισης Ενδοσχολικής Βίας- Σχολική Διαμεσολάβηση

Κανονιςμόσ Αςφάλειασ Χώρων Εργαςίασ & Τπολογιςτικών υςτημάτων Κτηρίου Κεντρικήσ Διοίκηςησ Προςκοπικό Μέγαρο «Αντώνησ Μπενάκησ»

Όταν πριν από μερικά χρόνια οι άνθρωποι. Εξειδικευμένη εκπαίδευση ΜΙΑ ΠΡΩΤΟΒΟΥΛΙΑ ΠΟΥ ΑΞΙΖΕΙ ΤΗΝ ΣΤΗΡΙΞΗ ΟΛΩΝ. Εκπαίδευση

Ε.Ε. Π α ρ.ι(i), Α ρ.3834, 8/4/2004 Ο ΠΕΡΙ ΑΣΤΥΝΟΜΙΑΣ ΝΟΜΟΣ ΤΟΥ 2004 ΚΑΤΑΤΑΞΗ ΑΡΘΡΩΝ ΜΕΡΟΣ Ι - ΕΙΣΑΓΩΓΗ ΜΕΡΟΣ ΙΙ - ΟΡΓΑΝΩΣΗ ΚΑΙ ΔΙΟΙΚΗΣΗ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ

ΚΥΚΛΟΦΟΡΙΚΟΣΥΣΤΗΜΑ. Καρβουντζή Ηλιάνα Βιολόγος

ΑΠΟΦΑΣΗ ΤΗΣ Δ.Ε. ΤΟΥ ΤΕΕ

ΤΕΙ ΗΠΕΙΡΟΥ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΛΟΓΙΣΤΙΚΗΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ

Δεσ τθ διαφιμιςθ ζξυπνα μζςα ςτθν τάξθ. Χαρίκλεια Σερηθτάνου Δαςκάλα, Τπεφκυνθ Πολιτιςτικϊν Θεμάτων

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ Πρώτες βοήθειες και αντιλήψεις του πληθυσμού στους Νομούς Χανίων, Ηρακλείου, Λασιθίου και Μεσσηνίας

ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 4. Δημιουργήθηκε από τη Μαρία Καλαματιανού Ιανουάριος 2012.

Διαμόρφωση της συνεργατικής τάξης Ένα παράδειγμα από ένα Δημοτικό Σχολείο στη Θεσσαλονίκη

ΤΠΟΜΝΗΜΑ ΘΕΕΩΝ ΚΑΙ ΠΡΟΣΑΕΩΝ ΣΟΤ ΕΜΠΟΡΙΚΟΤ ΚΑΙ ΒΙΟΜΗΧΑΝΙΚΟΤ ΕΠΙΜΕΛΗΣΗΡΙΟΤ ΠΕΙΡΑΙΩ ΓΙΑ ΣΗΝ ΑΝΑΜΟΡΦΩΗ ΣΟΤ ΦΟΡΟΛΟΓΙΚΟΤ ΤΣΗΜΑΣΟ

Όμιλος Λογοτεχνίας. Δράκογλου Αναστασία, Κιννά Πασχαλίνα

ΧΛΟΥΜ. Ρρόςωπα: ΡΩΤΘ ΡΑΞΘ (Σε ζνα επαγγελματικό γραφείο)

ΠΑΡΑΡΤΗΜΑ ΤΜΗΜΑΤΑ ΕΚΘΕΣΗΣ ΑΥΤΟΑΞΙΟΛΟΓΗΣΗΣ ΤΟΥ ΙΔΡΥΜΑΤΟΣ ΠΟΥ ΘΑ ΠΡΕΠΕΙ ΝΑ ΣΥΜΠΛΗΡΩΘΟΥΝ ΑΠΟ ΤΑ ΤΜΗΜΑΤΑ ΤΟΥ ΕΚΠΑ

ΕΝΤΥΠΟ ΕΛΕΓΧΟΥ ΚΑΙ ΕΓΚΡΙΣΗΣ ΑΠΟ ΤΗΝ ΥΠΗΡΕΣΙΑ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ ΠΟΙΟΤΗΤΑΣ ΜΕΛΕΤΗΣ (ΠΠM)

ΟΣΤΑ & ΣΚΕΛΕΤΙΚΟ ΣΥΣΤΗΜΑ

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΥΠΟΥΡΓΕΙΟ ΠΑΡΑΓΩΓΙΚΗΣ ΑΝΑΣΥΓΚΡΟΤΗΣΗΣ, ΠΕΡΙΒΑΛΛΟΝΤΟΣ & ΕΝΕΡΓΕΙΑΣ

ΑΠΟΣΠΑΣΜΑ ΠΡΑΚΤΙΚΟΥ Έκτακτη-Κατεπείγουσας Συνεδρίασης Δημοτικού Συμβουλίου Αιγιαλείας 26 Οκτωβρίου 2015

Θέµα : Κατάρτιση προκήρυξης έξι (6) θέσεων για Ευρωπαϊκά Προγράµµατα περιόδου ΑΠΟΦΑΣΗ µε αριθµό 61/2013

Επιμελητής: Βαΐτσης Ευάγγελος Α.Μ.: 9357

ANAΡΤΗΤΕΑ ΣΤΟ ΔΙΑΔΙΚΤΥΟ ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΕΙΔΙΚΟΣ ΛΟΓΑΡΙΑΣΜΟΣ ΚΟΝΔΥΛΙΩΝ ΕΡΕΥΝΑΣ

Δείκτησ Αξιολόγηςησ 4.2: Σχζςεισ του ςχολείου με γονείσ και ςυνεργαςίεσ με εκπαιδευτικοφσ-κοινωνικοφσ φορείσ και φορείσ ΕΑΕ

ΑΠΑΝΣΗΕΙ ΣΟ ΠΡΟΣΕΙΝΟΜΕΝΟ ΘΕΜΑ ΝΕΟΕΛΛΗΝΙΚΗ ΓΛΩΑ Γ ΕΠΑΛ

ΟΙΚΟΝΟΜΙΚΗ ΚΡΙΣΗ ΚΑΙ ΤΡΑΠΕΖΙΚΟ ΣΥΣΤΗΜΑ

ΕΤΗΣΙΑ ΟΙΚΟΝΟΜΙΚΗ ΕΚΘΕΣΗ. Περιόδου από 1 η Ιανουαρίου έως 31 η Δεκεμβρίου 2010

Αριθμός αποφάσεως 5928/2010 ΤΟ ΠΟΛΥΜΕΛΕΣ ΠΡΩΤΟΔΙΚΕΙΟ ΠΕΙΡΑΙΑ (Διαδικασία Εκούσιας Δικαιοδοσίας)

ΕΝΤΟΛΕΑΣ: ΕΞΕΤΑΖΟΜΕΝΟΣ ΠΛΗΘΥΣΜΟΣ:

Θέμα: «Απόφαση Δημάρχου για τον ορισμό Αντιδημάρχων & Μεταβίβαση αρμοδιοτήτων του (άρθρο 59)» ΑΠΟΦΑΣΗ 4 Ο Δήμαρχος Παγγαίου

ΩΡΑΡΙΟ ΕΡΓΑΣΙΑΣ ΣΤΟΝ ΤΡΑΠΕΖΙΚΟ ΤΟΜΕΑ

Βουλευτικές Εκλογές 2011

ΙΚΑΙΟΛΟΓΗΤΙΚΑ ΓΙΑ ΤΗΝ ΜΕΤΕΓΓΡΑΦΗ ΕΛΛΗΝΑ ΠΟ ΟΣΦΑΙΡΙΣΤΗ

Το σχολείο πρέπει να ικανοποιεί με τα ωράριά του το πρόγραμμα των γονέων.

ΑΝΩΤΑΤΟ ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΗΠΕΙΡΟΥ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΧΑΪΔΑΡΗΣ ΧΡ. ΝΙΚΟΛΑΟΣ ΑΜ:6805. Εισηγητής: Σωτηρόπουλος Ιωάννης

ΕΝΟΤΗΤΑ 5 η OUTLOOK EXPRESS II ΕΙΣΑΓΩΓΗ

"ΤΟ ΞΥΛΟ ΣΤΙΣ ΔΟΜΙΚΕΣ ΚΑΤΑΣΚΕΥΕΣ: ΘΕΜΑΤΑ ΥΓΡΑΣΙΑΣ ΚΑΙ ΑΝΙΣΟΤΡΟΠΙΑΣ, ΒΕΛΤΙΣΤΗ ΧΡΗΣΗ ΚΑΙ ΜΕΤΡΑ ΠΡΟΣΤΑΣΙΑΣ ΤΩΝ ΞΥΛΙΝΩΝ ΚΑΤΑΣΚΕΥΩΝ A

MYKHNAΪΚΗ ΚΑΙ ΟΜΗΡΙΚΗ ΕΠΟΧΗ

8 Μάρτη. Η βία κατά των γυναικών

Από το ξεκίνημά του ο ΤΙΤΑΝ εκφράζει

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΑΡΙΘΜΟΣ ΜΕΛΕΤΗΣ: 58/ 2014 ΝΟΜΟΣ ΘΕΣΠΡΩΤΙΑΣ ΔΗΜΟΣ ΗΓΟΥΜΕΝΙΤΣΑΣ Δ/ΝΣΗ ΤΕΧΝΙΚΩΝ ΥΠΗΡΕΣΙΩΝ ΜΕΛΕΤΗ

«ΑΡΤΕΜΙΣ» ΥΠΟΥΡΓΕΙΟ ΕΡΓΑΣΙΑΣ, ΚΟΙΝΩΝΙΚΗΣ ΑΣΦΑΛΙΣΗΣ & ΚΟΙΝΩΝΙΚΗΣ ΑΛΛΗΛΕΓΓΥΗΣ ΣΩΜΑ ΕΠΙΘΕΩΡΗΣΗΣ ΕΡΓΑΣΙΑΣ

Καποδίστριας Ι: Η περίπτωση του Νομού Λασιθίου, ήμος Νεάπολης, Κρήτη. Πως η διοικητική οργάνωση συμβάλλει στην ανάπτυξη.

«Δημιουργικά Εργαστήρια Νέων» Θέμα: Καταγραφή/Αφομοίωση βιωμάτων

ΣΥΝΕΝΤΕΥΞΗ ΣΤΗΝ ΕΦΗΜΕΡΙΔΑ «ΚΡΗΤΙΚΗ ΕΝΗΜΕΡΩΣΗ» ΝΟΕΜΒΡΙΟΣ 2005

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΣΧΟΛΗ ΕΠΙΣΤΗΜΩΝ ΤΗΣ ΔΙΟΙΚΗΣΗΣ ΤΜΗΜΑ ΝΑΥΤΙΛΙΑΣ ΚΑΙ ΕΠΙΧΕΙΡΗΜΑΤΙΚΩΝ ΥΠΗΡΕΣΙΩΝ

ΛΥΚΕΙΟ ΣΟΛΕΑΣ Σχολική χρονιά

ΑΠΟΣΠΑΣΜΑ ΠΡΑΚΤΙΚΟΥ Τακτικής Συνεδρίασης Συμβουλίου της Δημοτικής Κοινότητας Αιγίου του Δήμου Αιγιαλείας 21 Ιανουαρίου 2014

Συνέντευξη με την συγγραφέα Μαριλίτα Χατζημποντόζη!

ΣΥΖΗΤΗΣΗ ΝΟΜΟΣΧΕΔΙΟΥ ΥΠ.ΓΕΩΡΓΙΑΣ

PI0808 / Διάγραμμα 1

ΑΠΟΣΠΑΣΜΑ. Από τα πρακτικά της με αριθμό 13ης/2013, συνεδρίασης του Περιφερειακού Συμβουλίου την Τρίτη 9 Ιουλίου 2013 στην Κέρκυρα με τηλεδιάσκεψη.

Λογοτεχνία Β Λυκείου. Αγάθη Γεωργιάδου

ΜΕΛΕΤΗ ΣΚΟΠΙΜΟΤΗΤΑΣ ΑΝΕΓΕΡΣΗΣ ΚΑΙ ΕΚΜΕΤΑΛΛΕΥΣΗΣ ΣΥΓΚΡΟΤΗΜΑΤΟΣ ΠΟΛΥΤΕΛΩΝ ΕΞΟΧΙΚΩΝ ΚΑΤΟΙΚΙΩΝ

Τεχνικά χαρακτηριστικά

ΕΘΝΙΚΗ ΣΥΝΟΜΟΣΠΟΝΔΙΑ ΕΛΛΗΝΙΚΟΥ ΕΜΠΟΡΙΟΥ ΔΕΛΤΙΟ ΤΥΠΟΥ

Οι ιοί και οι ιογενείς λοιμώξεις του αναπνευστικού συστήματος στα παιδιά

ΕΡΓΑΣΙΑ ΤΕΧΝΟΛΟΓΙΑΣ «ΚΑΤΟΙΚΙΔΙΑ ΖΩΑ»

3. Βιτσιλάκη Χ., Γουβιάς Δ. (2007). ΣΧΟΛΕΙΟ ΚΑΙ ΔΟΥΛΕΙΑ: Μία εμπειρική διερεύνηση της εφηβικής απασχόλησης. Αθήνα (εκδόσεις Gutenberg ).

Εκπαιδευτικά βιβλία Δηµοτικό & Νηπιαγωγείο

ΜΕΤΑΠΤΥΧΙΑΚΟ ΠΡΟΓΡΑΜΜΑ ΣΠΟΥΔΩΝ «MBA ΔΙΟΙΚΗΣΗ ΕΠΙΧΕΙΡΗΣΕΩΝ ΤΡΟΦΙΜΩΝ» ΔΙΠΛΩΜΑΤΙΚΗ ΜΕΛΕΤΗ «Η ΑΣΦΑΛΕΙΑ ΤΡΟΦΙΜΩΝ ΚΑΙ Ο ΒΑΘΜΟΣ ΕΜΠΙΣΤΟΣΥΝΗΣ ΤΩΝ ΚΑΤΑΝΑΛΩΤΩΝ»

ΠΣΤΦΙΑΚΗ ΕΡΓΑΙΑ ΣΗΝ ΥΟΡΟΛΟΓΗΗ ΣΟΤ Σ.Ε.Ι. ΚΑΒΑΛΑ ΦΟΛΗ ΙΟΙΚΗΗ & ΟΙΚΟΝΟΜΙΑ ΣΜΗΜΑ ΙΟΙΚΗΗ ΕΠΙΦΕΙΡΗΕΩΝ

«ΝΕΟΙ ΚΑΙ ΑΝΑΖΗΤΗΣΗ ΕΡΓΑΣΙΑΣ ΣΤΗΝ ΕΛΛΑΔΑ ΚΑΙ ΣΤΟ ΕΞΩΤΕΡΙΚΟ»

Η Αγορά Ηλεκτρικής Ενέργειας στην Κύπρο έχει οργανωθεί σε τομείς που υπόκεινται στις ακόλουθες ρυθμίσεις:

ΠΑΡΑΣΚΕΥΗ 1 ΜΑΡΤΙΟΥ 2013

Η ΔΙΔΑΣΚΑΛΙΑ ΤΗΣ ΘΡΗΣΚΕΙΑΣ ΣΤΟ ΟΥΔΕΤΕΡΟΘΡΗΣΚΟ ΣΧΟΛΕΙΟ (ΤΟΥ ΡΕΖΙΣ ΝΤΕΜΠΡΕ)

Τίτλος Ειδικού Θεματικού Προγράμματος: «Διοίκηση, Οργάνωση και Πληροφορική για Μικρο-μεσαίες Επιχειρήσεις»

ΔΙΑΤΜΗΜΑΤΙΚΟ ΠΡΟΓΡΑΜΜΑ ΜΕΤΑΠΤΥΧΙΑΚΩΝ ΣΠΟΥΔΩΝ ΣΤΗ ΔΙΟΙΚΗΣΗ ΕΠΙΧΕΙΡΗΣΕΩΝ. Διπλωματική Εργασία:

Εβδομαδιαίος προγραμματισμός 14η, 15η & 16η εβδομάδα 7 25/12/2015 Θέμα: «Του Δεκέμβρη η μέρα. Καλημέρα, καλησπέρα Ταχυδρόμος - Χριστούγε

Transcript:

Πανεπιςτιμιο Πατρϊν Σμιμα Μθχανικϊν Θ/Τ & Πλθροφορικισ Δθμιουργία, μελζτθ και βελτιςτοποίθςθ φωτορεαλιςτικϊν απεικονίςεων πραγματικοφ χρόνου με χριςθ προγραμματιηόμενων επεξεργαςτϊν γραφικϊν Σταυρόπουλοσ Αςθμάκθσ Α.Μ. 489 Επιβλζπων: Κακθγθτισ κ. Τςακαλίδθσ Ακανάςιοσ Εργαςτιριο Γραφικϊν, Ρολυμζςων & Γεωγραφικϊν Συςτθμάτων

ΠΕΡΙΕΧΟΜΕΝΑ Ευχαριςτίεσ vi Περίληψη vii Κεφάλαιο 1 ο 1 Ειςαγωγι 1 Ιςτορικι αναδρομι 2 Ανάλυςθ Τλικοφ 3 Κάρτεσ Γραφικϊν 3 Τεχνικά Χαρακτθριςτικά 4 Διεπαφζσ προγραμματιςμοφ (DirectX & OpenGL APIs) 7 OpenGL 7 DirectX 9 Το μοντζλο εκτζλεςθσ των DirectX & OpenGL APIs 9 Κεφάλαιο 2 ο 17 Διαδικαςία παραγωγισ γραφικϊν (Graphics Processing Pipeline) 17 Αποςτολι δεδομζνων ςτο API 17 Επεξεργαςία γεωμετρίασ 21 Σφςτθμα Συντεταγμζνων 21 Αναπαράςταςθ ςθμείων 21 Μεταςχθματιςμοί 22 Μεταςχθματιςμόσ μοντζλου 24 Μετατόπιςθ 25 Μεγζκυνςθ / Σμίκρυνςθ 25 Ρεριςτροφι 26 Μεταςχθματιςμόσ παρατθρθτι 26 Μεταςχθματιςμόσ προβολισ 27 Ορκογραφικι προβολι 28 Ρροβολι προοπτικισ 31 Επίπεδο διακριτοποίθςθσ 35 Επεξεργαςία τμθμάτων τθσ εικόνασ 36 Λειτουργίεσ επί των τμθμάτων εικόνασ 36 Λειτουργίεσ επί τθσ προςωρινισ μνιμθσ καρζ (Frame Buffer) 37 Επεξεργαςία εικόνων 37 Εφαρμογι υφισ 38 Ραράδειγμα ςχεδίαςθσ γεωμετρίασ με ταυτόχρονθ εφαρμογι υφισ 44 Οι γλϊςςεσ προγραμματιςμοφ των GPUs 47 Ανάλυςθ πολυπλοκότθτασ για τθν ςχεδίαςθ μίασ τριςδιάςτατθσ ςκθνισ 54 ΧΝΑ 56 Χαρακτθριςτικά του XNA 57 Βιβλιοκικθ γραφικϊν 58 Διαχείριςθ Ρεριεχομζνου 58 Μακθματικζσ βιβλιοκικεσ 58 Υπόλοιπα εργαλεία 59 ii

Κεφάλαιο 3 ο 60 Παρουςίαςθ υλοποιιςεων 60 Βαςικζσ ζννοιεσ 60 Ρεράςματα (Passes) & Deferred Shading 61 Μοντζλο φωτιςμοφ 63 Θ κάμερα 66 Normal Mapping 67 Blooming & Depth of Field 69 Δυναμικόσ ουρανόσ 72 Απαλζσ ςκιζσ με χριςθ Shadow Mapping 75 Συμπεράςματα 79 Βιβλιογραφία 81 iii

Περιεχόμενα εικόνων & πινάκων Εικόνα 1: Κάρτα γραφικϊν και τα κφρια μζρθ τθσ.... 4 Ρίνακασ 1: Τεχνικά χαρακτθριςτικά μίασ GPU.... 4 Ρίνακασ 2: Τεχνικά χαρακτθριςτικά μίασ CPU.... 5 Εικόνα 2: Λογικό διάγραμμα CPU (επάνω) και GPU (κάτω)... 6 Εικόνα 3: Σχθματικι απεικόνιςθ των λειτουργιϊν ενόσ API για τθν ςχεδίαςθ τριςδιάςτατων γραφικϊν.... 10 Εικόνα 4: Εφαρμογι υφισ ςε μία τριςδιάςτατθ ςφαίρα.... 11 Εικόνα 5: Επάνω θ τελικι εικόνα και κάτω τα περιεχόμενα του depth buffer.... 14 Εικόνα 6: Motion blurring. Αυτι θ τεχνικι δίνει τθν αίςκθςθ τθσ κίνθςθσ ςτον παρατθρθτι. Στθν επάνω εικόνα ο παρατθρθτισ δεν κινείται ωσ προσ το αντικείμενο, ενϊ ςτθν κάτω κινείται ωσ προσ τον οριηόντιο άξονα.... 15 Εικόνα 7: Εξομάλυνςθ γωνιϊν με χριςθ του multisample buffer.... 16 Εικόνα 8: Ρρόβλθμα κατά τθν ςχεδίαςθ ενόσ ςχιματοσ που δεν αποτελείται από τρίγωνα. Το ςχιμα ςτα αριςτερά αποτελείται από 4 ςθμεία ςτο χϊρο (κόκκινεσ τελείεσ) αλλά μετά από ςυνεχείσ μεταςχθματιςμοφσ καταλιγει ςτα δεξιά ςε ζνα ςχιμα που πλζον αποτελείται από 5 ςθμεία.... 18 Εικόνα 9: Στα αριςτερά φαίνονται πολφγωνα που μπορεί να ςχεδιαςτοφν με τα APIs ενϊ ςτα δεξιά φαίνονται πολφγωνα που δεν μποροφν να ςχεδιαςτοφν απευκείασ.... 18 Εικόνα 10: Καρτεςιανά ςυςτιματα ςυντεταγμζνων. Το αριςτερό βαςίηεται ςτον κανόνα του αριςτεροφ χεριοφ (DirectX) ενϊ το δεξί ςτον κανόνα του δεξιοφ χεριοφ (OpenGL).... 21 Εικόνα 11: Αναλογία διαδικαςιϊν φωτογράφθςθσ με τουσ μεταςχθματιςμοφσ για τθν παραγωγι γραφικϊν.... 23 Εικόνα 12: Μεταςχθματιςμοί για τθν προβολι γεωμετρίασ ςτθν οκόνθ του υπολογιςτι.... 24 Εικόνα 13: Ορκογραφικι προβολι. Πλα τα αντικείμενα εμφανίηονται ςτο αρχικό μζγεκόσ τουσ ανεξάρτθτα από τθν απόςταςθ από τον παρατθρθτι.... 28 Εικόνα 14: Μεταςχθματιςμόσ του όγκου παρατιρθςθσ τθσ ορκογραφικισ προβολισ ςτον κανονικοποιθμζνο όγκο.... 29 Εικόνα 15: Μεταςχθματιςμόσ του όγκου παρατιρθςθσ τθσ προβολισ προοπτικισ ςτον κανονικοποιθμζνο όγκο.... 31 Εικόνα 16: Συμμετρικι προβολι προοπτικισ.... 32 Εικόνα 17: Μεταςχθματιςμόσ των x, y ςυντεταγμζνων του κανονικοποιθμζνου όγκου προβολισ ςτισ ςυντεταγμζνεσ οκόνθσ.... 33 Εικόνα 18: Οριςμόσ εμπρόσ επιφάνειασ για τα 2 APIs.... 35 Εικόνα 19: Θ τεχνικι mipmapping.... 41 Εικόνα 20: Διαφορά ςτθν ποιότθτα ςχεδίαςθσ χωρίσ (επάνω) και με (κάτω) χριςθ του mipmapping.... 42 Εικόνα 21: Οι διαφορετικοί τρόποι προςπζλαςθσ των υφϊν. Ράνω αριςτερά: Επανάλθψθ. Ράνω Δεξιά: Κακρεπτιςμόσ. Κάτω αριςτερά: Ρεριοριςμόσ ςε μία τιμι. Κάτω δεξιά: Ρεριοριςμόσ ςτθν οριακι τιμι τθσ υφισ.... 43 Εικόνα 22: Οι 3 ςυνιςτϊςεσ φωτιςμοφ του μοντζλου φωτιςμοφ Phong. a) Συνιςτϊςα περιβάλλοντοσ b) Συνιςτϊςα διάχυςθσ c) Συνιςτϊςα ανάκλαςθσ d) Τελικό αποτζλεςμα = άκροιςμα των τριϊν ςυνιςτωςϊν.... 64 Εικόνα 23: Τα απαραίτθτα διανφςματα για τον υπολογιςμό του Phong μοντζλου φωτιςμοφ... 65 iv

Εικόνα 24: Ραράδειγμα εφαρμογισ Normal Mapping. a) Γεωμετρία b) Εφαρμογι υφισ και φωτιςμοφ c) Εφαρμογι Normal Mapping και φωτιςμοφ.... 67 Εικόνα 25: Το μειονζκτθμα τθσ Normal Mapping τεχνικισ είναι πωσ γίνεται αντιλθπτι θ ζλλειψθ τθσ γεωμετρικισ πλθροφορίασ ςτισ περιοχζσ με μεγάλθ κλίςθ ωσ προσ το επίπεδο του παρατθρθτι (περιοχι ανάμεςα ςτον μωβ και κόκκινο δακτφλιο).... 68 Εικόνα 26: Ραράδειγμα υφϊν για τθν εφαρμογι του Normal Mapping.... 69 Εικόνα 27: Επάνω ςχεδίαςθ χωρίσ bloom effect. Κάτω με χριςθ bloom effect.... 70 Εικόνα 28: Σχεδίαςθ χωρίσ χριςθ του Depth of Field (Επάνω) και με χριςθ (Κάτω).... 71 Εικόνα 29: Σφγκριςθ τθσ ποιότθτασ των ςφννεφων χωρίσ (a) και με (b) εφαρμογι διγραμμικοφ φιλτραρίςματοσ.... 73 Εικόνα 30: Σχεδίαςθ του ιλιου ςτον ουρανό.... 74 Εικόνα 31: Ρρόβλθμα εμφάνιςθσ τεχνουργθμάτων κατά τθν εφαρμογι του Shadow Mapping αλγόρικμου.... 76 Εικόνα 32: Μείωςθ των τεχνουργθμάτων που οφείλονται ςτθν αρικμθτικι ακρίβεια.... 77 Εικόνα 33: 12 ςθμεία ςε Poisson κατανομι ςε ζνα κφκλο... 78 Εικόνα 34: Μοτίβο ομοιομορφίασ ςτθν ςκιά, λόγω ομοιόμορφθσ δειγματολθψίασ.... 78 Εικόνα 35: Βελτίωςθ του Shadow Mapping αλγόρικμου με χριςθ πολλαπλισ δειγματολθψίασ με κόρυβο.... 79 v

Ευχαριςτύεσ Ευχαριςτϊ κερμά τον κ. Ακανάςιο Τςακαλίδθ για τθν ευκαιρία που μου ζδωςε να αςχολθκϊ με ζνα πολλά υποςχόμενο πεδίο τθσ ςφγχρονθσ πλθροφορικισ. Επιπλζον, ευχαριςτϊ τον Γιάννθ Τηίμα για τθν βοικειά και υποςτιριξθ ςε όλθ τθν διάρκεια αυτισ τθσ προςπάκειασ. vi

Περύληψη Οι προγραμματιηόμενοι επεξεργαςτζσ γραφικϊν (Graphics Processing Units - GPUs), είναι πανίςχυροι παράλλθλοι επεξεργαςτζσ και πλζον υπάρχουν ςε κάκε ςφγχρονο προςωπικό υπολογιςτι (PC). Οι GPUs αναλαμβάνουν κι επιταχφνουν τθν ςχεδίαςθ διςδιάςτατων και τριςδιάςτατων γραφικϊν ςτθν οκόνθ του υπολογιςτι. Θ εξζλιξι τουσ είναι τόςο ραγδαία τα τελευταία χρόνια, που πλζον ξεπερνοφν ςε πολυπλοκότθτα τισ ςφγχρονεσ κεντρικζσ μονάδεσ επεξεργαςίασ (CPUs), ενϊ είναι ικανζσ να επιταχφνουν εκτόσ από γραφικά κι άλλεσ απαιτθτικζσ ςε επεξεργαςτικι ιςχφ εφαρμογζσ, όπωσ είναι θ τεχνθτι νοθμοςφνθ και θ προςομοίωςθ φυςικϊν αλλθλεπιδράςεων μεταξφ αντικειμζνων (ςυγκροφςεισ, εκριξεισ, προςομοίωςθ κίνθςθσ υγρϊν) κ.α. Σκοπόσ τθσ ςυγκεκριμζνθσ εργαςίασ είναι θ υλοποίθςθ, θ μελζτθ και θ βελτιςτοποίθςθ αλγορίκμων ςκίαςθσ με χριςθ GPUs. Ο όροσ ςκίαςθ (shading) αναφζρεται ςτθν αλλθλεπίδραςθ του φωτόσ με τα αντικείμενα ενόσ εικονικοφ περιβάλλοντοσ. Ραρουςιάηονται τα εργαλεία (APIs) και οι γλϊςςεσ προγραμματιςμοφ των GPUs κακϊσ και τρόποι βελτιςτοποίθςθσ τθσ εκτζλεςθσ των αλγορίκμων που είναι ζνα κζμα μείηονοσ ςθμαςίασ ςε προςομοιϊςεισ πραγματικοφ χρόνου. vii

Κεφϊλαιο 1 ο Ειςαγωγό Τθν τελευταία δεκαετία οι επεξεργαςτζσ γραφικϊν (Graphics Processing Units - GPUs) [1] εξελίςςονται με ραγδαίο ρυκμό τόςο ςε επίπεδο χαρακτθριςτικϊν όςο και ςε επίπεδο επιδόςεων. Αποτελοφν ιδιαίτερα πολφπλοκα κυκλϊματα τα οποία ςυγκρίνονται και πλζον ξεπερνοφν ςε πολυπλοκότθτα, τα αντίςτοιχα των CPUs (Central Processing Units) που ςυναντάμε ςε ζναν ςφγχρονο προςωπικό υπολογιςτι. Τα παραπάνω, είναι αποτελζςματα των απαιτιςεων που υπάρχουν ςτθν μεγάλθ και ιδιαίτερα κερδοφόρα αγορά τθσ θλεκτρονικισ ψυχαγωγίασ θ οποία πλζον περιλαμβάνει πζρα από τουσ προςωπικοφσ υπολογιςτζσ και εξειδικευμζνεσ ςυςκευζσ θλεκτρονικϊν παιχνιδιϊν (PlayStation 3, Xbox 360, Wii) που ςυνδζονται ςε οικιακζσ τθλεοράςεισ. Επιπλζον, θ αγορά του (οικιακοφ) κινθματογράφου προωκεί πρότυπα βίντεο με πολφ μεγάλεσ αναλφςεισ (HD video), τα οποία απαιτοφν υψθλοφσ υπολογιςτικοφσ πόρουσ για να προβλθκοφν χωρίσ πρόβλθμα. Ακόμα, τα πιο διαδεδομζνα ςφγχρονα λειτουργικά ςυςτιματα (Windows Vista, Linux) προςφζρουν δυνατότθτεσ τριςδιάςτατθσ απεικόνιςθσ του περιβάλλοντοσ εργαςίασ, με ςκοπό τθν καλφτερθ εμπειρία ςτον χριςτθ, το πιο ευχάριςτο περιβάλλον και τθν βελτίωςθ τθσ χρθςτικότθτασ (usability), ενϊ παράλλθλα προςφζρουν εργαλεία ανάπτυξθσ, που βοθκοφν ςτθν δθμιουργία τριςδιάςτατων απεικονίςεων ςε εφαρμογζσ γραφείου (Windows Presentation Foundation) ι ιςτότοπουσ (Silver light). Τζλοσ, εμφανίηονται εφαρμογζσ γεωγραφικοφ εντοπιςμοφ και εικονικισ περιιγθςθσ (Google Earth, GPS systems, Navigation systems), τόςο για προςωπικοφσ υπολογιςτζσ όςο και για ςυςκευζσ χειρόσ (Nvidia Tegra). Οι GPUs ικανοποιοφν τισ απαιτιςεισ ςε υπολογιςτικι ιςχφ που απαιτοφν οι παραπάνω εφαρμογζσ, χάρισ ςτθν ιδιαίτερα εξελιγμζνθ τεχνολογία παραγωγισ ολοκλθρωμζνων κυκλωμάτων και μνθμϊν υψθλισ ταχφτθτασ (DDR4 DDR5), τισ προθγμζνεσ δυνατότθτεσ προγραμματιςμοφ τουσ για τθν δθμιουργία ςκιάςεων και των ϊριμων πλζον διεπαφϊν προγραμματιςμοφ (APIs DirectX 10.1, OpenGL 3.0, CUDA) που προςφζρουν ςτον καταςκευαςτι λογιςμικοφ. Θ ςυγκεκριμζνθ εργαςία ζχει ωσ ςκοπό να εξθγιςει τι είναι οι ςκιάςεισ (shaders) κακϊσ και τα εργαλεία και τισ μεκόδουσ που ακολουκοφνται για τθν δθμιουργία τουσ και τθν βελτιςτοποίθςθ τθσ εκτζλεςισ τουσ ςε πραγματικό χρόνο. Ο όροσ 1

«πραγματικόσ χρόνοσ» ςθμαίνει ότι οι εικόνεσ που παράγονται (rendering) από τον υπολογιςτι ανανεϊνονται τουλάχιςτον 10 φορζσ το δευτερόλεπτο. Σθμειϊνεται πωσ ςτθν παροφςα εργαςία με τον όρο γεωμετρία αναφερόμαςτε ςτα ςθμεία του τριςδιάςτατου χϊρου που περιγράφουν τα αντικείμενα που κζλουμε να ςχεδιάςουμε. Με τον όρο ςκιάςεισ αναφερόμαςτε ςτον αλγόρικμο που εκτελοφν τα προγραμματιηόμενα τμιματα των GPUs. Ιςτορικό αναδρομό Ο όροσ GPU είναι νζοσ ςχετικά και κακιερϊκθκε μετά το 2001. Ο λόγοσ που το υποςφςτθμα απεικόνιςθσ γραφικϊν ςε ζναν υπολογιςτι ονομάςτθκε ζτςι, είναι θ δυνατότθτα του να προγραμματίηεται. Οι επιταχυντζσ τριςδιάςτατων γραφικϊν διαδόκθκαν ςτουσ προςωπικοφσ υπολογιςτζσ μετά το 1996 με τθν παρουςίαςθ τθσ Voodoo κάρτασ γραφικϊν από τθν εταιρία 3Dfx. Θ εξζλιξθ ςτουσ αλγόρικμουσ απεικόνιςθσ και ταυτόχρονα θ βελτίωςθ των τεχνικϊν παραγωγισ ολοκλθρωμζνων μετά το 1998, ζδωςε μεγάλθ ϊκθςθ ςτθν αγορά. Θ 3Dfx παρουςίαςε εκείνθ τθν χρονιά τθν Voodoo 2 και λίγο αργότερα, ιρκε ςτο προςκινιο θ Nvidia μαηί με τθν ATi. Μζχρι το 2000 οι κάρτεσ γραφικϊν που προςζφεραν επιτάχυνςθ ςε τρεισ διαςτάςεισ ιταν πολφ ακριβζσ και δεν προγραμματίηονταν. Τα κφρια χαρακτθριςτικά τουσ ιταν θ υποςτιριξθ πολλαπλϊν υφϊν και ο αλγόρικμοσ z-buffering. Με άλλα λόγια μποροφςαν να εφαρμόηουν πολλζσ «εικόνεσ» πάνω ςτα ςθμεία που περιγράφουν τθν ςκθνι και να αποκρφπτουν ςωςτά τα αντικείμενα που βρίςκονταν πίςω από άλλα, ςε ςχζςθ με τον παρατθρθτι. Το 2000 παρουςιάηεται από τθν Nvidia, θ πρϊτθ κάρτα γραφικϊν που προςζφερε το λεγόμενο T&L (Transform & Lighting που επιτάχυνε τθν ςχεδίαςθ και τον μεταςχθματιςμό τθσ γεωμετρίασ ςτον χϊρο, πριν αυτι απεικονιςτεί ςτθν οκόνθ του υπολογιςτι, κάτι που πριν αναλάμβανε θ CPU του υπολογιςτι. Ζτςι λοιπόν, ζχουμε τθν πρϊτθ ζνδειξθ για το τι επρόκειτο να ακολουκιςει, δθλαδι, τθν πλιρθ μεταφορά τθσ διαδικαςίασ ςχεδίαςθσ των γραφικϊν ςτθν GPU. Το 2001 εμφανίηεται θ πρϊτθ κάρτα γραφικϊν που προγραμματίηεται. Συγκεκριμζνα προγραμματίηεται το T&L ςτάδιό τθσ (vertex shaders). Ο προγραμματιςμόσ γίνεται με χριςθ assembly γλϊςςασ. Το 2002-2003 κυκλοφοροφν GPUs που υποςτθρίηουν προγραμματιηόμενουσ επεξεργαςτζσ εικονοςτοιχείων (pixel shaders). Τα επόμενα χρόνια, εμφανίηονται GPUs με μεγαλφτερεσ δυνατότθτεσ προγραμματιςμοφ ενϊ το 2007 εμφανίςτθκε θ νζα γενιά GPU που υποςτθρίηει και δυναμικζσ αλλαγζσ ςτθν γεωμετρία (geometry processor) από τθν GPU, χωρίσ τθν επζμβαςθ τθσ CPU. 2

Σιμερα οι GPUs, αποτελοφν υλοποιιςεισ ενόσ πολφ μεγάλου ςε μικοσ pipeline (τθσ τάξθσ των χιλιάδων κφκλων ρολογιοφ), που παρουςιάηουν τρεισ ομάδεσ προγραμματιηόμενων μονάδων. Αυτζσ είναι οι Vertex Processors (επεξεργαςτζσ ςθμείων), οι Geometry Processors (επεξεργαςτζσ γεωμετρίασ) και οι Fragment Processors (επεξεργαςτζσ ςτοιχείων). Οι επεξεργαςτζσ ςθμείων μεταςχθματίηουν τθν γεωμετρία ςτο χϊρο, οι επεξεργαςτζσ γεωμετρίασ αλλάηουν τισ ιδιότθτεσ και το ςχιμα τθσ και τζλοσ οι επεξεργαςτζσ ςτοιχείων, επεμβαίνουν ςτα εικονοςτοιχεία (pixels) τθσ εικόνασ πριν αυτά εμφανιςτοφν ςτθν οκόνθ. Για τθν παραγωγι τριςδιάςτατων εικόνων, απαιτείται από τον προγραμματιςτι, να γράψει το πρόγραμμα που κα εκτελζςουν οι Vertex Processors και οι Fragment Processors. Οι Geometry Processors μπορεί να μθν αναμιχκοφν ςτθν διαδικαςία παραγωγισ εικόνων. Μζςα ςε 10 χρόνια, οι GPUs ζχουν γνωρίςει τόςο μεγάλθ πρόοδο ςε επίπεδο υλικοφ που οι καταςκευαςτζσ λογιςμικοφ, ακόμα και ςιμερα δεν είναι ςε κζςθ να εκμεταλλευτοφν όλεσ τισ δυνατότθτζσ τουσ, ενϊ θ ζρευνα ςτον τομζα των γραφικϊν είναι ζνα δυναμικό και πολλά υποςχόμενο πεδίο. Νζα χαρακτθριςτικά ςτο υλικό των GPUs, προςφζρουν ζδαφοσ για τθν δθμιουργία νζων πιο αποδοτικϊν αλγορίκμων απεικόνιςθσ, ενϊ κακιςτοφν ιδθ υπάρχοντεσ, μθ πρακτικοφσ ι ξεπεραςμζνουσ. Ανϊλυςη Υλικού Κϊρτεσ Γραφικών Σε ςχζςθ με τουσ κεντρικοφσ επεξεργαςτζσ (CPUs) ενόσ προςωπικοφ υπολογιςτι οι επεξεργαςτζσ γραφικϊν (GPUs ςτο εξισ) δεν τοποκετοφνται ανεξάρτθτα επάνω ςτθν μθτρικι πλακζτα του υπολογιςτικοφ ςυςτιματοσ. Αντίκετα οι GPUs είναι ολοκλθρωμζνα κυκλϊματα τα οποία τοποκετοφνται ςε μία ξεχωριςτι πλακζτα μαηί με άλλα κυκλϊματα και μνιμθ κι ονομάηονται «κάρτα γραφικϊν». Αυτι θ πλακζτα τοποκετείται επάνω ςτθν μθτρικι πλακζτα ςε διαφλουσ τφπου PCIE (PCI Express). Στθν παρακάτω εικόνα φαίνεται μία τζτοια κάρτα γραφικϊν. Στθν Εικόνα 1 φαίνεται μζςα ςε πορτοκαλί πλαίςιο θ GPU (δεν διακρίνεται το ολοκλθρωμζνο λόγω τθσ ψικτρασ), ςε κόκκινα πλαίςια οι μνιμεσ τθσ και ςε πράςινο πλαίςιο ο δίαυλοσ διαςφνδεςθσ με τθν μθτρικι πλακζτα. Τζλοσ μζςα ςε μαφρο πλαίςιο φαίνονται οι ζξοδοι τθσ κάρτασ γραφικϊν προσ τθν οκόνθ του υπολογιςτι. Θ GPU εκτόσ από τισ μνιμεσ, ζχει διάφορα επίπεδα μνθμϊν cache, όπωσ ςυμβαίνει και με τισ CPU. Αν οι μνιμεσ τθσ GPU δεν επαρκοφν για να αποκθκεφςουν τα δεδομζνα, γίνεται χριςθ τθσ κφριασ μνιμθσ του υπολογιςτικοφ ςυςτιματοσ (RAM) με κάποιο άνω όριο, το οποίο κακορίηεται από τθν ποςότθτα τθσ εγκατεςτθμζνθσ RAM ςτο ςφςτθμα κι από τον καταςκευαςτι τθσ κάρτασ γραφικϊν. Θ επικοινωνία 3

με τθν CPU ι τθν RAM μνιμθ, γίνεται μζςω του διαφλου επικοινωνίασ, ο οποίοσ ςιμερα είναι ο PCI 2.0 express x16. Θ ταχφτθτα του διαφλου αυτοφ είναι 16GB/sec και προσ τισ δφο κατευκφνςεισ. Εικόνα 1: Κάρτα γραφικϊν και τα κφρια μζρθ τθσ. Τεχνικϊ Χαρακτηριςτικϊ Οι GPUs μποροφν να χαρακτθριςτοφν ςαν μαηικοί παράλλθλοι επεξεργαςτζσ. Ο παρακάτω πίνακασ, είναι διαφωτιςτικόσ ςχετικά με τισ επιδόςεισ που μπορεί να επιτφχει μία GPU. Τα χαρακτθριςτικά αυτά αφοροφν τθν πιο γριγορθ κάρτα γραφικϊν που κυκλοφορεί ςιμερα (Nvidia GeForce GTX 295) [2]: Πίνακασ 1: Σεχνικά χαρακτθριςτικά μίασ GPU. Επεξεργαςτικά ςτοιχεία 480 Συχνότθτα επεξεργαςτϊν 1242 MHz Μζγεκοσ μνιμθσ / Τφποσ 1792 MB / GDDR3 Ταχφτθτα μνιμθσ 999 MHz Εφροσ διαφλου επικοινωνίασ μνιμθσ 896 bit Διακζςιμο εφροσ μνιμθσ (Bandwidth) 223.8 GB/sec Αρικμόσ τρανηίςτορ 2,8 διςεκατομμφρια Αντίςτοιχα ακολουκεί ζνασ πίνακασ ο οποίοσ παρουςιάηει τθν πιο γριγορθ CPU που κυκλοφορεί ςιμερα (Intel Core i7-940) [3]. 4

Πίνακασ 2: Σεχνικά χαρακτθριςτικά μίασ CPU. Επεξεργαςτικά ςτοιχεία 8 Συχνότθτα επεξεργαςτϊν 2.93 GHz Μζγεκοσ μνιμθσ / Τφποσ ζωσ 24 GB / DDR3 Ταχφτθτα μνιμθσ 1066 MHz Διακζςιμο εφροσ μνιμθσ (Bandwidth) 25.6 GB/sec Αρικμόσ τρανηίςτορ 0,743 διςεκατομμφρια Από τθν ςφγκριςθ των παραπάνω πινάκων, γίνεται εφκολα αντιλθπτό ότι οι GPUs ζχουν τεράςτια αποκζματα ιςχφοσ που οφείλονται ςτθν παραλλθλία που ενςωματϊνουν. Ρράγματι, θ προςζγγιςθ που ζχει επικρατιςει για τθν ςχεδίαςθ γραφικϊν, όπωσ κα αναλυκεί παρακάτω, είναι μία αμιγϊσ παράλλθλθ διαδικαςία και γι αυτό ακριβϊσ τον λόγο, είναι πολφ πιο εφκολο για ζναν καταςκευαςτι GPU να αυξάνει τθν ιςχφ, προςκζτοντασ περιςςότερεσ ίδιεσ επεξεργαςτικζσ μονάδεσ, από ότι ςτθν περίπτωςθ των καταςκευαςτϊν CPU. Επιπλζον οι GPUs είναι προςανατολιςμζνεσ ωσ προσ τθν χριςθ και δεν είναι ςε κζςθ να επιλφουν αποδοτικά κάκε είδουσ υπολογιςτικά προβλιματα όπωσ οι CPU. Από τθν άλλθ θ αδυναμία αφξθςθσ τθσ ςυχνότθτασ λειτουργίασ των ολοκλθρωμζνων ςτθν CPU, ζχει οδθγιςει τουσ καταςκευαςτζσ ςτθν ενςωμάτωςθ περιςςότερθσ παραλλθλίασ (8 επεξεργαςτικά ςτοιχεία). Ραρατθροφμε επιπλζον πωσ θ GPU ζχει 480 επεξεργαςτικά ςτοιχεία (ALUs) ενϊ θ CPU μόνο 8. Από τθν άλλθ θ GPU αποτελείται από ζναν τεράςτιο αρικμό τρανηίςτορ (2,8 εκατομμφρια) ενϊ θ CPU από 0,743. Αυτό ςθμαίνει πωσ τα επεξεργαςτικά ςτοιχεία που ενςωματϊνουν τα 2 είδθ επεξεργαςτϊν δεν είναι αναλογικά του μεγζκουσ τουσ. Μάλιςτα φαίνεται ότι θ CPU ζχει πολφ λιγότερεσ ALUs από αυτζσ που κα ζπρεπε αν ακολουκοφςε αναλογία αντίςτοιχθ τθσ GPU. Αν όμωσ ςυγκρίνουμε τα επιμζρουσ ςυςτατικά μζρθ του ολοκλθρωμζνου μίασ GPU με μίασ CPU, τότε μποροφμε πολφ εφκολα να απαντιςουμε το παραπάνω «παράδοξο». Στθν Εικόνα 2 βλζπουμε το λογικό διάγραμμα των παραπάνω CPU και GPU αντίςτοιχα. Ζνα μεγάλο τμιμα τθσ επιφάνειασ του ολοκλθρωμζνου τθσ CPU καταλαμβάνεται από μνιμεσ cache, από τουσ ελεγκτζσ των περιφερειακϊν κι από κυκλϊματα διαχείριςθσ και βελτιςτοποίθςθσ τθσ ροισ εκτζλεςθσ (flow control) ενόσ προγράμματοσ. Αυτό ζχει ωσ αποτζλεςμα οι ALUs (ςθμειϊνονται ωσ Core ςτθν Εικόνα 2) να περιορίηονται ςε τζςςερισ (με 2 νιματα υλικοφ θ κάκε μία). Επιπλζον αυτζσ οι ALUs ενςωματϊνουν ιδιαίτερα δαπανθρζσ, ςε αρικμό τρανηίςτορ, τεχνικζσ επιτάχυνςθσ του υπολογιςμοφ (εκτζλεςθ εκτόσ ςειράσ, πρόβλεψθ διακλαδϊςεων). 5

Εικόνα 2: Λογικό διάγραμμα CPU (επάνω) και GPU (κάτω). Από τθν άλλθ θ GPU περιζχει ςυςτάδεσ από ALUs που ςθμειϊνονται μζςα ςτα μαφρα πλαίςια ςτθν Εικόνα 2. Βλζπουμε επιπλζον ότι οι μνιμεσ cache ςε αυτι τθν περίπτωςθ περιορίηονται ςε ελάχιςτο χϊρο επάνω ςτο ολοκλθρωμζνο (κίτρινο πλαίςιο). Από τθν εικόνα αυτι φαίνεται πωσ θ ταχφτθτα των CPUs βαςίηεται ςτθν ελαχιςτοποίθςθ τθσ κακυςτζρθςθσ (latency) ςε εφαρμογζσ μικρισ παραλλθλίασ (μεγάλθ cache), ενϊ οι GPUs είναι μαηικοί παράλλθλοι διανυςματικοί επεξεργαςτζσ οι οποίοι ζχουν μεγάλθ κακυςτζρθςθ, αλλά μεγάλθ ικανότθτα για παράλλθλο υπολογιςμό (throughput). Σε επόμενθ κεματικι ενότθτα κα γίνει ανάλυςθ για μία 6

μζςθ πολυπλοκότθτα ςτθν ςχεδίαςθ μίασ τριςδιάςτατθσ ςκθνισ πραγματικοφ χρόνου, για να γίνει εμφανζσ που χρειάηεται αυτι θ παραλλθλία. Κα πρζπει να τονίςουμε ςτο ςθμείο αυτό ότι παρατθρείται τα τελευταία χρόνια μία ςφγκλιςθ ανάμεςα ςτισ δφο αρχιτεκτονικζσ με ςκοπό τθν καταςκευι υβριδικϊν επεξεργαςτϊν [4]. Ο γενικόσ κανόνασ που ςιμερα, είναι πωσ θ υπολογιςτικι ιςχφσ των GPUs διπλαςιάηεται κάκε περίπου 6 μινεσ ενϊ των CPUs κάκε 18. Διεπαφϋσ προγραμματιςμού (DirectX & OpenGL APIs) Οι GPUs είναι ζνα πολφ μεγάλο ςε μικοσ pipeline. Ο προγραμματιςτισ μπορεί να αλλάηει το οπτικό αποτζλεςμα ςτθν οκόνθ αλλάηοντασ τθν κατάςταςθ αυτοφ του pipeline. Θ διεπαφι (API) που χρθςιμοποιεί ο προγραμματιςτισ για να παραμετροποιεί και να προγραμματίηει τθν GPU μπορεί να είναι είτε το DirectX [5] που προωκεί θ Microsoft και είναι ςυμβατό μόνο με τα λειτουργικά ςυςτιματα τθσ Microsoft, είτε το OpenGL [6] το οποίο είναι ανεξάρτθτο λειτουργικοφ ςυςτιματοσ και το διαχειρίηεται μία ομάδα οργανιςμϊν και εταιριϊν. Τα δφο αυτά APIs δεν είναι τα μοναδικά, αλλά είναι τα πιο διαδεδομζνα και χρθςιμοποιοφνται ςτθν ςυντριπτικι πλειοψθφία των εφαρμογϊν. Το DirectX είναι μία ςυλλογι από βιβλιοκικεσ για τθν δθμιουργία και τθν παρουςίαςθ πολυμζςων μζςω του υπολογιςτι (3d, audio, video) και το κομμάτι που αφορά τα τριςδιάςτατα γραφικά πραγματικοφ χρόνου ονομάηεται Direct 3D. Το DirectX υποςτθρίηει και managed και unmanaged κϊδικα (C++). Θ πιο πρόςφατθ ζκδοςι του είναι θ 10.1 και ςφντομα αναμζνεται να ανακοινωκεί θ ζκδοςθ 11. To OpenGL είναι μία ςυλλογι από βιβλιοκικεσ που αφοροφν αποκλειςτικά τθν ςχεδίαςθ γραφικϊν πραγματικοφ χρόνου. Θ τελευταία ζκδοςι του είναι θ 3.0 που προςφζρει ζνα υποςφνολο από χαρακτθριςτικά ςε ςχζςθ με το DirectX 10.1 και τϊρα αρχίηει να υποςτθρίηεται από τουσ καταςκευαςτζσ GPU (ςτο επίπεδο του λογιςμικοφ). Στθν ςυνζχεια, κα γίνει μία ςυνοπτικι παρουςίαςθ του κάκε API. Κα αναφερκοφμε ςε ιςτορικά ςτοιχεία και χαρακτθριςτικά κακϊσ και ςτα μειονεκτιματα και πλεονεκτιματα τθσ χριςθσ κάκε API. Δεν κα αναφερκοφμε ακόμα ςε τεχνικζσ λεπτομζρειεσ ςχετικά με τθν παραγωγι των γραφικϊν μιασ και τα δφο APIs ζχουν παρόμοια φιλοςοφία. Γι αυτό το λόγο θ τεχνικι ανάλυςθ κα είναι κοινι και για τα δφο. OpenGL Οι πρϊτεσ τεχνικζσ προδιαγραφζσ του OpenGL οριςτικοποιικθκαν το 1992 και υλοποιικθκαν το 1993. Αρχικά ιταν ςυμβατό και βαςιςμζνο ςτο GL (Graphics Library) API τθσ Silicon Graphics. Θ Silicon Graphics ςυνεργάςτθκε με διάφορεσ 7

άλλεσ εταιρείεσ καταςκευισ καρτϊν γραφικϊν και δθμιοφργθςαν το ανοιχτό πρότυπο που ονομάςτθκε OpenGL. Θ εξζλιξθ του OpenGL ελζγχεται από το OpenGL Συμβοφλιο Αρχιτεκτονικισ (OpenGL Architecture Board ι ARB) το οποίο δθμιουργικθκε επίςθσ από τθν Silicon Graphics το 1992. Μερικζσ από τισ εταιρείεσ που ςυμμετείχαν ςτο αρχικό ARB είναι οι SGI, Intel, Microsoft, Compaq και θ IBM. Θ ςφνκεςθ αυτι ζχει αλλάξει, πολλζσ εταιρείεσ ζχουν αποχωρίςει (π.χ. Microsoft), ενϊ άλλεσ ζχουν προςτεκεί, όπωσ θ ATi και θ Nvidia. Σκοπόσ του OpenGL είναι να προςφζρει ςτον προγραμματιςτι πρόςβαςθ ςτισ δυνατότθτεσ τριςδιάςτατθσ επιτάχυνςθσ που προςφζρει το ςφγχρονο υλικό, ενϊ παράλλθλα παρζχει τθν μζγιςτθ δυνατι αφαίρεςθ από αυτό. Ρλζον υποςτθρίηεται από πολλά λειτουργικά ςυςτιματα κι αρχιτεκτονικζσ (Macs, PCs, UNIX-based ςυςτιματα). Επίςθσ το OpenGL υποςτθρίηεται από διάφορεσ υλοποιιςεισ GPU. Άλλεσ μπορεί να επιταχφνουν όλα τα χαρακτθριςτικά του OpenGL, ενϊ άλλεσ ζνα πολφ μικρό μζροσ του. Από τθν αρχικι του ζκδοςθ (1.0) το OpenGL ζχει αναβακμιςτεί 7 φορζσ κι ζχει φτάςει ςτισ μζρεσ μασ ςτθν ζκδοςθ 3.0. Θ αρχιτεκτονικι και οι προδιαγραφζσ του OpenGL επιτρζπουν τθν γριγορθ και αποδοτικι ενςωμάτωςθ νζων χαρακτθριςτικϊν. Οι GPUs εξελίςςονται κι αποκτοφν νζα χαρακτθριςτικά τα οποία πρζπει με κάποιο τρόπο να είναι διακζςιμα ςτον προγραμματιςτι όςο το δυνατό γρθγορότερα. Ο ζνασ τρόποσ να ενςωματωκοφν χαρακτθριςτικά ςτο OpenGL είναι θ δθμιουργία από το ARB μίασ νζασ ζκδοςισ του. Θ διαδικαςία αυτι όμωσ είναι χρονοβόρα γιατί πρζπει να αποφαςίηουν πολλζσ εταιρίεσ (το ARB ςυμβοφλιο). Ζτςι λοιπόν παρζχεται o μθχανιςμόσ των επεκτάςεων (extensions) ο οποίοσ επιτρζπει άμεςα κι εφκολα ςε κάποιο καταςκευαςτι GPU να ενςωματϊνει ςτο OpenGL νζα χαρακτθριςτικά και να τα διακζτει ςτουσ προγραμματιςτζσ. Στθν ςυνζχεια αν θ ςυγκεκριμζνθ επζκταςθ υποςτθριχκεί από πολλοφσ καταςκευαςτζσ GPU και το ARB ςυμβοφλιο αποφαςίςει ότι είναι απαραίτθτθ, τθν ενςωματϊνει ςε μία νζα ζκδοςθ του OpenGL. Επίςθσ το OpenGL υποςτθρίηει το μοντζλο client server. Με άλλα λόγια υπάρχει ζνα πρόγραμμα που δθμιουργεί OpenGL εντολζσ, ενϊ ζνα άλλο (o server) τισ ερμθνεφει και τισ εκτελεί. Αυτό ςθμαίνει ότι μία εφαρμογι μπορεί να εκτελείται ςε ζνα υπολογιςτι (που ζχει τον ρόλο και του client και του server) ι ςε δφο. Μερικζσ από τισ δομζσ για τθν διαχείριςθ και τθν λειτουργία τθσ OpenGL εφαρμογισ αποκθκεφονται ςτον client αλλά θ πλειοψθφία αυτϊν των εντολϊν αποκθκεφεται ςτθν μνιμθ του server. 8

DirectX Το DirectX εμφανίςτθκε το 1995 λίγο μετά τθν παρουςίαςθ των Windows 95. Ουςιαςτικά ιταν θ λφςθ τθσ Microsoft για παιχνίδια ςτο νζο λειτουργικό τθσ αντί για το MS-DOS, όπωσ ςυνζβαινε μζχρι τότε. Μζχρι το 1999, το DirectX δεν χρθςιμοποιοφταν τόςο ςτθν δθμιουργία παιχνιδιϊν και τα πρωτεία κρατοφςε το OpenGL, το οποίο υποςτθρίηεται ακόμα ςτα Windows. Σιμερα, όμωσ, θ τεχνολογία αυτι απειλεί ςοβαρά το OpenGL. Ενϊ το OpenGL ιταν πάντα τεχνολογικά πιο μπροςτά, λόγω τθσ εφκολθσ επεκταςιμότθτασ και τθσ υποςτιριξθσ από πολλζσ μεγάλεσ εταιρίεσ, το DirectX, ιδιαίτερα τα 3 τελευταία χρόνια ζχει ωριμάςει ςαν τεχνολογία και αναβακμίηεται με πιο γριγορο ρυκμό από ότι παλαιότερα. Αυτό ζχει ςαν αποτζλεςμα να υποςτθρίηει πιο εξελιγμζνα χαρακτθριςτικά από ότι το OpenGL. Ο τρόποσ που το DirectX αναβακμίηεται και ανανεϊνεται είναι πολφ διαφορετικόσ από αυτόν του OpenGL. Συγκεκριμζνα οι εκδόςεισ και τα τεχνικά χαρακτθριςτικά του DirectX κακορίηονται αποκλειςτικά από τθν Microsoft (θ οποία εςωτερικά μπορεί να ςυνεργάηεται με μία άλλθ μεγάλθ εταιρία) και εμπλουτίηεται είτε με τθν ζκδοςθ ενόσ νζου λειτουργικοφ ςυςτιματοσ, είτε με αναβακμίςεισ, που εκδίδει θ ίδια. Το DirectX βρίςκεται ςτθν ζκδοςθ 10.1 αυτι τθν ςτιγμι και υποςτθρίηεται από τθν τελευταία γενιά GPUs. Το DirectX 10.1 υποςτθρίηεται μόνο από τα Windows Vista, ενϊ το DirectX ςε προθγοφμενεσ εκδόςεισ του υποςτθρίηει μόνο λειτουργικά ςυςτιματα τθσ Microsoft. Το μοντϋλο εκτϋλεςησ των DirectX & OpenGL APIs Στθν προθγοφμενθ ενότθτα παρουςιάςτθκαν τα δφο δθμοφιλζςτερα APIs για τθν δθμιουργία απεικονίςεων μζςω GPUs. Ραρουςιάςτθκαν οι διαφορζσ τουσ, μιασ και το μοντζλο εκτζλεςθσ είναι παρόμοιο. Στθν ενότθτα αυτι κα γίνει μία πρϊτθ περιγραφι του τρόπου λειτουργίασ τουσ και κακϊσ προχωρά θ ανάλυςθ ςτθν εργαςία αυτι, κα παρζχονται ολοζνα και περιςςότερεσ λεπτομζρειεσ. Τα APIs είναι μθχανζσ καταςτάςεων (states machines). Αυτό ςθμαίνει πωσ όταν ορίηεται μία παράμετροσ ςτο pipeline (βλ. Εικόνα 3) το οποίο κακορίηει το API τότε αυτι διατθρείται ςτακερι μζχρι να αλλάξει ρθτά θ κατάςταςι τθσ από τον προγραμματιςτι (με κλιςθ τθσ αντίςτοιχθσ ςυνάρτθςθσ - μεκόδου). Ρροφανϊσ ο προγραμματιςτισ δεν υποχρεϊνεται να ορίηει όλεσ τισ καταςτάςεισ, γιατί αυτζσ ζχουν μία προκακοριςμζνθ τιμι (default value). Οι παράμετροι δεν επθρεάηουν εμμζςωσ ι αμζςωσ άλλεσ παραμζτρουσ. Κάκε παράμετροσ πρζπει να αλλάηει κατάςταςθ ρθτά. Επιπλζον οι εκτζλεςθ των εντολϊν που ορίηονται μζςω των APIs από τον προγραμματιςτι είναι ςειριακι. Δεν επιτρζπεται εκτζλεςθ εκτόσ ςειράσ (out of order execution). Στθν Εικόνα 3 φαίνεται θ ςχθματικι απεικόνιςθ των λειτουργιϊν ενόσ API το οποίο αντιςτοιχεί ςτο DirectX 9.0c είτε το OpenGL 2.0. Στθν παροφςα εργαςία, δεν κα αναφερκοφμε ςτο DirectX 10.0 και ςτο OpenGL 3.0, τα οποία παρζχουν περιςςότερα χαρακτθριςτικά, αλλά δεν υποςτθρίηονται από το 9

XNA 3.0 με το οποίο υλοποιικθκαν οι αλγόρικμοι που κα παρουςιαςτοφν. Τα APIs λοιπόν, αποτελοφν μία ςυλλογι από ςυναρτιςεισ κλιςεισ, οι οποίεσ παίρνουν παραμζτρουσ και κακορίηουν τθν ροι των δεδομζνων επάνω ςτθν GPU, ϊςτε να επιτφχουμε το επικυμθτό οπτικό αποτζλεςμα. Τα APIs δεν απαιτοφν να επιταχφνονται όλα τα επίπεδά τουσ από τισ GPUs, αλλά ςιμερα θ ςυντριπτικι πλειοψθφία των GPUs το κάνει. Αυτό που απαιτοφν τα APIs, είναι προφανϊσ, να υποςτθρίηονται όλα τα χαρακτθριςτικά που απαιτεί κάκε ζκδοςι τουσ. Επιπλζον τα APIs δεν κακορίηουν τισ τεχνικζσ λεπτομζρειεσ και του αλγόρικμουσ με τουσ οποίουσ κα υλοποιθκοφν, αλλά ορίηουν τισ ελάχιςτεσ απαιτιςεισ που κα πρζπει να ικανοποιοφν οι υλοποιιςεισ τουσ. Στθν Εικόνα 3, βλζπουμε τθν ςχθματικι απεικόνιςθ τθσ λειτουργίασ ενόσ API (DirectX 9.0c, OpenGL 2.0) [7]. Τα βζλθ αναπαριςτοφν τθν ροι των δεδομζνων θ οποία ζχει (κυρίωσ) κατεφκυνςθ από τα αριςτερά προσ τα δεξιά. Επίςθσ ανάλογα με το είδοσ τθσ ροισ δεδομζνων τα βζλθ ζχουν άλλο χρϊμα και μοτίβο. Τα μαφρα βζλθ αναπαριςτοφν ςθμεία ςτον χϊρο (vertices). Τα διακεκομμζνα μαφρα βζλθ αναπαριςτοφν εικονοςτοιχεία (pixels). Τα θμιδιαφανι βζλθ αναπαριςτοφν εικονοςτοιχεία υπό επεξεργαςία (fragments), δθλαδι εικονοςτοιχεία τα οποία δεν είναι βζβαιο ότι κα εμφανιςτοφν ςτθν οκόνθ του υπολογιςτι, επειδι κα υποςτοφν επεξεργαςία ςε μετζπειτα ςτάδιο. Τζλοσ τα βζλθ με άςπρο κεφάλι και διακεκομμζνθ γραμμι αναπαριςτοφν υφζσ (textures). Οι υφζσ είναι ουςιαςτικά εικόνεσ οι οποίεσ εφαρμόηονται επάνω ςτθν γεωμετρία για να δείχνει πιο αλθκοφανισ. Θ Εικόνα 4 δείχνει το αποτζλεςμα τθσ εφαρμογισ μίασ υφισ ςε μία ςφαίρα. Εικόνα 3: χθματικι απεικόνιςθ των λειτουργιϊν ενόσ API για τθν ςχεδίαςθ τριςδιάςτατων γραφικϊν. 10

Εικόνα 4: Εφαρμογι υφισ ςε μία τριςδιάςτατθ ςφαίρα. Σκοπόσ κάκε API είναι θ ςχεδίαςθ γραφικϊν, γι αυτό ο κεμελιϊδθσ ςκοπόσ τουσ είναι να μετατρζπουν τα δεδομζνα που τουσ παρζχονται από μία εφαρμογι ςε κάτι που να είναι ορατό ςε μία οκόνθ. Αυτι θ διαδικαςία είναι γνωςτι ωσ ςχεδίαςθ (rendering). Οι κάρτεσ γραφικϊν αποκθκεφουν ςε μία περιοχι τθσ μνιμθσ τουσ τα περιεχόμενα τθσ εικόνασ που εμφανίηονται ςτθν οκόνθ. Κάκε ορατό εικονοςτοιχείο τθσ οκόνθσ αντιςτοιχεί ςε ζνα ι περιςςότερα bytes ςτθν μνιμθ τθσ κάρτασ γραφικϊν. Για παράδειγμα μία εικόνα με διαβακμίςεισ του γκρι, μπορεί να χρθςιμοποιεί ζνα byte για να αποκθκεφςει τθν τιμι του επιπζδου του γκρίηου χρϊματοσ, ενϊ μία ζγχρωμθ εικόνα μπορεί να χρθςιμοποιεί 3 bytes για να αποκθκεφςει το κόκκινο, πράςινο και μπλε χρϊμα αντίςτοιχα. Αυτι θ «μνιμθ εικόνασ» (αρικμόσ 10 ςτθν Εικόνα 3) ανανεϊνεται ζναν ςυγκεκριμζνο αρικμό φορϊν κάκε δευτερόλεπτο, για να διατθριςουμε μία απεικόνιςθ χωρίσ τρεμόπαιγμα ςτθν οκόνθ. Ρλζον αυτισ τθσ μνιμθσ, οι κάρτεσ γραφικϊν ζχουν και μνιμθ που αποκθκεφουν δεδομζνα τα οποία δεν φαίνονται ςτθν οκόνθ. Για να ςχεδιάςει ζνα API ςτθν οκόνθ του υπολογιςτι πρζπει το API να ςυςχετιςτεί με κάποιο παράκυρο του λειτουργικοφ ςυςτιματοσ ςτο οποίο εκτελείται. Το λειτουργικό ςφςτθμα αποφαςίηει πωσ κα δεςμευτεί θ μνιμθ που κα ςχεδιάηει το API και πωσ θ βοθκθτικι μνιμθ. Συνολικά, όλεσ οι δομζσ δεδομζνων και οι κλιςεισ για να πραγματοποιθκοφν αυτζσ οι διαδικαςίεσ για τθν δζςμευςθ κι αποδζςμευςθ των πόρων ονομάηεται γραφικό περιβάλλον (graphics context). Το περιβάλλον αυτό αποκθκεφει τθν κατάςταςθ του API, τθν περιοχι τθσ μνιμθσ ςτθν οποία ςχεδιάηει θ κάρτα γραφικϊν και αναλαμβάνει τον ςυγχρονιςμό μεταξφ του API και του παρακυρικοφ λειτουργικοφ ςυςτιματοσ. Στθν περίπτωςθ του DirectX τα Windows ζχουν τζτοιεσ κλιςεισ ςυςτιματοσ για τθν εφκολθ αρχικοποίθςθ του και τθν ςχεδίαςθ γραφικϊν. Το ίδιο δεν ιςχφει για το OpenGL γιατί είναι ανεξάρτθτο λειτουργικοφ ςυςτιματοσ κι επομζνωσ δεν παρζχει ςυγκεκριμζνεσ διαδικαςίεσ. Υπάρχουν όμωσ βιβλιοκικεσ γραμμζνεσ από τρίτουσ οι 11

οποίεσ διευκολφνουν αυτι τθν διαδικαςία για ςυγκεκριμζνα λειτουργικά ςυςτιματα (Windows και Linux). Θ μνιμθ τθσ κάρτασ γραφικϊν τθσ οποίασ αλλάηουν τα περιεχόμενα ςαν αποτζλεςμα τθσ ςχεδίαςθσ, ονομάηεται «μνιμθ καρζ» (frame buffer). Σε ζνα παρακυρικό λειτουργικό ςφςτθμα, θ ζννοια του frame buffer (αρικμόσ 10 ςτθν Εικόνα 3) αναφζρεται ςε ζνα παράκυρο. Το API όταν επικυμεί να δθμιουργιςει και να δεςμεφςει τον frame buffer, ηθτά από το λειτουργικό ςφςτθμα να του παραχωριςει τουσ απαραίτθτουσ πόρουσ, κακορίηοντασ τα χρϊματα τθσ εικόνασ και διάφορεσ άλλεσ παραμζτρουσ όπωσ εξομάλυνςθ γωνιϊν (anti aliasing). Το λειτουργικό ςφςτθμα διαχειρίηεται πωσ κα ςυμπεριφερκεί το παράκυρο που ςχεδιάηουμε όταν δφο ι περιςςότερα παράκυρα επικαλφπτονται. Θ ζννοια του frame buffer δεν αναφζρεται μόνο ςε ζναν buffer, δθλαδι ςε μία μόνο περιοχι μνιμθσ. Στθν πραγματικότθτα ο frame buffer είναι μία ςυλλογι από buffers που ςχετίηονται με ζνα παράκυρο και ςτθν ςυνζχεια ο προγραμματιςτισ κάνει χριςθ αυτϊν για να επιτφχει το επικυμθτό αποτζλεςμα ςτθν οκόνθ. Για παράδειγμα ο frame buffer μπορεί να αποτελείται από τον παρακάτω ςυνδυαςμό: Ζωσ τζςςερισ προςωρινζσ μνιμεσ χρϊματοσ (color buffers) Μία προςωρινι μνιμθ βάκουσ (depth buffer) Μία προςωρινι μνιμθ αποτφπωςθσ (stencil buffer) Μία προςωρινι μνιμθ ςυςςϊρευςθσ (accumulation buffer) Μία προςωρινι μνιμθ πολλαπλισ δειγματολθψίασ (multisample buffer) Μία ι περιςςότερεσ βοθκθτικζσ προςωρινζσ μνιμεσ (auxiliary buffers) Για λόγουσ ςυντομίασ κι επειδι ζχει επικρατιςει, από εδϊ και ςτο εξισ, κα αναφερόμαςτε ςτισ παραπάνω μνιμεσ χρθςιμοποιϊντασ τθν αγγλικι ορολογία. Οι color buffers αποκθκεφουν το χρϊμα τθσ εικόνασ, ουςιαςτικά το τελικό αποτζλεςμα τθσ διαδικαςίασ ςχεδίαςθσ γραφικϊν, το οποίο ςτθν ςυνζχεια προβάλλεται ςτθν οκόνθ. Πλεσ οι ςφγχρονεσ κάρτεσ γραφικϊν υποςτθρίηουν «εμπρόσ» (front buffer)και «πίςω» (back buffer) βοθκθτικζσ μνιμεσ. Αυτό επιτρζπει ςτθν εφαρμογι να ςχεδιάηει ςτον back buffer που δεν είναι ορατόσ αρχικά ςτον χριςτθ και μόλισ τελειϊςει τθν ςχεδίαςθ να τον εναλλάςςει με τον front buffer για να ςχεδιάςει ςτθν ςυνζχεια ςε αυτόν. Δθλαδι ςε όλθ τθν διάρκεια τθσ ςχεδίαςθσ ςε αυτιν τθν περίπτωςθ ζχουμε εναλλαγζσ μεταξφ front και back buffers και αυτι θ τεχνικι λζγεται διπλι χριςθ προςωρινισ μνιμθσ (double buffering). Αν θ εφαρμογι γραφικϊν δεν κάνει χριςθ double buffering, τότε ο χριςτθσ βλζπει ςτθν οκόνθ του να ςχεδιάηονται τα γραφικά, αφοφ ουςιαςτικά βλζπει τθν μνιμθ που τροποποιεί ςυνεχϊσ θ κάρτα γραφικϊν. Αυτό προκαλεί τρεμόπαιγμα ςτθν εικόνα και γι αυτό όλεσ οι υψθλισ ποιότθτασ κινοφμενεσ εικόνεσ απαιτοφν double buffering. 12

Αν θ εφαρμογι υποςτθρίηει και ςτερεοςκοπικι απεικόνιςθ (stereo viewing) τότε απαιτοφνται τζςςερισ color buffers γιατί χρθςιμοποιείται ζνασ front buffer για το δεξί μάτι (μαηί με τον αντίςτοιχο back buffer) και ζνασ front buffer για το αριςτερό μάτι (μαηί με τον αντίςτοιχο back buffer). Θ ςτερεοςκοπικι απεικόνιςθ δθμιουργεί ψευδό-τριςδιάςτατεσ απεικονίςεισ ςχεδιάηοντασ μία φορά τθν εικόνα για το δεξί μάτι κι από ελαφρϊσ διαφορετικι γωνία για το αριςτερό μάτι και ςυνδυάηει το αποτζλεςμα ςτθν οκόνθ. Ο χριςτθσ φορϊντασ ειδικά γυαλιά που διαχωρίηουν το τελικό αποτζλεςμα για το κάκε μάτι ζχει τθν αίςκθςθ ότι τα αντικείμενα που παρακολουκεί ςτθν οκόνθ προεξζχουν από αυτιν. Ο depth buffer είναι απαραίτθτοσ, γιατί με βάςθ τα περιεχόμενα αυτισ τθσ μνιμθσ, θ GPU μπορεί να ελζγχει αν κάποιο αντικείμενο βρίςκεται πιο κοντά ςτον παρατθρθτι ι πιο μακριά από κάποιο άλλο και να το ςχεδιάηει ι να το απορρίπτει (μερικϊσ ι ολικϊσ) ςτθν τελικι εικόνα. Για κάκε νζα εικόνα που ςχεδιάηεται ςτθν οκόνθ θ GPU κρατά το βάκοσ (depth) κάκε εικονοςτοιχείου (pixel). Κακϊσ ςχεδιάηονται νζα αντικείμενα ςτθν οκόνθ, γίνεται μία ςφγκριςθ ανάμεςα ςτο depth που είναι ιδθ αποκθκευμζνο και ςτο depth του εικονοςτοιχείου που πρόκειται να γραφεί ςτθν ςυγκεκριμζνθ κζςθ. Ανάλογα με τθν παράμετρο ςφγκριςθσ (μεγαλφτερο, μικρότερο, ίςο και άλλεσ παραλλαγζσ) που ζχει ορίςει ο προγραμματιςτισ ςτο API, το ςυγκεκριμζνο εικονοςτοιχείο αντικακίςταται ι όχι. Στθν Εικόνα 5 φαίνεται μία τριςδιάςτατθ εικόνα, όπωσ ςχεδιάηεται ςτθν οκόνθ του υπολογιςτι και από κάτω τα περιεχόμενα του depth buffer. Τα εικονοςτοιχεία που βρίςκονται κοντά ςτον παρατθρθτι ζχουν ςκοφρο χρϊμα (μικρι απόςταςθ) ενϊ εκείνα που βρίςκονται μακριά ζχουν ανοιχτό χρϊμα (μεγάλθ απόςταςθ). Με βάςθ αυτόν τον depth buffer θ GPU επιτυγχάνει να ςχεδιάηει με τθν ςωςτι ςειρά τα αντικείμενα ςτθν τελικι εικόνα. Ο stencil buffer χρθςιμοποιείται για να δθμιουργιςει πολφπλοκα μοτίβα ςε διάφορεσ περιοχζσ ςτθν οκόνθ. Αποκθκεφει για κάκε εικονοςτοιχείο τθσ οκόνθσ μία ακζραια τιμι. Ο προγραμματιςτισ μπορεί να χειρίηεται ειδικά τα εικονοςτοιχεία για τα οποία ο stencil buffer ζχει μία ςυγκεκριμζνθ τιμι. Μερικζσ από τισ χριςεισ του stencil buffer είναι θ ςχεδίαςθ ςκιϊν (stencil - volume shadows), οι αντανακλάςεισ, κακϊσ και θ βελτιςτοποίθςθ τθσ ταχφτθτασ ςτθν ςχεδίαςθ, κακϊσ μπορεί να αποφευχκοφν να ςχεδιάηονται περιοχζσ τισ οκόνθσ, που πάντα καλφπτονται από ςυγκεκριμζνα αντικείμενα. Για παράδειγμα ςε ζναν εξομοιωτι αγϊνων ταχφτθτασ, ο οδθγόσ βλζπει τον περιβάλλον μζςα από το αυτοκίνθτο που οδθγεί. Το μόνο μζροσ τθσ εικόνασ που πρζπει να ανανεϊνεται ςε κάκε νζα ςχεδίαςθ, είναι αυτό που φαίνεται από το τηάμι και τα παράκυρα του αυτοκινιτου κακϊσ το εςωτερικό του αυτοκινιτου κα φαίνεται πάντα κι είναι ςτατικό. Αν, λοιπόν, γεμίςουμε τον stencil buffer, με τιμζσ διαφορετικζσ του μθδενόσ, ςτα εικονοςτοιχεία τα οποία βρίςκονται ςε περιοχζσ τισ οκόνθσ, ςτισ οποίεσ κα ςχεδιαςτεί το εςωτερικό του 13

αυτοκινιτου, τότε κα πρζπει να επιλζξουμε να ςχεδιάςουμε μόνο τισ περιοχζσ τθσ οκόνθσ, για τισ οποίεσ θ τιμι του stencil buffer είναι ίςθ με μθδζν. Ο accumulation buffer υπάρχει ςτο OpenGL κι όχι ςτο DirectX, όμωσ και τα δφο APIs μποροφν με διαφορετικό τρόπο, να παρζχουν τα ίδια αποτελζςματα. Ο accumulation buffer είναι μία μνιμθ με ακρίβεια μεγαλφτερθ του color buffer ςε κάκε ςτοιχείο του. Ρολλαπλζσ εικόνεσ από τον color buffer, μποροφν να ςυνδυαςτοφν ςτον accumulation buffer, ζτςι ϊςτε να ςυνκζςουν μία καινοφρια εικόνα. Μία δυνατότθτα που παρζχει αυτόσ o buffer, είναι να ςχεδιαςτοφν πολλζσ εικόνεσ ενόσ αντικειμζνου που κινείται, και ςτθν ςυνζχεια με διαίρεςθ του αποτελζςματοσ, με τον αρικμό των εικόνων που ςυνδυάςτθκαν, να ςχεδιάςουμε το αντικείμενο αυτό με το εφζ τθσ κίνθςθσ (motion blurring). Στθν Εικόνα 6, φαίνεται ζνα τζτοιο παράδειγμα. Εικόνα 5: Επάνω θ τελικι εικόνα και κάτω τα περιεχόμενα του depth buffer. 14

Πταν ςχεδιάηονται τα γραφικά ςτθν οκόνθ του υπολογιςτι για κάκε ζνα εικονοςτοιχείο γίνεται ζνασ ζλεγχοσ, για το πιο τμιμα τθσ γεωμετρίασ το καλφπτει και επομζνωσ πωσ ακριβϊσ κα χρωματιςτεί. Αυτό οδθγεί ςε εικόνεσ, που το περίγραμμα των αντικειμζνων διαγράφεται ζντονα, μίασ και λαμβάνει μία τιμι και τα γειτονικά του εικονοςτοιχεία ζχουν διαφορετικό χρϊμα. Το φαινόμενο αυτό μπορεί να παρατθρθκεί ςτθν αριςτερι ςφαίρα τθσ Εικόνα 7 και παρουςιάηεται πιο ζντονα ςε ςχιματα των οποίων τα περιγράμματα και οι πλευρζσ ςχεδιάηονται υπό γωνία ςε ςχζςθ με τον κάκετο και οριηόντιο άξονα τθσ οκόνθσ. Ο mutisample buffer επιτρζπει να εξομαλφνονται οι γωνίεσ ςτθν ςχεδίαςθ των αντικειμζνων ςτθν οκόνθ. Εικόνα 6: Motion blurring. Αυτι θ τεχνικι δίνει τθν αίςκθςθ τθσ κίνθςθσ ςτον παρατθρθτι. τθν επάνω εικόνα ο παρατθρθτισ δεν κινείται ωσ προσ το αντικείμενο, ενϊ ςτθν κάτω κινείται ωσ προσ τον οριηόντιο άξονα. Ουςιαςτικά με τον μνιμθ πολλαπλισ δειγματολθψίασ (multisample buffer) τα εικονοςτοιχεία δειγματολθπτοφνται ςε μεγαλφτερθ ανάλυςθ και εξετάηεται το ποςοςτό του εικονοςτοιχείου που περιζχεται ςε ζνα ςχιμα και πόςο ςε ζνα άλλο, με αποτζλεςμα το τελικό του χρϊμα να είναι ζνασ μζςοσ όροσ των δφο, ανάλογα με τα ποςοςτά κάλυψθσ. Αυτό οδθγεί ςε εικόνεσ πολφ καλφτερθσ ποιότθτασ όπωσ είναι θ ςφαίρα ςτο δεξί τμιμα τθσ Εικόνα 7. 15

Εικόνα 7: Εξομάλυνςθ γωνιϊν με χριςθ του multisample buffer. Θ χριςθ, όμωσ, τθσ μνιμθσ πολλαπλισ δειγματολθψίασ, επιβαρφνει ςε μεγάλο ποςοςτό τθν ταχφτθτα ςχεδίαςθσ, μιασ και αυξάνονται ςθμαντικά οι απαιτιςεισ ςε ποςότθτα και κατά ςυνζπεια ςε διαμεταγωγι μνιμθσ (τα εικονοςτοιχεία δειγματολθπτοφνται πολλαπλζσ φορζσ, από 2 ζωσ και 16 φορζσ ανάλογα με τθν ποιότθτα τθσ εξομάλυνςθσ γωνιϊν). Τζλοσ, χρθςιμοποιοφνται βοθκθτικζσ μνιμεσ, οι οποίοι δεν εμφανίηονται ςτθν οκόνθ, αλλά αποκθκεφουν τα αποτελζςματα ενδιάμεςων υπολογιςμϊν, που χρειάηονται κατά τον φωτιςμό ι τθν ςχεδίαςθ τθσ γεωμετρίασ. Δεν υπάρχει κάποιοσ περιοριςμόσ ςτον αρικμό των βοθκθτικϊν μνθμϊν που κα χρθςιμοποιθκοφν. Πλα τα παραπάνω είδθ από βοθκθτικζσ μνιμεσ αποκθκεφονται ςτθν μνιμθ τθσ κάρτασ γραφικϊν ι ςτθν μνιμθ (RAM) τθσ CPU εφ όςον θ πρϊτθ δεν επαρκεί. Γενικά, ιδιαίτερθ προςοχι, κα πρζπει να δίδεται ςτο ποςοςτό χριςθσ τθσ μνιμθσ τθσ κάρτασ γραφικϊν, γιατί πικανι μεταφορά από και προσ τθν RAM του ςυςτιματοσ είναι ιδιαίτερα δαπανθρι ςε χρόνο και υπολογιςτικοφσ πόρουσ, με αποτζλεςμα κατακόρυφθ πτϊςθ των επιδόςεων. 16

Κεφϊλαιο 2 ο Διαδικαςύα παραγωγόσ γραφικών (Graphics Processing Pipeline) Αποςτολό δεδομϋνων ςτο API Θ ανάλυςθ που κα ακολουκιςει ςτθν ςυνζχεια κα γίνει με βάςθ τθν Εικόνα 3 και τθν αρίκμθςθ που υπάρχει ςε αυτιν [7]. Τα δεδομζνα που διαχειρίηονται τα APIs, για τθν παραγωγι τριςδιάςτατων εικόνων ανικουν, κυρίωσ, ςε δφο κατθγορίεσ. Είναι γεωμετρία ι υφζσ (αρικμοί 1 και 11). Θ μνιμθ που αποκθκεφει αυτά τα δεδομζνα, μπορεί να είναι είτε θ RAM, είτε θ μνιμθ τθσ GPU με τθν δεφτερθ να προτιμάται, λόγω τθσ μεγάλθσ ταχφτθτάσ τθσ. Ο προγραμματιςτισ μπορεί να επιλζξει ςε ποια μνιμθ κα αποκθκεφςει ςυγκεκριμζνα δεδομζνα, χρθςιμοποιϊντασ το API ι να αφιςει το API να αποφαςίςει, κάνοντασ το ίδιο βελτιςτοποίθςθ. Θ γεωμετρία δεν αποκθκεφεται ςτα APIs ωσ τριςδιάςτατα μοντζλα, όπωσ αυτά δθμιουργοφνται από διάφορα προγράμματα, όπωσ το 3D Studio Max, το Maya κ.α. Θ γεωμετρία που υποςτθρίηουν τα APIs είναι ςθμεία, γραμμζσ, ομάδεσ ςυνεχόμενων γραμμϊν, τρίγωνα, ομάδεσ τριγϊνων, τετράγωνα και ομάδεσ τετραγϊνων. Επιπλζον τα APIs δεν χρθςιμοποιοφν τον αυςτθρό μακθματικό οριςμό για τα ςθμεία και τισ γραμμζσ. Ζνα ςθμείο ςτον χϊρο είναι ςυνικωσ ίςο με ζνα εικονοςτοιχείο τθσ οκόνθσ, ζχει δθλαδι διαςτάςεισ. Από τθν άλλθ μία ευκεία ζχει πάχοσ επίςθσ ίςο με το πάχοσ ενόσ εικονοςτοιχείου, δεν είναι δθλαδι απείρωσ λεπτι κι ζχει άκρα, δθλαδι είναι ευκφγραμμο τμιμα. Το API, δθλαδι, λειτουργεί και χειρίηεται τθν γεωμετρία, ςε πολφ χαμθλό επίπεδο. Συγκεκριμζνα όλεσ οι παραπάνω βαςικζσ γεωμετρικζσ δομζσ, εκτόσ από τα ςθμεία ςτον χϊρο και τισ γραμμζσ, ςυνικωσ αναπαρίςτανται με τρίγωνα. Υπάρχει ζνασ πολφ ςθμαντικόσ λόγοσ για τον οποίο γίνεται αυτό. Τρία, μθ ςυνευκειακά ςθμεία ςτον χϊρο (τρίγωνο), ορίηουν πάντα ζνα επίπεδο, ανεξάρτθτα από το είδοσ του μεταςχθματιςμοφ που εφαρμόηεται ςε αυτά. Ζτςι το υλικό τθσ κάρτασ γραφικϊν και το API μπορεί να διαχειριςτεί τα τρίγωνα και αποφεφγονται περιπτϊςεισ όπου θ εφαρμογι ενόσ μεταςχθματιςμοφ, κα δθμιουργοφςε επιπλζον ςθμεία. Ζνα τζτοιο παράδειγμα παρουςιάηεται ςτθν Εικόνα 8. Επιπλζον, όλα τα πολφγωνα πρζπει να είναι κυρτά και δεν πρζπει οι ακμζσ που ορίηουν τα πολφγωνα να τζμνονται. Ρροφανϊσ, δεν μποροφν να ςχεδιαςτοφν πολφγωνα με τρφπεσ-οπζσ ςτο ςϊμα τουσ. Τζτοιεσ περιπτϊςεισ παρουςιάηονται ςτθν Εικόνα 9. 17

Εικόνα 8: Πρόβλθμα κατά τθν ςχεδίαςθ ενόσ ςχιματοσ που δεν αποτελείται από τρίγωνα. Σο ςχιμα ςτα αριςτερά αποτελείται από 4 ςθμεία ςτο χϊρο (κόκκινεσ τελείεσ) αλλά μετά από ςυνεχείσ μεταςχθματιςμοφσ καταλιγει ςτα δεξιά ςε ζνα ςχιμα που πλζον αποτελείται από 5 ςθμεία. Κα πρζπει να ςθμειωκεί, πωσ τα APIs δεν υποςτθρίηουν τθν ςχεδίαςθ αυτϊν των πολυγϊνων (Εικόνα 9) απ ευκείασ. Αυτό ςθμαίνει πωσ υπάρχουν τρόποι να παρακαμφκοφν οι περιοριςμοί, ςπάηοντασ το κάκε πολφγωνο που δεν ικανοποιεί τουσ περιοριςμοφσ, ςε άλλα μικρότερα ςχιματα, που υποςτθρίηονται από τα APIs. Γι αυτό αναφζρκθκε ιδθ, πωσ ςυνικωσ, χρθςιμοποιοφνται τρίγωνα κατά τθν ςχεδίαςθ, που δεν παρουςιάηουν περιοριςμοφσ ςτα ςχιματα που μποροφν να περιγράψουν. Σφμφωνα με τα παραπάνω, για να αποςταλεί ςτο API ζνα τριςδιάςτατο μοντζλο, πρζπει κάποιο άλλο πρόγραμμα, που ςυνικωσ γράφουμε εμείσ, να διαβάςει τα δεδομζνα που περιζχει, και να τα μετατρζψει ςε μία από τισ βαςικζσ δομζσ γεωμετρίασ που δζχεται το API. Επιπλζον ζνα τριςδιάςτατο μοντζλο μπορεί να περιζχει πολφ περιςςότερεσ πλθροφορίεσ, πζραν τθσ γεωμετρίασ. Εικόνα 9: τα αριςτερά φαίνονται πολφγωνα που μπορεί να ςχεδιαςτοφν με τα APIs ενϊ ςτα δεξιά φαίνονται πολφγωνα που δεν μποροφν να ςχεδιαςτοφν απευκείασ. Θ επιπλζον πλθροφορία, κα πρζπει να εξαχκεί κι αυτι και να δοκεί ςτο API, εάν επικυμοφμε να τθν χρθςιμοποιιςουμε κατά τθν ςχεδίαςθ. Σιμερα, το ελάχιςτο τθσ πλθροφορίασ που ςυνικωσ περιζχει ζνα μοντζλο, είναι τα ςθμεία ςτο χϊρο (vertices), τα οποία ορίηουν το μοντζλο και τα κάκετα διανφςματα (normals), που αντιςτοιχοφν ςε κάκε ςθμείο του μοντζλου. Επιπλζον μπορεί να περιζχονται μία ι περιςςότερεσ ςυντεταγμζνεσ για τθν εφαρμογι υφϊν επάνω ςτθν γεωμετρία. Τζλοσ, μπορεί να περιζχονται θ εφαπτομζνθ και θ ςυνεφαπτομζνθ ςε κάκε ςθμείο του μοντζλου, ι βάρθ και δείκτεσ τα οποία χρθςιμοποιοφνται ςε ςυνδυαςμό με πίνακεσ για τθν δθμιουργία κινιςεων και παραμορφϊςεων των μοντζλων (π.χ. ζνασ άνκρωποσ που περπατά). 18

Συνολικά, θ γεωμετρία ενόσ τριςδιάςτατου μοντζλου, ζτςι όπωσ τθν αντιλαμβάνεται το API, ζχει ςαν κεντρικι οντότθτα τα ςθμεία ςτον χϊρο, τα οποία εμπλουτίηονται με διάφορεσ επιπλζον τιμζσ. Οι τιμζσ αυτζσ, χρθςιμοποιοφνται για τθν δθμιουργία κατάλλθλων ςκιάςεων ι τθν δθμιουργία κινιςεων ςτθν γεωμετρία (animation). Πταν εξάγουμε, λοιπόν, τθν γεωμετρία από το μοντζλο, κα πρζπει ζπειτα να τθν αποςτείλουμε ςτο API. Υπάρχουν διάφοροι τρόποι για να γίνει αυτό, οι οποίοι ζχουν διαφορετικζσ αποδόςεισ. Ο πιο απλόσ (και προφανισ) τρόποσ, είναι να αποςτζλλουμε ζνα ςθμείο τθν φορά. Συγκεκριμζνα υπάρχουν ςυναρτιςεισ ςτα δφο APIs (DirectX & OpenGL) που ορίηουν ζνα ςθμείο. Πταν θ ςυνάρτθςθ ενόσ ςθμείου κλθκεί για δεφτερθ φορά, τότε αποκθκεφεται το πρϊτο ςθμείο κι οφτω κακ εξισ. Για παράδειγμα με τον ακόλουκο κϊδικα: Ξεκίνα πολφγωνο: Συντεταγμζνεσ ςθμείου(0.0, 0.0); Συντεταγμζνεσ ςθμείου (0.0, 3.0); Συντεταγμζνεσ ςθμείου (3.0, 3.0); Συντεταγμζνεσ ςθμείου (4.0, 1.5); Συντεταγμζνεσ ςθμείου (3.0, 0.0); Σταμάτα πολφγωνο; Σχεδιάηουμε το παρακάτω πολφγωνο: 0,3 3,3 4,1.5 0,0 3,0 Ραρατθροφμε πωσ ορίηουμε ςτο API, τί είδουσ γεωμετρικό ςχιμα κζλουμε να ςχεδιάςουμε (πολφγωνο ςτθν προκειμζνθ περίπτωςθ), και ςτθν ςυνζχεια ορίηουμε τα ςθμεία που ορίηουν αυτιν τθν γεωμετρία. Ανάλογα με το πόςα ςθμεία ορίηουμε ανάμεςα ςτισ κλιςεισ Ξεκίνα πολφγωνο και Σταμάτα πολφγωνο, τόςα ςθμεία κα ζχει και το τελικό ςχιμα. Γενικά ιςχφει ο κανόνασ, ότι ζνα γεωμετρικό ςχιμα, ςχεδιάηεται κάκε φορά που υπάρχουν αρκετζσ κλιςεισ τθσ ςυνάρτθςθσ Συντεταγμένεσ ςημείου(). Αν κζλαμε να ςχεδιάςουμε για παράδειγμα ανεξάρτθτα τρίγωνα, τότε κάκε τρίγωνο κεωρείται ολοκλθρωμζνο, όταν θ ςυνάρτθςθ Συντεταγμένεσ ςημείου() ζχει κλθκεί τρεισ φορζσ. Αν κζλαμε να ςχεδιάςουμε μία ομάδα τριγϊνων (που ζχουν δθλαδι μία κοινι πλευρά ανά δφο) τότε οι πρϊτεσ τρεισ κλιςεισ τθσ Συντεταγμένεσ ςημείου() ορίηουν το πρϊτο τρίγωνο και κάκε μία επιπλζον ζνα νζο τρίγωνο. Ανάμεςα ςτισ κλιςεισ Συντεταγμένεσ ςημείου() μποροφςαμε να ορίςουμε και παραμζτρουσ όπωσ οι ςυντεταγμζνεσ υφισ, το κάκετο διάνυςμα (ςτθν επιφάνεια 19

που ορίηει το πολφγωνο), το χρϊμα το οποίο κα ζχει κάκε ςθμείο του πολυγϊνου κ.α. Ζτςι ο ψευδοκϊδικασ κα μποροφςε να γίνει: Ξεκίνα πολφγωνο: Χρϊμα ςθμείου( ); Κάκετο διάνυςμα ςθμείου( ); Συντεταγμζνεσ ςθμείου (0.0, 0.0); Χρϊμα ςθμείου( ); Κάκετο διάνυςμα ςθμείου( ); Συντεταγμζνεσ ςθμείου (0.0, 3.0); Ρρϊτο ςθμείο Δεφτερο ςθμείο Χρϊμα ςθμείου( ); Κάκετο διάνυςμα ςθμείου( ); Συντεταγμζνεσ ςθμείου (3.0, 3.0); Χρϊμα ςθμείου( ); Κάκετο διάνυςμα ςθμείου( ); Συντεταγμζνεσ ςθμείου (4.0, 1.5);... Χρϊμα ςθμείου( ); Κάκετο διάνυςμα ςθμείου( ); Συντεταγμζνεσ ςθμείου (3.0, 0.0); Σταμάτα πολφγωνο; Ν-οςτό ςθμείο Μία δεφτερθ μζκοδοσ αποςτολισ δεδομζνων ςτο API, είναι θ δθμιουργία μονοδιάςτατων πινάκων (arrays). Οργανϊνουμε τα δεδομζνα τθσ γεωμετρίασ και των ιδιοτιτων τθσ (ςυντεταγμζνεσ υφισ, κάκετα διανφςματα, χρϊμα) ςε arrays τα οποία μασ επιτρζπουν να ςχεδιάηουμε ζνα μεγάλο αρικμό από ςχιματα με μία κλιςθ του API. Θ πρϊτθ μζκοδοσ που παρουςιάςτθκε, καλεί ςυνεχϊσ ςυναρτιςεισ για τθν ςχεδίαςθ, με αποτζλεςμα να ζχουμε κόςτοσ, το οποίο γίνεται μεγαλφτερο ανάλογα με τθν ποςότθτα τθσ γεωμετρίασ που κζλουμε να ςχεδιάςουμε. Θ τρίτθ μζκοδοσ αποςτολισ δεδομζνων ςτο API, που είναι θ πιο ςφγχρονθ κι αποδοτικι, μασ επιτρζπει να αποκθκεφουμε τα δεδομζνα τθσ γεωμετρίασ ςτθν μνιμθ τθσ κάρτασ γραφικϊν. Ρροςφζρει τθν μεγαλφτερθ απόδοςθ, γιατί δεν μεταφζρονται δεδομζνα από και προσ τθν κάρτα γραφικϊν. Με αυτιν τθν μζκοδο δθμιουργοφμε και δεςμεφουμε προςωρινζσ μνιμεσ (buffers) ςτθν μνιμθ τθσ κάρτασ γραφικϊν (ι ςε κάποια ειδικι μνιμθ τθσ CPU, εφόςον θ πρϊτθ ζχει γεμίςει) ςτισ οποίεσ αποκθκεφουμε τα δεδομζνα τθσ γεωμετρίασ. Αυτι θ μζκοδοσ είναι ιδιαίτερα αποτελεςματικι, με τθν προχπόκεςθ πωσ τα δεδομζνα δεν μεταβάλλονται, αφοφ ςε αυτι τθν περίπτωςθ κα πρζπει να αποςτζλλονται τα νζα δεδομζνα ςτθν μνιμθ τθσ κάρτασ γραφικϊν, ανάλογα με τθν ςυχνότθτα αλλαγισ τουσ (π.χ. ςε κάκε νζα ςχεδίαςθ τθσ εικόνασ). Αυτό μπορεί να αποφευχκεί αν τα δεδομζνα δεν αλλάηουν 20

ςτθν CPU ςτθν οποία εκτελείται το πρόγραμμα, αλλά ςτθν GPU. Κάτι τζτοιο όμωσ δεν είναι πάντα εφικτό (εξαρτάται από τθν πολυπλοκότθτα του αλγορίκμου) ι είναι ιδιαίτερα χρονοβόρα θ δθμιουργία και θ βελτιςτοποίθςθ μίασ τζτοιασ προςζγγιςθσ. Επεξεργαςύα γεωμετρύασ Το επόμενο βιμα ςτθν ςχεδίαςθ, είναι θ επεξεργαςία των ςθμείων τθσ γεωμετρίασ (αρικμοί 2,3,4 ςτθν Εικόνα 3). Σε αυτό το επίπεδο, τα ςθμεία μεταςχθματίηονται από τουσ πίνακεσ μεταςχθματιςμοφ μοντζλου, παρατθρθτι και προβολισ. Επιπλζον μεταςχθματίηονται τα κάκετα διανφςματα κάκε επιφάνειασ (normals), με βάςθ τον πίνακα του παρατθρθτι, και τζλοσ μεταςχθματίηονται οι ςυντεταγμζνεσ των υφϊν. Επιπλζον, ο προγραμματιςτισ ελζγχει τον αρικμό και τισ παραμζτρουσ των πθγϊν φωτόσ που κα περιζχει θ ςκθνι. Για να γίνουν κατανοθτά τα παραπάνω, κα γίνει μία ανάλυςθ του τρόπου με τον οποίο ορίηονται τα ςυςτιματα ςυντεταγμζνων ςτα APIs και πωσ αναπαρίςτανται τα ςθμεία ςτον χϊρο. Στθν ςυνζχεια, κα παρουςιαςτοφν αναλυτικά οι πίνακεσ μεταςχθματιςμϊν που εφαρμόηονται και τι αποτελζςματα ζχουν ςτθν ςχεδίαςθ. Σύςτημα Συντεταγμένων Tα 2 APIs χρθςιμοποιοφν καρτεςιανό ςφςτθμα ςυντεταγμζνων με τρεισ άξονεσ (Χ, Υ, Η) [15]. Για το DirectX, το ςφςτθμα αυτό βαςίηεται ςτον κανόνα του αριςτεροφ χεριοφ ενϊ ςτο OpenGL, το ςφςτθμα βαςίηεται ςτον κανόνα του δεξιοφ χεριοφ. Θ Εικόνα 10, δείχνει ακριβϊσ αυτοφσ τουσ δφο κανόνεσ και πωσ ορίηουν τουσ άξονεσ ςτο κάκε API. Εικόνα 10: Καρτεςιανά ςυςτιματα ςυντεταγμζνων. Σο αριςτερό βαςίηεται ςτον κανόνα του αριςτεροφ χεριοφ (DirectX) ενϊ το δεξί ςτον κανόνα του δεξιοφ χεριοφ (OpenGL). Αναπαράςταςη ςημείων Θ αναπαράςταςθ των ςθμείων γίνεται με ομογενείσ ςυντεταγμζνεσ [15]. Αυτό ςθμαίνει, πωσ εςωτερικά ςτα APIs, κάκε φορά που ορίηουμε ζνα διςδιάςτατο ι τριςδιάςτατο ςθμείο, αυτό αναπαρίςταται ςαν μία τετράδα αρικμϊν τθσ μορφισ: (X, Y, Z, W) 21

Τα X, Υ, Ζ είναι οι ςυνιςτϊςεσ ςτουσ άξονεσ X, Y, και Ζ αντίςτοιχα, ενϊ το W είναι μία ςυνιςτϊςα που θ προκακοριςμζνθ τθσ τιμι είναι 1 και μπορεί να αλλάηει. Κατά τθν επεξεργαςία ςθμείων ςτθν GPU, μποροφμε να αλλάηουμε όλεσ τισ παραπάνω τιμζσ ενόσ ςθμείου, ανάλογα με τθν επεξεργαςία που κζλουμε να επιτφχουμε. Κάκε διάνυςμα τθσ παραπάνω μορφισ, αναπαριςτά ζνα ςθμείο ομογενϊν ςυντεταγμζνων, αν τουλάχιςτον ζνα από τα ςτοιχεία του είναι μθ μθδενικό. Αν ο αρικμόσ a είναι μθ μθδενικόσ, τότε οι τετράδεσ (x,y,z,w) και (ax,ay,az,aw) αναπαριςτοφν το ίδιο ςθμείο. Αυτό ςυμβαίνει, γιατί οι ςυντεταγμζνεσ (X,Y,Z) κάκε τετράδασ διαιροφνται από τθν τζταρτθ ςυντεταγμζνθ (τθν W). Ζνα ςθμείο ςτον ευκλείδειο χϊρο με ςυντεταγμζνεσ (x,y,z) αναπαρίςταται ςε ομογενείσ ςυντεταγμζνεσ ωσ (x,y,z,1) και αντίςτοιχα ζνα διςδιάςτατο ςθμείο (x,y) ωσ (x,y,0,1). Πςο θ ςυντεταγμζνθ W είναι διάφορθ του μθδενόσ, το ςθμείο (x,y,z,w) αναπαριςτά το ςθμείο (x/w,y/w,z/w) ςτον χϊρο. Αν W = 0, τότε το ςθμείο βρίςκεται ςτο άπειρο. Για να γίνει αυτό καλφτερα κατανοθτό, κεωροφμε τθν αλλθλουχία των ςθμείων (1,2,0,1), (1,2,0,0.01) και (1,2,0,0.0001) που αντιςτοιχοφν ςτα ευκλείδεια ςθμεία (1, 2), (100, 200) και (10000, 20000). Αυτι θ ακολουκία από ςθμεία, που κινείται προσ το άπειρο, βρίςκεται επάνω ςτθν γραμμι 2x = y. Επομζνωσ, ζνα ςθμείο, το οποίο ζχει ςυντεταγμζνεσ (1,2,0,0), βρίςκεται ςτο άπειρο, ςτθν κατεφκυνςθ αυτισ τθσ γραμμισ. Μεταςχηματιςμοί Θ αναπαράςταςθ των ςθμείων με ομογενείσ ςυντεταγμζνεσ, εξυπθρετεί τουσ μεταςχθματιςμοφσ τουσ οποίουσ μποροφμε να εφαρμόςουμε, με τθν ζννοια, ότι οι αυτοί μποροφν να αναπαραςτακοφν ωσ πολλαπλαςιαςμόσ πινάκων διάςταςθσ 4x4 [8], [15]. Αυτοί οι μεταςχθματιςμοί, ςαν κφριο ςκοπό ζχουν να τοποκετιςουν τα αντικείμενα τθσ ςκθνισ ςτον χϊρο και να τα απεικονίςουν ςτθν επίπεδθ (διςδιάςτατθ) οκόνθ. Επιπλζον, μεταςχθματιςμοί χρθςιμοποιοφνται για τον υπολογιςμό των ςκιάςεων, δθλαδι των αλλθλεπιδράςεων του φωτόσ με τα αντικείμενα. Πλοι οι μεταςχθματιςμοί για τθν απεικόνιςθ τριςδιάςτατων εικόνων ςτθν οκόνθ του υπολογιςτι, ακολουκοφν τθν ίδια λογικι με τισ διαδικαςίεσ που ακολουκοφμε για να φωτογραφιςουμε ςτον πραγματικό κόςμο. Στθν Εικόνα 11, φαίνεται θ αναλογία αυτι. Συγκεκριμζνα ςτα αριςτερά τθσ εικόνασ κι από πάνω προσ τα κάτω παρατθροφμε τισ εξισ διαδικαςίεσ: Τοποκζτθςθ τθσ κάμερασ ςτον χϊρο (ίςωσ και με τθν χριςθ ενόσ τριπόδου) 22

Τοποκζτθςθ ςτον χϊρο των αντικειμζνων που πρόκειται να φωτογραφιςουμε (π.χ. των προςϊπων τα οποία κζλουμε να φωτογραφιςουμε) φκμιςθ του φακοφ ωσ προσ το εφροσ του πεδίου κζαςθσ (field of view). Ουςιαςτικά, ρυκμίηουμε πόςα αντικείμενα κα χωρά θ τελικι εικόνα και πόςο παραμορφωμζνα κα είναι αυτά, όςο περιςςότερα ςτθν εικόνα (ευρυγϊνιοσ φακόσ) τόςο πιο παραμορφωμζνα. Εμφάνιςθ κι εκτφπωςθ τθσ φωτογραφίασ. Διαλζγουμε τισ διαςτάςεισ (μζγεκοσ, αναλογία πλάτουσ / φψουσ) ςτισ οποίεσ κζλουμε να εκτυπϊςουμε τθν φωτογραφία. Στον φυςικό κόςμο Στον υπολογιςτι Στιςιμο τριπόδου Τοποκζτθςθ μοντζλων Τοποκζτθςθ του πεδίου παρατιρθςθσ ςτον εικονικό κόςμο Τοποκζτθςθ μοντζλων Ρροβολι φκμιςθ φακοφ Εκτφπωςθ φωτογραφίασ Κακοριςμόσ του ςχιματοσ του πεδίου παρατιρθςθσ Ρροβολι τθσ εικόνασ ςτθν οκόνθ του υπολογιςτι Επιλογι μεγζκουσ εκτφπωςθσ Εικόνα 11: Αναλογία διαδικαςιϊν φωτογράφθςθσ με τουσ μεταςχθματιςμοφσ για τθν παραγωγι γραφικϊν. Στθν δεξιά ςτιλθ τθσ Εικόνα 11, παρατθροφμε τισ αντίςτοιχεσ διαδικαςίεσ για τθν προβολι γεωμετρίασ ςτθν οκόνθ του υπολογιςτι. 23

Ραρακάτω, κα περιγραφοφν με μακθματικά, οι διαδικαςίεσ αυτζσ και ςτθν Εικόνα 12, εμφανίηονται τα ονόματα κι θ ςειρά με τθν οποία εφαρμόηονται οι μεταςχθματιςμοί που αντιςτοιχοφν ςτισ διαδικαςίεσ του φυςικοφ κόςμου. 1 2 3 4 5 ΘΜΕΙΟ (X,Y,Z,W) Μεταςχθμ ατιςμόσ μοντζλου Μεταςχθμ ατιςμόσ παρατθρθτ ι Μεταςχθμ ατιςμόσ προβολισ Διαίρεςθ προοπτικι σ Μεταςχθμ ατιςμόσ παρακφρο υ Συντεταγμζνεσ εικονικοφ κόςμου Συντεταγμζνεσ ματιοφ Συντεταγμζνεσ αποκοπισ Κανονικοποιθμζνεσ ςυντεταγμζνεσ Συντεταγμζνεσ παρακφρου Εικόνα 12: Μεταςχθματιςμοί για τθν προβολι γεωμετρίασ ςτθν οκόνθ του υπολογιςτι. Ραραπάνω αναφζραμε πωσ αποςτζλλουμε ςτο API, τα ςθμεία που εξάγουμε από τα τριςδιάςτατα μοντζλα, μαηί με όποια επιπλζον πλθροφορία περιζχουν. Τα ςθμεία αυτά φτάνουν ςτθν GPU, θ οποία εφαρμόηει τουσ 5 παραπάνω μεταςχθματιςμοφσ για να τα μετατρζψει ςε διςδιάςτατθ εικόνα, θ οποία δζχεται επιπλζον επεξεργαςία ςε επόμενα ςτάδια τθσ ςχεδίαςθσ γραφικϊν και πριν προβλθκεί ςτθν οκόνθ του υπολογιςτι. Αναφζρουμε εδϊ, πωσ το OpenGL και το DirectX χρθςιμοποιοφν διαφορετικό τρόπο για τθν αποκικευςθ των πινάκων των μεταςχθματιςμϊν. Συγκεκριμζνα, το OpenGL χρθςιμοποιεί αποκικευςθ κατά ςτιλεσ, ενϊ το DirectX κατά γραμμζσ. Στουσ παρακάτω 4Χ4 πίνακεσ, οι αρικμοί είναι θ ςειρά με τθν οποία αποκθκεφονται και προςπελαφνονται τα ςτοιχεία των πινάκων ςε κάκε ζνα από τα APIs: DirectX 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 OpenGL 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16 Μεταςχηματιςμόσ μοντέλου Πταν δθμιουργοφμε ζνα τριςδιάςτατο μοντζλο (π.χ. ζνα αυτοκίνθτο), το ςχεδιάηουμε με βάςθ κάποιο ςυγκεκριμζνο ςφςτθμα ςυντεταγμζνων. Για παράδειγμα θ αρχι των αξόνων (0,0,0,1), μπορεί να βρίςκεται ςτθν κζςθ του οδθγοφ, ςτθν περίπτωςθ του αυτοκινιτου. Αντίςτοιχα, ζχουν οριςτεί όλα τα άλλα 24

ςθμεία τθσ γεωμετρίασ του αυτοκινιτου, ςχετικά με τθν αρχι των αξόνων. Πταν, όμωσ, κζλουμε να τοποκετιςουμε το αυτοκίνθτο ςτον τριςδιάςτατο κόςμο που δθμιουργοφμε, το πιο πικανό είναι, όχι μόνο να το τοποκετιςουμε ςε διαφορετικό ςθμείο, αλλά, επιπλζον, να το κάνουμε να κινείται. Αυτό ςθμαίνει, πωσ πρζπει να μεταςχθματίηουμε όλα τα ςθμεία του αυτοκινιτου (τθν γεωμετρία του δθλαδι) ςε διαφορετικό ςθμείο κάκε φορά. Αυτόσ, ακριβϊσ, είναι ο ρόλοσ του μεταςχθματιςμοφ μοντζλου, κατά τθν διαδικαςία παραγωγισ τριςδιάςτατων γραφικϊν. Με άλλα λόγια, αυτόσ ο μεταςχθματιςμόσ τοποκετεί τα αντικείμενα ςτον χϊρο, ζχοντασ ςαν ςφςτθμα αναφοράσ, ζνα ενιαίο ςφςτθμα ςυντεταγμζνων. Ππωσ αναφζρκθκε, κάκε μεταςχθματιςμόσ αναπαρίςταται με ζναν πίνακα διαςτάςεων 4x4. Ραρακάτω, παρουςιάηονται οι μεταςχθματιςμοί μοντζλου και τα είδθ τουσ. Κάκε μεταςχθματιςμόσ ζχει ζνα αποτζλεςμα πάνω ςτθν γεωμετρία. Συνδυάηοντασ πολλά από τα είδθ των παρακάτω μεταςχθματιςμϊν μοντζλου, κι εφαρμόηοντάσ τα, με τθν κατάλλθλθ ςειρά επάνω ςτθν γεωμετρία, μποροφμε να επιτφχουμε οποιοδιποτε αποτζλεςμα (περιςτροφι γφρω από τυχαίο άξονα, μεγζκυνςθ/ςμίκρυνςθ μετακίνθςθ κ.α.). Πλοι οι πίνακεσ που κα παρουςιαςτοφν, ακολουκοφν τθν λογικι του OpenGL, δθλαδι ορίηονται κατά ςτιλεσ. Μετατόπιςη Ο πίνακασ που μετατοπίηει ςθμεία ςτο τριςδιάςτατο χϊρο είναι ο παρακάτω: Τ = 1 0 0 x 0 1 0 y 0 0 1 z 0 0 0 1 Ο πίνακασ αυτόσ μετατοπίηει ζνα ςθμείο του χϊρου κατά x ςτον άξονα x και κατά y και z αντίςτοιχα ςτουσ άλλουσ άξονεσ. Ο αντίςτροφοσ αυτοφ του μεταςχθματιςμοφ, δθλαδι ο μεταςχθματιςμόσ που επιςτρζφει το ςθμείο ςτθν αρχικι του κζςθ είναι ο: Τ 1 = 1 0 0 x 0 1 0 y 0 0 1 z 0 0 0 1 Μεγέθυνςη / Σμίκρυνςη Ο πίνακασ που μεγενκφνει / ςμικραίνει τριςδιάςτατα ςθμεία κατά x, y, z ςτουσ αντίςτοιχουσ άξονεσ είναι ο: 25

S = x 0 0 0 0 y 0 0 0 0 z 0 0 0 0 1 με αντίςτροφο τον S 1 = 1/x 0 0 0 0 1/y 0 0 0 0 1/z 0 0 0 0 1 Περιςτροφή Τζλοσ, οι μεταςχθματιςμοί που περιςτρζφουν ζνα ςθμείο κατά a ακτίνια γφρω από τουσ άξονεσ ςυντεταγμζνων είναι αντίςτοιχα: Άξονασ Χ: R x = Άξονασ Τ: R y = Άξονασ Η: R z = 1 0 0 0 0 cosa sina 0 0 sina cosa 0 0 0 0 1 cosa 0 sina 0 0 1 0 0 sina 0 cosa 0 0 0 0 1 cosa sina 0 0 sina cosa 0 0 0 0 1 0 0 0 0 1 Οι αντίςτροφοι των παραπάνω πινάκων είναι οι ανάςτροφοι αυτϊν, ι με άλλα λόγια οι παραπάνω πίνακεσ πολλαπλαςιαςμζνοι με -1 λόγω των ιδιοτιτων του θμιτόνου και του ςυνιμθτόνου. Συνδυάηοντασ τουσ παραπάνω πίνακεσ, μποροφμε να επιτφχουμε οποιοδιποτε μεταςχθματιςμό. Για παράδειγμα, μποροφμε να περιςτρζψουμε ζνα αντικείμενο γφρω από τυχαίο άξονα, μετατοπίηοντάσ το ςτουσ άξονεσ μεταφοράσ, ςτθν ςυνζχεια περιςτρζφουμε για να ςυμπζςει ο άξονασ περιςτροφισ με ζναν από τουσ άξονεσ ςυντεταγμζνων, περιςτρζφουμε το αντικείμενο και ςτθν ςυνζχεια κάνουμε τουσ αντίςτροφουσ μεταςχθματιςμοφσ. Πλοι οι παραπάνω μεταςχθματιςμοί, μποροφν να ςυνδυαςτοφν ςε ζναν πίνακα, πολλαπλαςιάηοντασ τον κάκε μεμονωμζνο με τον επόμενό του, προςζχοντασ να διατθριςουμε τθν ςωςτι ςειρά. Μεταςχηματιςμόσ παρατηρητή Με τον μεταςχθματιςμό μοντζλου, τοποκετοφμε τα αντικείμενα ςτον τριςδιάςτατο χϊρο, με βάςθ ζνα ςυγκεκριμζνο ςφςτθμα ςυντεταγμζνων. Πμωσ, μζχρισ ςτιγμισ δεν ζχουμε ορίςει τθν κζςθ και τισ ιδιότθτεσ τθσ κάμερασ του παρατθρθτι από τθν οποία κα βλζπουμε αυτά τα αντικείμενα. Αυτόσ και ο επόμενοσ μεταςχθματιςμόσ (μεταςχθματιςμόσ προβολισ) είναι υπεφκυνοι γι αυτζσ ακριβϊσ τισ διαδικαςίεσ. Ο μεταςχθματιςμόσ παρατθρθτι είναι ζνασ 4Χ4 πίνακασ, ο οποίοσ περιζχει ςτο πάνω αριςτερά μζροσ του, τουσ τρεισ άξονεσ που ορίηουν το ςφςτθμα ςυντεταγμζνων του παρατθρθτι, που ουςιαςτικά είναι οι περιςτροφζσ που 26

εφαρμόηονται ςτο αρχικό ςφςτθμα ςυντεταγμζνων. Επιπλζον, ςτθν τζταρτθ ςτιλθ του πίνακα υπάρχουν οι μετατοπίςεισ του ςυςτιματοσ ςυντεταγμζνων ωσ προσ τον παρατθρθτι. Στο παρακάτω ςχιμα φαίνεται με κόκκινο θ περιοχι του πίνακα που περιγράφει τισ περιςτροφζσ των αξόνων και με μπλε θ περιοχι που περιγράφει τισ μετατοπίςεισ τουσ. Παρατηρητήσ = περιςτροφή περιςτροφή περιςτροφή ΜετατόπιςηΧ περιςτροφή περιςτροφή περιςτροφή ΜετατόπιςηΥ περιςτροφή περιςτροφή περιςτροφή ΜετατόπιςηΖ 0 0 0 1 Για παράδειγμα, ζςτω ότι θ κάμερά μασ βρίςκεται ςτο ςθμείο (0,0,200,1), κοιτάει προσ το ςθμείο (0,0,0,1), δθλαδι τθν αρχι των αξόνων και ότι το διάνυςμα που ορίηει τθν επάνω κατεφκυνςθ τθσ κάμερασ είναι το (0,1,0,1). Με άλλα λόγια, θ κάμερα είναι προςανατολιςμζνθ ίδια με τουσ άξονεσ Χ,Υ,Η του ςυςτιματοσ ςυντεταγμζνων αλλά ζχει μία μετατόπιςθ κατά 200 ςτον άξονα Η. Τότε ο πίνακασ παρατθρθτι που ορίηεται από τισ παραπάνω ιδιότθτεσ είναι ο: Παρατηρητήσ = 1 0 0 0 0 1 0 0 0 0 1 200 0 0 0 1 Αν περιςτρζψουμε τθν κάμερα κατά 45 μοίρεσ γφρω από τον άξονα Υ, τότε πίνακασ γίνεται: Παρατηρητήσ = 2 2 0 0 2 2 0 1 0 0 2 2 0 200 2 2 0 0 0 1 Κάκε γραμμι του κόκκινου μζρουσ του πίνακα παρατθρθτι ζχει μικοσ ίςο με 1 και φυςικά το διάνυςμα που ορίηει κάκε γραμμι είναι κάκετο με τα υπόλοιπα δφο. Μεταςχηματιςμόσ προβολήσ Ο μεταςχθματιςμόσ προβολισ *21] είναι ο πιο πολφπλοκοσ από τουσ μεταςχθματιςμοφσ. Υπάρχουν δφο είδθ τζτοιων μεταςχθματιςμϊν και κα παρουςιαςτοφν και οι δφο. Ο ζνασ ονομάηεται ορθογραφική προβολή και ο άλλοσ προβολή προοπτικήσ. Θ ορκογραφικι προβολι, ζχει ςαν αποτζλεςμα τα αντικείμενα να φαίνονται ςτισ ίδιεσ διαςτάςεισ όςο μακριά ι κοντά μασ κι αν βρίςκονται. Στθν Εικόνα 13, φαίνεται ζνασ λαβφρινκοσ ο οποίοσ απεικονίηεται με ορκογραφικι προβολι. Αντίκετα, θ προβολι προοπτικισ είναι πιο κοντά ςε αυτό που βλζπουμε ςτον κακθμερινό μασ κόςμο, δθλαδι, τα αντικείμενα είναι πιο μεγάλα ι πιο μικρά ανάλογα με τθν απόςταςθ από εμάσ. Γενικά, θ ορκογραφικι 27

προβολι χρθςιμοποιείται ςε εφαρμογζσ ςχεδίαςθσ, γιατί μασ δίνει μία ςυνολικι εικόνα του αντικειμζνου που κζλουμε να δθμιουργιςουμε. Ράντωσ θ προβολι προοπτικισ είναι με μεγάλθ διαφορά θ περιςςότερο χρθςιμοποιοφμενθ. Και οι δφο μεταςχθματιςμοί, ςκοπό ζχουν να μεταςχθματίςουν τον όγκο παρατιρθςθσ τθσ κάμερασ ςε ζναν κφβο διάςταςθσ 2x2x1. Οι ςυνιςτϊςεσ x, y αυτοφ του όγκου μεταςχθματίηονται τελικά ςτισ ςυνιςτϊςεσ με τισ οποίεσ αναφερόμαςτε ςτθν εικόνα που εμφανίηεται ςτθν οκόνθ του υπολογιςτι. Εικόνα 13: Ορκογραφικι προβολι. Όλα τα αντικείμενα εμφανίηονται ςτο αρχικό μζγεκόσ τουσ ανεξάρτθτα από τθν απόςταςθ από τον παρατθρθτι. Ορθογραφική προβολή Αυτό το είδοσ προβολισ [21] κα επεξθγθκεί με βάςθ τθν Εικόνα 14. 28

Όγκοσ παρατιρθςθσ Κανονικοποιθμζνοσ όγκοσ παρατιρθςθσ Εικόνα 14: Μεταςχθματιςμόσ του όγκου παρατιρθςθσ τθσ ορκογραφικισ προβολισ ςτον κανονικοποιθμζνο όγκο. Ο όγκοσ με τθν ροη απόχρωςθ ςτθν παραπάνω εικόνα, είναι ο χϊροσ τον οποίο βλζπει ο παρατθρθτισ (όγκοσ παρατιρθςθσ). Το κάτω άκρο, αυτοφ του ορκογϊνιου παραλλθλεπιπζδου, είναι το (I, b, n), ενϊ το άνω άκρο είναι το (r, t, f). Αυτό, λοιπόν, το ςχιμα που βρίςκεται ςε τυχαίο χϊρο, κα πρζπει να μεταςχθματιςτεί ςτο μικρό ορκογϊνιο παραλλθλεπίπεδο που φαίνεται ςτθν Εικόνα 14. Αυτόσ ο όγκοσ ζχει διαςτάςεισ 2x2x1, το κάτω άκρο του βρίςκεται ςτο (-1, -1, 0) ενϊ το πάνω ςτο (1, 1, 1). Ο κανονικοποιθμζνοσ όγκοσ παρατιρθςθσ, ζχει τθν αρχι τον αξόνων ακριβϊσ ςτο μζςο του μικουσ των πλευρϊν ςτουσ άξονεσ Χ και Υ και είναι ευκυγραμμιςμζνοσ με αυτοφσ. Ευκυγραμμιςμζνοσ με τουσ άξονεσ είναι και όγκοσ παρατιρθςθσ. Για να απεικονιςτεί ο όγκοσ παρατιρθςθσ ςτον κανονικοποιθμζνο, κα πρζπει να μικρφνει ι να μεγαλϊςει (ςτθν ςυγκεκριμζνθ περίπτωςθ να μικρφνει) ζτςι ϊςτε να αποκτιςει τισ διαςτάςεισ του κανονικοποιθμζνου όγκου και ςτθν ςυνζχεια να μετακινθκεί ςτθν αρχι των αξόνων. Δθλαδι, θ διαδικαςία τθσ ορκογραφικισ προβολισ μπορεί να διαςπαςτεί ςε δφο βαςικοφσ μεταςχθματιςμοφσ μοντζλου, τθν μετατόπιςθ και τθν ςμίκρυνςθ / μεγζκυνςθ. Χρθςιμοποιϊντασ ανιςότθτεσ, για κάκε μία διάςταςθ του όγκου παρατιρθςθσ, δθλαδι, l x r, b y t, n z f, προςπακοφμε να καταλιξουμε ςε ανιςότθτεσ που αντιςτοιχοφν ςτον κανονικοποιθμζνο όγκο. Καταλιγουμε ςτο αποτζλεςμα: x = 2x r + l r l r l 29

y = z = 2y t + b t b t b z f n n f n Το αποτζλεςμα τθσ παραπάνω διαδικαςίασ το γράφουμε ςε μορφι πίνακα 4x4, για να μποροφμε να το χρθςιμοποιοφμε, ςυνδυάηοντάσ το με τουσ υπόλοιπουσ μεταςχθματιςμοφσ. Ζχουμε λοιπόν: P ort o = 2 r l 0 0 0 r + l 0 0 r l 2 t + b 0 t b t b 2 f n n f n 0 0 0 1 Ο παραπάνω μεταςχθματιςμόσ, περιγράφει οποιοδιποτε είδοσ ορκογραφικισ προβολισ. Στθν πλειοψθφία, όμωσ, των περιπτϊςεων, το είδοσ τθσ προβολισ που επικυμοφμε είναι εκείνο ςτο οποίο ο όγκοσ παρατιρθςθσ εκτείνεται εξίςου προσ τα δεξιά και τα αριςτερά, προσ τα πάνω και προσ τα κάτω. Με άλλα λόγια το ςθμείο παρατιρθςθσ βρίςκεται ςτο κζντρο τθσ μίασ πλευράσ του όγκου παρατιρθςθσ και αποτελεί ςθμείο του άξονα z. Αυτό ςε μακθματικά ςθμαίνει πωσ: -l = r, -b = t. Οι παραπάνω ςυνκικεσ μετατρζπουν τον προθγοφμενο πίνακα ςτον: P ort o = 1 r 0 0 0 0 1 0 0 t 2 0 0 f n n f n 0 0 0 1 Τζλοσ, ο γενικευμζνοσ τφποσ τθσ ορκογραφικισ προβολισ μπορεί να γραφεί ςαν γινόμενο δφο πινάκων, όπου ο αριςτερά είναι θ μεγζκυνςθ / ςμίκρυνςθ του όγκου παρατιρθςθσ και ο δεξιά θ μετατόπιςθ αυτοφ του όγκου ςτθν αρχι των αξόνων: P ort o = 2 r l 0 0 0 0 2 t b 0 0 0 0 2 f n 0 0 0 0 1 1 0 0 (r + l) 0 1 0 (t + b) 0 0 1 n 0 0 0 1 30

Προβολή προοπτικήσ Θ ανάλυςθ τθσ προβολισ προοπτικισ [21] κα γίνει ζχοντασ ςαν αναφορά τθν Εικόνα 15. Όγκοσ παρατιρθςθσ Κανονικοποιθμζνοσ όγκοσ παρατιρθςθσ Εικόνα 15: Μεταςχθματιςμόσ του όγκου παρατιρθςθσ τθσ προβολισ προοπτικισ ςτον κανονικοποιθμζνο όγκο. Ο όγκοσ του παρατθρθτι ςε αυτι τθν περίπτωςθ δεν είναι ορκογϊνιο παραλλθλόγραμμο, αλλά ζνασ κόλουροσ κϊνοσ. Αυτόσ ο όγκοσ, πρζπει, όμοια με πριν, να απεικονιςτεί ςτον κανονικοποιθμζνο όγκο παρατιρθςθσ. Επειδι, ςε αυτι τθν περίπτωςθ θ επιφάνεια που βρίςκεται ςτο ςθμείο n του Z άξονα είναι μικρότερθ ςε διαςτάςεισ από ότι θ επιφάνεια ςτο ςθμείο f του άξονα Z, τα αντικείμενα που περιζχονται ςτον όγκο παρατιρθςθσ κα φαίνονται πιο μικρά όταν είναι μακριά, προσ το f, και πιο μεγάλα όταν είναι κοντά, προσ το n, όταν εφαρμοςτεί ο μεταςχθματιςμόσ. Ζτςι, μοντελοποιείται αυτό που ςυμβαίνει ςτον πραγματικό κόςμο λόγω τθσ καμπυλότθτασ του ανκρϊπινου ματιοφ. Θ εφρεςθ αυτοφ του μεταςχθματιςμοφ δεν είναι τόςο εφκολθ όςο ςτθν περίπτωςθ τθσ ορκογραφικισ προβολισ, λόγω τθσ ιδιομορφίασ του ςχιματοσ που κζλουμε να μετατρζψουμε ςε κανονικοποιθμζνο όγκο. Ο 4x4 πίνακασ που περιγράφει αυτό τον μεταςχθματιςμό είναι ο: P proj = 2n r l 0 r + l 0 r l 2n t b t + b t b f 0 0 fn f n f n 0 0 1 0 0 0 31

Ο προθγοφμενοσ μεταςχθματιςμόσ περιγράφει κάκε είδοσ προβολισ προοπτικισ. Στθν πλειοψθφία των περιπτϊςεων, όμωσ, χρθςιμοποιείται θ ςυμμετρικι προβολι που παρουςιάηεται ςτθν Εικόνα 16. Εικόνα 16: υμμετρικι προβολι προοπτικισ. Στθν ςυμμετρικι προβολι, ο άξονασ Z διχοτομεί τθν γωνία κζαςθσ a, με άλλα λόγια, ο όγκοσ κζαςθσ εκτείνεται όμοια προσ τα δεξιά κι αριςτερά. Λςχφει δθλαδι ότι: -l = r και b = t. Επομζνωσ, ο παραπάνω πίνακασ γίνεται: P proj sym = n r 0 0 0 0 n 0 0 t f 0 0 f n fn f n 0 0 1 0 Τζλοσ, με βάςθ τθν Εικόνα 16, θ ςυμμετρικι προβολι προοπτικισ μπορεί να περιγραφεί με βάςθ τθν γωνία a, αφοφ είναι: cot a 2 = 2n κι ζτςι ζχουμε: P proj sym = 1 r cot a 2 0 0 0 0 cot a 2 0 0 f 0 0 f n fn f n 0 0 1 0 To r ςτον παραπάνω πίνακα εκφράηει τθν αναλογία διαςτάςεων του παρακφρου τθσ προβολισ, δθλαδι: πλάτοσ / φψοσ. Ο τελευταίοσ τρόποσ μακθματικισ περιγραφισ του πίνακα ςυμμετρικισ προβολισ προοπτικισ είναι πιο εφχρθςτοσ, μιασ και δεν περιζχει τισ διαςτάςεισ του παρακφρου κι απαιτεί να ορίηουμε μόνο το εφροσ κζαςθσ τθσ κάμερασ. 32

Με τθν χριςθ, λοιπόν, των δφο μεταςχθματιςμϊν προβολισ που μόλισ περιγράψαμε απεικονίηουμε τον τριςδιάςτατο όγκο παρατιρθςθσ ςτον κανονικοποιθμζνο. Ο κανονικοποιθμζνοσ όγκοσ παρατιρθςθσ, όμωσ, δεν μπορεί να απεικονιςτεί απευκείασ ςτθν οκόνθ του υπολογιςτι, γιατί από τθν μία ζχει περιςςότερεσ διαςτάςεισ (βάκοσ) από ότι θ οκόνθ κι από τθν άλλθ οι ςυντεταγμζνεσ τθσ οκόνθσ εκτείνονται ςτο διάςτθμα *0,1+ ςτουσ άξονεσ Χ και Υ, ενϊ ο όγκοσ εκτείνεται ςτο *-1,1]. Είναι φανερό, επομζνωσ, πωσ πρζπει να μεταςχθματίςουμε τισ x, y ςυντεταγμζνεσ του κανονικοποιθμζνου όγκου ςτο εφροσ *0,1]. Ο μεταςχθματιςμόσ αυτόσ, που χρθςιμοποιείται πολφ ςτον προγραμματιςμό και τθν δθμιουργία ςκιάςεων, είναι ο: M = 0.5 0 0 0.5 0 0.5 0 0.5 0 0 1 0 0 0 0 0 Το αποτζλεςμα του μεταςχθματιςμοφ αυτοφ φαίνεται ςτθν Εικόνα 17. Το βάκοσ του κανονικοποιθμζνου όγκου, από τθν άλλθ, το χρειαηόμαςτε για τθν εφαρμογι του z-buffering, δθλαδι τθν εμφάνιςθ των αντικειμζνων με τθν ςωςτι ςειρά ωσ προσ τον παρατθρθτι. Εικόνα 17: Μεταςχθματιςμόσ των x, y ςυντεταγμζνων του κανονικοποιθμζνου όγκου προβολισ ςτισ ςυντεταγμζνεσ οκόνθσ. Στο επόμενο ςτάδιο κι εφόςον ζχουμε επιλζξει προβολι προοπτικισ, γίνεται θ διαίρεςθ προοπτικισ. Αυτό ςθμαίνει ότι οι (x, y, z) ςυντεταγμζνεσ κάκε ςθμείου τθσ γεωμετρίασ διαιρείται από τθν τζταρτθ ςυντεταγμζνθ. Ακόμα, υπολογίηεται θ κζςθ 33

των ςθμείων ςε ςυντεταγμζνεσ οκόνθσ (ςτάδιο 5 ςτθν Εικόνα 12). Ο πίνακασ μεταςχθματιςμοφ γι αυτό το ςτάδιο είναι ο παρακάτω: Μ = Πλάτοσ παραθύρου 0 0 0 0 Ύψοσ παραθύρου 0 0 0 0 1 0 Σχετική θέςη ωσ προσ Χ Σχετική θέςη ωσ προσ Υ + Ύψοσ παραθύρου 0 1 Στον παραπάνω πίνακα, όλεσ οι μονάδεσ είναι ςε εικονοςτοιχεία τθσ οκόνθσ (pixels). Τα άκρα του κανονικοποιθμζνου όγκου προβολισ ςτουσ άξονεσ X,Y, απεικονίηονται ςτθν ανάλυςθ του παρακφρου τθσ οκόνθσ, ενϊ οι παράγοντεσ Σχετική θέςη ωσ προσ Χ και Σχετική θέςη ωσ προσ Υ είναι διάφοροι του μθδενόσ, αν δεν επικυμοφμε να ςχεδιάςουμε ςε όλο το παράκυρο, αλλά ςε ζνα τμιμα του. Στο επίπεδο 3 τθσ Εικόνα 3, τα ςθμεία ομαδοποιοφνται ςε βαςικέσ γεωμετρικέσ οντότητεσ (ςθμεία, γραμμζσ, ομάδεσ γραμμϊν, τρίγωνα κ.α.), ανάλογα με το πϊσ ορίηονται μζςα από τθν αντίςτοιχθ ςυνάρτθςθ του API. Αυτό ςυμβαίνει, γιατί ανάλογα με το είδοσ τθσ γεωμετρίασ, ςτο αμζςωσ επόμενο επίπεδο γίνεται διαφορετικι επεξεργαςία. Στο επίπεδο 4, λαμβάνει χϊρα θ αποκοπι των τμθμάτων τθσ τριςδιάςτατθσ ςκθνισ που δεν περιλαμβάνονται ςτθν τελικι εικόνα. Αυτό γίνεται ςυγκρίνοντασ τθν κζςθ μίασ βαςικήσ γεωμετρικήσ οντότητασ με τον όγκο που ορίςαμε χρθςιμοποιϊντασ τουσ πίνακεσ αντικειμζνου, παρατθρθτι και προβολισ. Υπάρχουν τρία ενδεχόμενα από μία τζτοια ςφγκριςθ: Θ γεωμετρία να βρίςκεται πλιρωσ εντόσ του όγκου, οπότε κα είναι ορατι ςτθν τελικι εικόνα και δεν απορρίπτεται. Θ γεωμετρία να βρίςκεται πλιρωσ εκτόσ του όγκου, οπότε απορρίπτεται. Θ γεωμετρία να βρίςκεται μερικϊσ εντόσ του όγκου, οπότε μζροσ τθσ απορρίπτεται. Θ διαδικαςία διάςπαςθσ τθσ γεωμετρίασ ανάμεςα ςτθν ορατι και μθ ορατι, εξαρτάται από τθν βαςικι γεωμετρικι οντότθτα που εξετάηεται. Ρζρα από τθν απόρριψθ γεωμετρίασ με βάςθ τον όγκο κζαςθσ του παρατθρθτι, ο προγραμματιςτισ μπορεί να ορίηει δικά του επίπεδα μζςα ςτον όγκο, ςτα οποία δεν επικυμεί τθν ςχεδίαςθ. Σε αυτι τθν περίπτωςθ οι παραπάνω ςυγκρίςεισ γίνονται και γι αυτά τα επίπεδα. Στο επίπεδο 4 λαμβάνει χϊρα θ διαίρεςθ προοπτικισ (ςτάδιο 4 ςτθν Εικόνα 12), ζτςι ϊςτε ςτθν προβολι προοπτικισ, τα αντικείμενα να εμφανίηονται μεγάλα όταν βρίςκονται κοντά ςτον παρατθρθτι και μικρά όταν είναι μακριά από αυτόν. Αυτό γίνεται διαιρϊντασ τισ x, y, z ςυνιςτϊςεσ κάκε ςθμείου με τθν ςυνιςτϊςα w. 34

Επιπλζον, ςε αυτό το επίπεδο απορρίπτονται πολφγωνα με βάςθ εάν βλζπουμε τθν εμπρόσ ι τθν πίςω επιφάνειά τουσ. Ο οριςμόσ τθσ παραπάνω πρόταςθσ είναι διαφορετικόσ για τα 2 APIs. Συγκεκριμζνα, ςτο OpenGL εμπρόσ επιφάνεια κεωρείται εκείνθ, τθσ οποίασ τα ςθμεία που τθν απαρτίηουν, ορίηονται με ςειρά αντίκετθ τθσ φοράσ του ρολογιοφ. Το ακριβϊσ αντίκετο ιςχφει για το DirectX. Στθν φαίνεται ο οριςμόσ αυτόσ ςχθματικά. Σθμείο 1 Σθμείο 1 Σθμείο 2 Σθμείο 3 OpenGL Σθμείο 3 Σθμείο 2 DirectX Εικόνα 18: Οριςμόσ εμπρόσ επιφάνειασ για τα 2 APIs. Ρροφανϊσ, ο προγραμματιςτισ, μπορεί να ορίηει αν κζλει να ιςχφουν αυτοί οι κανόνεσ για τισ επιφάνειεσ, μπορεί να ορίηει τουσ αντίκετουσ ι να μθν απορρίπτει καμία επιφάνεια, ανεξάρτθτα προςανατολιςμοφ. Επύπεδο διακριτοπούηςησ Οι βαςικζσ γεωμετρικζσ οντότθτεσ, τισ οποίεσ επεξεργάηονται τα APIs, περιζχουν ζνα ςφνολο από δεδομζνα ςε κάκε ςθμείο τουσ. Στο επίπεδο 5 τθσ Εικόνα 3, αυτζσ οι γεωμετρικζσ οντότθτεσ, διαςπϊνται ςε μικρότερεσ μονάδεσ που αντιςτοιχοφν ςε εικονοςτοιχεία. Αυτι θ διαδικαςία ονομάηεται διακριτοποίθςθ. Για παράδειγμα, μία γραμμι μπορεί να καλφπτει πζντε εικονοςτοιχεία ςτθν οκόνθ του υπολογιςτι και θ διαδικαςία τθσ διακριτοποίθςθσ μετατρζπει τθν γραμμι, θ οποία ορίςτθκε ςτον τριςδιάςτατο χϊρο από δφο ςθμεία, ςε 5 τμιματα εικόνασ (fragments). Το τμιμα αυτό τθσ εικόνασ, περιζχει ςαν οντότθτα τισ ιδιότθτεσ τισ οποίεσ είχαν τα άκρα τθσ γραμμισ από τθν οποία προιλκε. Δθλαδι, μπορεί να περιζχει ςυντεταγμζνεσ υφισ, χρϊμα, ενϊ ζχει πάντα ςυντεταγμζνεσ ςχετικά με τθν κζςθ του ςτθν οκόνθ και βάκοσ (z ςυντεταγμζνθ). Οι παραπάνω τιμζσ προκφπτουν από παρεμβολι ανάμεςα ςτισ τιμζσ των άκρων τθσ ευκείασ όταν εκείνθ ορίςτθκε από τα 2 ςθμεία ςτον χϊρο. Επιπλζον κάκε βαςικι γεωμετρικι οντότθτα ςχεδιάηεται με διαφορετικοφσ κανόνεσ και ελζγχεται προφανϊσ από διαφορετικζσ παραμζτρουσ που ορίηει ο προγραμματιςτισ μζςω του API. Για παράδειγμα, όταν ςχεδιάηουμε ςθμεία επιλζγουμε το μζγεκοσ ςε εικονοςτοιχεία. Αντίςτοιχα, όταν ςχεδιάηουμε γραμμζσ, 35

επιλζγουμε, επίςθσ, το πάχοσ τθσ γραμμισ και το μοτίβο τθσ, δθλαδι αν είναι ςυνεχόμενθ ι διακοπτόμενθ. Επεξεργαςύα τμημϊτων τησ εικόνασ Σφμφωνα με όςα είπαμε ςτθν προθγοφμενθ ενότθτα, ςτο ςτάδιο 6 τθσ Εικόνα 3, θ επεξεργαςία ςυνεχίηεται ςε επίπεδο τμθμάτων εικόνασ (fragments), δθλαδι περιορίηεται ςτισ 2 διαςτάςεισ. Σε αυτό το ςτάδιο, ο όροσ που χρθςιμοποιείται για να περιγράψει τα εικονοςτοιχεία (pixels) είναι τμιματα εικόνασ (fragments). Θ διαφορά ανάμεςα ςτισ 2 ορολογίεσ είναι ότι τα pixels αναφζρονται ςτθν τελικι εικόνα που εμφανίηεται ςτθν οκόνθ του υπολογιςτι, ενϊ τα fragments αναφζρονται ςτα υπό επεξεργαςία pixels που δεν είναι ςίγουρο ότι κα εμφανιςτοφν ςτθν οκόνθ, επειδι περνοφν μία ςειρά από δοκιμζσ ανάλογα με τα χαρακτθριςτικά του API που ζχει ενεργοποιθμζνα ο προγραμματιςτισ. Θ πιο ςθμαντικι διαδικαςία αυτοφ του ςταδίου είναι θ εφαρμογι υφισ. Με αυτι τθν διαδικαςία, οι ςυντεταγμζνεσ υφισ που αντιςτοιχοφν ςε κάκε τμιμα τθσ εικόνασ, χρθςιμοποιοφνται για να προςπελάςουν τθν περιοχι τθσ μνιμθσ γραφικϊν που ονομάηεται μνιμθ υφϊν (αρικμόσ 7 ςτθν Εικόνα 3). Το API κακορίηει με πολλοφσ διαφορετικοφσ τρόπουσ το πωσ κα γίνει θ προςπζλαςθ ςτθν μνιμθ και πωσ κα εφαρμοςτεί θ τιμι που κα προςπελαςτεί ςτο εκάςτοτε τμιμα τθσ εικόνασ. Στθν Εικόνα 4, παρουςιάηεται το αποτζλεςμα τθσ εφαρμογισ υφισ ςε μία τριςδιάςτατθ ςφαίρα. Επειδι θ εφαρμογι υφισ είναι μία πολφπλοκθ διαδικαςία, κα παρουςιαςτεί αναλυτικά ςε παρακάτω ενότθτα. Λειτουργύεσ επύ των τμημϊτων εικόνασ Μετά τθν επεξεργαςία των τμθμάτων εικόνασ, γίνονται κάποιεσ επιπλζον λειτουργίεσ ςε αυτά (αρικμόσ 8 ςτθν Εικόνα 3). Αυτζσ είναι λειτουργίεσ όπωσ: Ζλεγχοσ κτιςθσ εικονοςτοιχείου (pixel ownership test): Εξετάηει αν το εικονοςτοιχείο που πρόκειται να ηωγραφιςτεί ανικει ςτο παράκυρο ςτο οποίο ςχεδιάηουμε ι καλφπτεται από παράκυρο άλλθσ εφαρμογισ. Ζλεγχοσ ψαλιδιοφ (scissor test): Απορρίπτονται τμιματα εικόνασ ανάλογα με το αν ανικουν ι όχι ςε μία ορκογϊνια περιοχι που ορίηουμε προγραμματιςτικά. Ζλεγχοσ άλφα (Alpha test): Αποφαςίηεται αν κα απορριφκεί το τρζχον εικονοςτοιχείο. Αυτό γίνεται με βάςθ τθν τιμι άλφα και με βάςθ με το κριτιριο που ζχουμε ορίςει μζςω του API. Θ τιμι άλφα, είναι θ τζταρτθ ςυνιςτϊςα χρϊματοσ που ζχει κάκε εικονοςτοιχείο (R,G,B,A). Ζλεγχοσ αποτφπωςθσ (stencil test): Συγκρίνεται θ τιμι του stencil buffer με μία τιμι αναφοράσ που ορίηει ο προγραμματιςτισ και βάςθ αυτισ αποφαςίηεται θ «τφχθ» του τμιματοσ τθσ εικόνασ. 36

Ζλεγχοσ βάκουσ (depth test): Γίνεται ςφγκριςθ τθσ τιμισ βάκουσ του υπό επεξεργαςία εικονοςτοιχείου με τθν τιμι που ζχει αποκθκευτεί ςτθν μνιμθ καρζ. Το κριτιριο (μεγαλφτερο, μεγαλφτερο ι ίςο, μικρότερο κ.α.) για τθν απόρριψθ κακορίηεται από τον προγραμματιςτι. Επιπλζον, ςε αυτό το ςτάδιο γίνονται κι άλλεσ λειτουργίεσ, όπωσ θ ανάμειξθ (blending) και οι λογικζσ πράξεισ επί των τμθμάτων εικόνασ. Με τθν ανάμειξθ χρωμάτων, υπολογίηεται το τελικό χρϊμα του εικονοςτοιχείου με βάςθ τθν τιμι του τρζχοντοσ τμιματοσ εικόνασ, τθσ τιμισ που ιταν ιδθ αποκθκευμζνθ ςτθν μνιμθ καρζ και τθν ςυνάρτθςθ ανάμειξθσ που ορίηει ο προγραμματιςτισ. Οι λογικζσ πράξεισ εφαρμόηονται ανά bit ανάμεςα ςτο byte που ορίηουμε εμείσ ανά χρϊμα και ςτθν τιμι χρϊματοσ του τρζχοντοσ τμιματοσ εικόνασ. Πλεσ οι παραπάνω πράξεισ είναι απλζσ και ςιμερα εκτελοφνται πάντα ςε υλικό χωρίσ ιδιαίτερο κόςτοσ. Λειτουργύεσ επύ τησ προςωρινόσ μνόμησ καρϋ (Frame Buffer) Υπάρχουν λειτουργίεσ που επθρεάηουν ολόκλθρθ τθν τελικι εικόνα. Συγκεκριμζνεσ παράμετροι κακορίηουν τθν περιοχι τθσ μνιμθσ καρζ ςτθν οποία ςχεδιάηουμε τθν γεωμετρία. Επιπλζον, όπωσ ζχει ιδθ αναφερκεί κι αναλυκεί, υποςτθρίηεται ςτερεοςκοπικι απεικόνιςθ και διπλι χριςθ προςωρινισ μνιμθσ. Μποροφμε να ςχεδιάηουμε ςε πολλζσ μνιμεσ ταυτόχρονα, αυξάνοντασ τθν ταχφτθτασ ςε αλγόρικμουσ πολλϊν περαςμάτων. Υπάρχει ακόμα θ δυνατότθτα να μθν επιτρζπουμε τθν αλλαγι των τιμϊν των χρωμάτων ςε περιοχζσ τθσ εικόνασ. Αντίςτοιχα το ίδιο γίνεται για τθν μνιμθ βάκουσ και τθν μνιμθ αποτφπωςθσ. Τζλοσ, από τισ πιο βαςικζσ λειτουργίεσ, είναι ο κακαριςμόσ τθσ μνιμθσ καρζ (αρχικοποίθςθ) για τθν ςχεδίαςθ κάκε νζασ εικόνασ. Επεξεργαςύα εικόνων Τα APIs όμωσ, δεν υποςτθρίηουν μόνο τθν επεξεργαςία και ςχεδίαςθ οντοτιτων γεωμετρίασ. Υποςτθρίηουν, επιπλζον, τθν επεξεργαςία και ςχεδίαςθ εικόνων, δθλαδι εικονοςτοιχείων τα οποία δεν αντιςτοιχοφν ςε γεωμετρία θ οποία απεικονίςτθκε ςτθν διςδιάςτατθ οκόνθ του υπολογιςτι. Στθν ορολογία των APIs οι εικόνεσ ονομάηονται είτε πλαίςια εικονοςτοιχείων είτε sprites (αρκμόσ 11 ςτθν Εικόνα 3). Τα APIs υποςτθρίηουν διάφορεσ τφπουσ (format) εικόνων. Ο προγραμματιςτισ πρζπει να ορίςει τισ παραμζτρουσ οι οποίεσ κακορίηουν το πϊσ είναι αποκθκευμζνα τα δεδομζνα τθσ εικόνασ ςτθν μνιμθ (μικοσ τθσ γραμμισ ςε δεδομζνα κ.α.). Για να είναι οι λειτουργίεσ πιο ακριβείσ, τα εικονοςτοιχεία που διαβάηονται από τθν εφαρμογι μετατρζπονται ςτθν κατάλλθλθ ροι εικονοςτοιχείων από μία λειτουργία που ονομάηεται αποςυμπίεςθ εικονοςτοιχείων (pixel unpacking). Πταν μία εικόνα μεταφζρεται ςτο API, γίνονται οι κατάλλθλεσ unpacking διαδικαςίεσ ζτςι ϊςτε να 37

διαβαςτεί και να επεξεργαςτεί με τον ςωςτό τρόπο. Κακϊσ κάκε εικονοςτοιχείο διαβάηεται από τθν μνιμθ, μετατρζπεται ςε μία ομάδα από εικονοςτοιχεία που περιζχουν είτε χρϊμα, είτε βάκοσ, είτε μία τιμι αποτφπωςθσ. Αν θ ομάδα εικονοςτοιχείων αποτελείται από χρϊμα, τα δεδομζνα κατευκφνονται προσ τθν μνιμθ χρϊματοσ ςτθν μνιμθ καρζ. Αντίςτοιχα, αν περιζχει τιμζσ βάκουσ, τα δεδομζνα κατευκφνονται ςτθν μνιμθ βάκουσ του ίδιου καρζ. Στον αρικμό 17 τθσ Εικόνα 3, ςθμειϊνεται θ αντίκετθ διαδικαςία από αυτιν που περιγράψαμε παραπάνω, θ οποία επιςτζφει ςτθν εφαρμογι τα δεδομζνα τθσ εικόνασ, μετά τθν επεξεργαςία τθν οποία πικανό να ζχει υποςτεί ςτθν GPU. Στον αρικμό 13 τθσ Εικόνα 3, υποςτθρίηονται μεταφορζσ μεταξφ τθσ μνιμθσ τθσ GPU (αρικμόσ 15) ενόσ υποςυνόλου ι ενόσ ςυνόλου των εικονοςτοιχείων τθσ εικόνασ. Επιπλζον, ςε αυτό το ςτάδιο επιτρζπονται αλλαγζσ ςτισ τιμζσ των εικονοςτοιχείων και ςτθν ερμθνεία τουσ από το API, για παράδειγμα μπορεί να ςχετίςουμε τιμζσ χρϊματοσ με τιμζσ αποτφπωςθσ και το αντίκετο. Επίςθσ μποροφμε να αντιγράφουμε τμιματα μεταξφ εικόνων. Στον αρικμό 14 τθσ Εικόνα 3, τα εικονοςτοιχεία δζχονται, πλζον, τθν ίδια ακριβϊσ επεξεργαςία με αυτιν που δζχονται τα εικονοςτοιχεία που προζρχονται από τθν επεξεργαςία τθσ γεωμετρίασ και αναλφςαμε ςε προθγοφμενεσ παραγράφουσ. Τζλοσ, ςτον αρικμό 16 τθσ Εικόνα 3, παρζχεται θ δυνατότθτασ να διαβαςτοφν τα περιεχόμενα τθσ μνιμθσ καρζ (αρικμόσ 10), ζτςι ϊςτε είτε να κάνουμε περεταίρω επεξεργαςία (αρικμοί 13, 14 και 15) ςτθν εικόνα είτε να διαβάςουμε τα αποτελζςματα πίςω ςτθν εφαρμογι μασ (αρικμοί 13 και 17). Εφαρμογό υφόσ Θ εφαρμογι υφισ είναι μία από τισ πιο πολφπλοκεσ και απαιτθτικζσ ςε υπολογιςτικι ιςχφ διαδικαςία. Γι αυτό, πάντα, οι GPUs ζχουν εξειδικευμζνο υλικό για τθν εφαρμογι τθσ υφισ. Είναι μία περιοχι των γραφικϊν που επεκτείνεται και βελτιϊνεται ςθμαντικά τα τελευταία χρόνια και παίηει ςθμαντικό ρόλο ςτθν αλθκοφάνεια του τελικοφ αποτελζςματοσ. Ο όροσ εφαρμογι υφισ, περιγράφει τθν διαδικαςία όπου μία εικόνα (υφι) εφαρμόηεται επάνω ςτθν γεωμετρία που ςχεδιάηουμε. Για να γίνει αντιλθπτι θ διαδικαςία αυτι, μποροφμε να τθν παρομοιάςουμε με το τραπεηομάντθλο που απλϊνουμε επάνω ςτο τραπζηι ι με τα ροφχα τα οποία φοράμε. Κάκε μία από τισ επιφάνειεσ προςαρμόηεται ςτο ςχιμα τθσ γεωμετρίασ πάνω ςτθν οποία εφαρμόηεται (τραπζηι και ςϊμα ςτα παραπάνω παραδείγματα). 38

Τα APIs ςιμερα υποςτθρίηουν τζςςερα είδθ υφισ: Μίασ διάςταςθσ. Αυτι θ υφι, είναι ζνασ πίνακασ μίασ διάςταςθσ που περιζχει τιμζσ όςεσ το πλάτοσ τθσ. Δφο διαςτάςεων. Είναι πίνακασ δφο διαςτάςεων που περιζχει φψοσ * πλάτοσ τιμζσ. Τριϊν διαςτάςεων. Είναι πίνακασ τριϊν διαςτάςεων που περιζχει φψοσ * πλάτοσ * βάκοσ πλικοσ τιμϊν. Κυβικζσ υφζσ. Είναι ζνα ςφνολο από 6 υφζσ δφο διαςτάςεων. Ανά δφο, αυτζσ οι υφζσ, αναπαριςτοφν τισ κατευκφνςεισ ςε κάκε άξονα του τριςδιάςτατου κόςμου (± X, ± Y, ± Z). Οι υφζσ, είναι λοιπόν, πίνακεσ διαφόρων διαςτάςεων οι οποίοι, ςχεδόν πάντα, περιζχουν τιμζσ χρϊματοσ, οι οποίεσ «απλϊνονται» επάνω ςτθν γεωμετρία για να μασ δϊςουν τθν ψευδαίςκθςθ του υλικοφ από το οποίο είναι φτιαγμζνα τα αντικείμενα του τριςδιάςτατου κόςμου. Στο παράδειγμα τθσ Εικόνα 4, θ εφαρμογι υφισ, είχε ωσ αποτζλεςμα, θ ςφαίρα να φαίνεται πωσ είναι πζτρινθ. Οι υφζσ αποκθκεφονται ςτθν μνιμθ τθσ GPU (αρικμόσ 7 ςτθν Εικόνα 3), οπότε πρζπει να προςπελαφνονται με κάποιο τρόπο. Αυτό γίνεται με χριςθ των μονάδων υφισ (texture units). Ζτςι ονομάηεται το υλικό τθσ GPU που αναλαμβάνει τθν προςπζλαςθ και το «άπλωμα» τθσ υφισ ςτθν γεωμετρία. Κάνοντασ χριςθ του API, ελζγχουμε τθν κατάςταςθ κάκε μίασ από τισ μονάδεσ υφισ. Συγκεκριμζνα, τθν ενεργοποιοφμε ι τθν απενεργοποιοφμε, ελζγχουμε τουσ πίνακεσ μεταςχθματιςμοφ βάςθ των οποίων κάνουμε εφαρμογι τθσ υφισ, ελζγχουμε τον τρόπο με τον οποίο παράγονται οι ςυντεταγμζνεσ για τθν προςπζλαςι τουσ και ορίηουμε ποια υφι κα προςπελαφνεται κάκε φορά. Οι παραμετροποίθςθ που κάνουμε κάκε φορά, αφορά τθν ενεργι μονάδα υφισ. Υπάρχει ςυγκεκριμζνοσ αρικμόσ μονάδων υφισ που μπορεί να είναι ενεργζσ ςε κάκε ςχεδίαςθ εικόνασ ςτισ GPUs κι εξαρτάται από τον καταςκευαςτι. Ράντωσ, ο ελάχιςτοσ αρικμόσ μονάδων υφισ που υποςτθρίηεται ςιμερα είναι 8. Κάκε μονάδα υφισ, προφανϊσ, προςπελαφνει διαφορετικι υφι ςε είδοσ και διαςτάςεισ. Θ προςπζλαςθ ςτισ υφισ γίνεται κάνοντασ χριςθ διαφορετικϊν κλιςεων του API, ανάλογα με τισ ιδιότθτζσ τθσ. Βαςικι λειτουργία, ςτθν εφαρμογι υφϊν, είναι θ πολλαπλι λεπτομζρεια υφισ (mipmapping). Ουςιαςτικά, με το mipmapping, δεν αποκθκεφεται ςτο API μόνο μία ζκδοςθ τθσ υφισ που κζλουμε να εφαρμόςουμε επάνω ςτθν γεωμετρία, αλλά πολλαπλζσ ςε διαφορετικζσ διαςτάςεισ. Συγκεκριμζνα, δθμιουργείται ζνασ πίνακασ που περιζχει τισ πολλαπλζσ εκδόςεισ (mipmap levels) και κάκε ζκδοςθ είναι το μιςό μζγεκοσ ςε διαςτάςεισ από τθν αμζςωσ μεγαλφτερι τθσ. Θ πιο μικρι ζκδοςθ τθσ υφισ που αποκθκεφει αυτόσ ο 39

πίνακασ είναι διάςταςθσ 1Χ1, δθλαδι, ζνα εικονοςτοιχείο. Στθν Εικόνα 19, φαίνεται θ εφαρμογι του mipmapping. Θ ιδζα πίςω από το mipmapping είναι ότι τα αντικείμενα του εικονικοφ τριςδιάςτατου δεν ςχεδιάηονται ςτισ αρχικζσ διαςτάςεισ τουσ, αλλά πιο μικρά ι μεγάλα, ανάλογα με τθν απόςταςθ από τον παρατθρθτι και τισ ιδιότθτεσ τθσ κάμερασ που ζχουμε ορίςει. Επομζνωσ, θ εφαρμογι τθσ ίδιασ υφισ ςτισ διαφορετικζσ κάκε φορά διαςτάςεισ τθσ γεωμετρίασ δεν ζχει πολφ καλά οπτικά αποτελζςματα κι είναι επικυμθτό κάκε φορά που ςχεδιάηεται ζνα αντικείμενο να επιλζγεται θ υφι τθσ κατάλλθλθσ διάςταςθσ ςχετικά με το μζγεκόσ του. Αυτό γίνεται αυτόματα ςτθν περίπτωςθ που ζχουμε ενεργοποιιςει το mipmapping ςτθν GPU. Επιπλζον, θ GPU μπορεί να κάνει παρεμβολι ανάμεςα ςε δφο διαφορετικοφ μεγζκουσ εκδόςεισ τισ ίδιασ υφισ κι επομζνωσ να ζχουμε πολφ ποιοτικά αποτελζςματα ςτθν τελικι εικόνα. Στθν Εικόνα 20, φαίνεται θ διαφορά ςτθν ποιότθτα, ςε μία εικόνα που κάνει χριςθ του mipmapping και τθν ίδια εικόνα χωρίσ τθν χριςθ mipmapping. Υπάρχουν κι άλλεσ παράμετροι που ορίηει ο προγραμματιςτισ για τθν προςπζλαςθ ςτισ υφζσ μζςω των μονάδων υφισ. Συγκεκριμζνα, ορίηει ποιο είναι το αποτζλεςμα (δθλαδι, θ αρικμθτικι τιμι), το οποίο επιςτρζφεται όταν οι ςυντεταγμζνεσ προςπζλαςθσ ςτθν υφι είναι μεγαλφτερεσ από τισ διαςτάςεισ τθσ. Υπάρχουν τζςςερισ επιλογζσ ςε αυτό το ενδεχόμενο, οι οποίεσ παρουςιάηονται ςχθματικά ςτθν Εικόνα 21. Στο παράδειγμα αυτό, οι υφζσ είναι δφο διαςτάςεων. Στο πάνω μζροσ τθσ εικόνασ, θ υφι είναι το χαμογελαςτό πρόςωπο κι επαναλαμβάνεται τρεισ φορζσ ςε κάκε κατεφκυνςθ, ενϊ ςτο κάτω μζροσ θ εικόνα είναι το καρό μοτίβο που επίςθσ επαναλαμβάνεται τρεισ φορζσ. 40

Εικόνα 19: Θ τεχνικι mipmapping. Κάκε υφι διευκυνςιοδοτείται με τιμζσ που κυμαίνονται ςτο διάςτθμα *0,1+. Τιμζσ που βρίςκονται ζξω από αυτό το κλειςτό διάςτθμα, αντιμετωπίηονται με ζναν από τουσ τρόπουσ που φαίνονται ςτθν Εικόνα 21. Θ προςπζλαςθ επανάλθψθσ και κακρεπτιςμοφ είναι προφανείσ ωσ προσ τθν λειτουργία τουσ. Θ μζκοδοσ περιοριςμοφ ςε μία τιμι, επιςτρζφει μία ςυγκεκριμζνθ τιμι, που ορίηει ο προγραμματιςτισ, όταν οι διευκφνςεισ είναι εκτόσ του *0,1+ ενϊ θ μζκοδοσ περιοριςμοφ ςτθν τιμι του ορίου, επιςτρζφει τθν τιμι που ζχει θ υφι ςτο 0 ι ςτο 1 ανάλογα με το πιο άκρο υπερβαίνουν οι τιμζσ κάκε φορά. 41

Εικόνα 20: Διαφορά ςτθν ποιότθτα ςχεδίαςθσ χωρίσ (επάνω) και με (κάτω) χριςθ του mipmapping. Επιπλζον, ο προγραμματιςτισ ορίηει ποια είναι θ δειγματολθψία τθσ υφισ όταν δεν υπάρχει ζνα προσ ζνα αντιςτοίχιςθ ςτα εικονοςτοιχεία τθσ υφισ με αυτά τθσ εικόνασ ςτθν οποία κα εφαρμοςτεί. Θ ιδιότθτα αυτι ζχει άμεςθ ςχζςθ με το mipmapping που περιγράψαμε παραπάνω αφοφ χρθςιμοποιοφνται αυτζσ οι τιμζσ για το φιλτράριςμα τθσ υφισ πριν εφαρμοςτεί ςτθν γεωμετρία. Ακόμα ορίηεται ποιο από τα mip map levels είναι το βαςικό. Συνικωσ είναι το επίπεδο 0, δθλαδι το επίπεδο με τθν μεγαλφτερθ λεπτομζρεια. Ο προγραμματιςτισ, ακόμα, κακορίηει με ποιο τρόπο κα εφαρμοςτεί θ τιμι τθσ υφισ που προςπελαφνεται επάνω ςτθν γεωμετρία. Υπάρχουν επιλογζσ όπωσ: Θ αντικατάςταςθ του χρϊματοσ τθσ γεωμετρίασ, θ τροποποίθςι του, θ ανάμιξθ με το ιδθ υπάρχον χρϊμα, θ πρόςκεςθ, θ ανάμιξθ ςυγκεκριμζνων ςυνιςτωςϊν χρϊματοσ (κόκκινο, πράςινο, μπλε), θ ανάμιξθ βάςθ τθσ άλφα ςυνιςτϊςασ κ.α. 42

Εικόνα 21: Οι διαφορετικοί τρόποι προςπζλαςθσ των υφϊν. Πάνω αριςτερά: Επανάλθψθ. Πάνω Δεξιά: Κακρεπτιςμόσ. Κάτω αριςτερά: Περιοριςμόσ ςε μία τιμι. Κάτω δεξιά: Περιοριςμόσ ςτθν οριακι τιμι τθσ υφισ. Τα APIs υποςτθρίηουν τθν εφαρμογι πολλαπλισ υφισ (multitexturing) ςτθν γεωμετρία. Αυτό ςθμαίνει ότι οι παραπάνω διαδικαςίεσ μποροφν να εφαρμοςτοφν ςε διαφορετικζσ υφζσ ταυτόχρονα και να ςυνδυαςτοφν οι τιμζσ χρϊματοσ κάκε υφισ ςτο τελικό αποτζλεςμα. Συγκεκριμζνα, ορίηουμε τθν κατάςταςθ για τθν προςπζλαςθ ςτθν πρϊτθ μονάδα υφισ, και θ τιμι που προςπελαφνεται προωκείται ςτθν επόμενθ μονάδα υφισ που με τθν ςειρά τθσ προωκεί τθν δικι τθσ τιμι μζχρι τθν τελευταία ενεργι μονάδα. Τζλοσ, οι ςυντεταγμζνεσ για τθν προςπζλαςθ τθσ υφισ μποροφν να παράγονται αυτόματα από το API, είτε να τισ παράγουμε εμείσ προγραμματιςτικά. Τα APIs προςφζρουν τρία βαςικά είδθ ςυντεταγμζνων. Το πρϊτο είδοσ, εφαρμόηει μία υφι ςτον αντικείμενο ζτςι ϊςτε να είναι ςτακερι πάνω ςε αυτό, δθλαδι να περιςτρζφεται και να μετατοπίηεται όπωσ ακριβϊσ και θ γεωμετρία πάνω ςτθν οποία εφαρμόηεται. Το δεφτερο είδοσ, παράγει ςυντεταγμζνεσ, οι οποίεσ είναι ςτακερζσ ωσ προσ τον παρατθρθτι, επομζνωσ κακϊσ μετακινοφνται τα αντικείμενα του εικονικοφ κόςμου, μετακινοφνται κι οι υφζσ πάνω ςε αυτά. Το τρίτο είδοσ παραγωγισ ςυντεταγμζνων εφαρμόηει μία υφι ςτα αντικείμενα ςαν να τα περιζβαλλε. Αυτό το είδοσ χρθςιμοποιείται για τθν εξομοίωςθ αντικειμζνων που αντανακλοφν το φωσ, όπωσ ζνα καινοφριο αυτοκίνθτο ι ζνασ κακρζπτθσ. 43

Παρϊδειγμα ςχεδύαςησ γεωμετρύασ με ταυτόχρονη εφαρμογό υφόσ Στισ προθγοφμενεσ παραγράφουσ, ζγινε ανάλυςθ των μεταςχθματιςμϊν που εφαρμόηονται επί τθσ γεωμετρίασ, ϊςτε αυτι να εμφανιςτεί ςτθν οκόνθ του υπολογιςτι ι ςε κάποιο αντίςτοιχο μζςο προβολισ. Σε αυτι τθν ενότθτα, κα παρουςιαςτεί ζνα απλό παράδειγμα ςχεδίαςθσ γεωμετρίασ με ταυτόχρονθ εφαρμογι υφισ. Σκοπόσ είναι να γίνει κατανοθτι όλθ αυτι θ διαδικαςία γιατί είναι βαςικι και κα βοθκιςει ςτθν ανάλυςθ των πιο πολφπλοκων αλγορίκμων που αναπτφχκθκαν. Κζλουμε να ςχεδιάςουμε ζνα τετράγωνο ςτο οποίο κα εφαρμόςουμε μία υφι. Θ εφαρμογι υφισ κα γίνει με τρόπο ϊςτε να παραμζνει ςτακερι επάνω ςτο τετράγωνο. Ακόμα, θ διαδικαςία εφαρμογισ τθσ υφισ λαμβάνει χϊρα, αφοφ θ γεωμετρία ζχει απεικονιςτεί ςε τμιματα εικόνασ. Το τετράγωνο (τζςςερα ςθμεία 2 ορκογϊνια ιςοςκελι τρίγωνα με κοινι υποτείνουςα) ζχει διαςτάςεισ 10x10 μονάδεσ, ενϊ είναι οριςμζνο ςε ςφςτθμα ςυντεταγμζνων με τθν αρχι των αξόνων να βρίςκεται ςτο κζντρο του. Δθλαδι, τα τζςςερα ςθμεία του τετραγϊνου ςε αυτό το ςφςτθμα ςυντεταγμζνων που ονομάηεται χϊροσ αντικειμζνου (object space) είναι τα: (5,5,0), (5,-5,0), (-5,-5,0), (-5,5,0) Θ w ςυντεταγμζνθ για όλα τα ςθμεία είναι 1 και από ότι βλζπουμε θ z ςυντεταγμζνθ όλων των ςθμείων είναι ίδια κι ίςθ με 0 αφοφ το ςχιμα μασ είναι επίπεδο. Επιπλζον, για να γίνει θ εφαρμογι υφισ, πρζπει θ γεωμετρία να περιζχει πλθροφορία ςυντεταγμζνων υφισ. Κεωροφμε πωσ θ υφι καλφπτει πλιρωσ κι ακριβϊσ τθν επιφάνεια του τετραγϊνου που κζλουμε να ςχεδιάςουμε, επομζνωσ οι ςυντεταγμζνεσ υφισ για τα παραπάνω ςθμεία είναι αντίςτοιχα: (1,0), (1,1), (0,1), (0,0) Οι ςυντεταγμζνεσ υφισ είναι αυτζσ, γιατί το ςθμείο (0,0) ορίηεται ςαν το άνω αριςτερά ςθμείο τθσ εκάςτοτε διςδιάςτατθσ υφισ. Στο παράδειγμά μασ, το τετράγωνο κα ςχεδιαςτεί ςτθν ίδια κζςθ ςτθν οποία ορίςτθκε. Δθλαδι, δεν κζλουμε να εφαρμόςουμε μεταςχθματιςμό μετατόπιςθσ, παραμόρφωςθσ ι περιςτροφισ ςε αυτό. Επομζνωσ ο πίνακασ μεταςχθματιςμοφ μοντζλου είναι ο μοναδιαίοσ: Μ = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 44

Για να ςχεδιάςουμε τθν γεωμετρία πρζπει να ορίςουμε τισ ιδιότθτεσ του παρατθρθτι (ζνα νζο ςφςτθμα ςυντεταγμζνων που ςθμαίνει περιςτροφι του αρχικοφ ςυςτιματοσ ςυντεταγμζνων) και τθν κζςθ του (μετατόπιςθ του αρχικοφ ςυςτιματοσ ςυντεταγμζνων ςτο οποίο ορίςτθκε το αντικείμενο). Επιπλζον, πρζπει να ορίςουμε τον πίνακα προβολισ που επικυμοφμε, δθλαδι τισ ιδιότθτεσ τθσ κάμερασ με τθν οποία παρατθροφμε το τετράγωνο. Κεωροφμε λοιπόν, πωσ το ςφςτθμα ςυντεταγμζνων του παρατθρθτι ζχει τον ίδιο προςανατολιςμό με το αρχικό ςφςτθμα ςυντεταγμζνων. Αυτό ςθμαίνει πωσ το επάνω αριςτερά 3x3 τμιμα του μεταςχθματιςμοφ παρατθρθτι είναι ίςο με το μοναδιαίο πίνακα. Ακόμα, ο παρατθρθτισ βρίςκεται -200 μονάδεσ μακριά από τθν αρχι των αξόνων επί του άξονα z. Θ κζςθ του δθλαδι είναι θ (0,0,-200,1) και κοιτά ςτθν αρχι των αξόνων. Ο πίνακασ λοιπόν που περιγράφει τον μεταςχθματιςμό παρατιρθςθσ είναι ο: V = 1 0 0 0 0 1 0 0 0 0 1 200 0 0 0 1 Κα χρθςιμοποιιςουμε ςυμμετρικι προβολι προοπτικισ, επομζνωσ ο πίνακασ μεταςχθματιςμοφ ςε αυτι τθν περίπτωςθ προκφπτει από τον παρακάτω τφπο: P proj sym = 1 r cot a 2 0 0 0 0 cot a 2 0 0 f 0 0 f n fn f n 0 0 1 0 Λςχφει r = 1, γιατί κα απεικονίςουμε ςε παράκυρο διαςτάςεων 512x512 εικονοςτοιχείων, ενϊ θ γωνία κζαςθσ είναι a = 45 μοίρεσ. Επιπλζον, θ όραςι μασ εκτείνεται από το n = 1 ζωσ f = 1000 μονάδεσ. Αντικακιςτϊντασ τισ τιμζσ αυτζσ ζχουμε: P = 2.41421 0 0 0 0 2.41421 0 0 0 0 1.001 1.001 0 0 1 0 Εφαρμόηουμε λοιπόν τουσ παραπάνω 3 μεταςχθματιςμοφσ ςτθν αρχικι γεωμετρία του τετραγϊνου με τθν εξισ ςειρά: V transformed = M V P V initial 45

Για κάκε ζνα από τα 4 ςθμεία του τετραγϊνου παίρνουμε: (5,5,0) (12.0711, 12.0711,199.992) (5,-5,0) (12.0711, -12.0711,199.992) (-5,-5,0) (-12.0711, -12.0711,199.992) (-5,5,0) (-12.0711, 12.0711,199.992) Πλα τα παραπάνω ςθμεία ζχουν w = 200, οπότε μετά τθν διαίρεςθ προοπτικισ κάκε ςθμείο απεικονίηεται ςτον κανονικοποιθμζνο όγκο κι ζχει τισ εξισ ςυντεταγμζνεσ: (12.0711, 12.0711,199.992) / 200 = (0.0603555, 0.0603555, 0,99996) (12.0711, -12.0711,199.992) / 200 = (0.0603555, -0.0603555, 0,99996) (-12.0711, -12.0711,199.992) / 200 = (-0.0603555, -0.0603555, 0,99996) (-12.0711, 12.0711,199.992) / 200 = (-0.0603555, 0.0603555, 0,99996) Στθν ςυνζχεια μεταςχθματίηονται οι x,y ςυνιςτϊςεσ του κανονικοποιθμζνου όγκου προβολισ ςε ςυντεταγμζνεσ οκόνθσ, οπότε ζχουμε: (0.0603555, 0.0603555) (0.53017775, 0.53017775) (0.0603555, -0.0603555) (0.53017775, 0.46982225) (-0.0603555, -0.0603555) (0.46982225, 0.46982225) (-0.0603555, 0.0603555) (0.46982225, 0.53017775) Επομζνωσ, τα τζςςερα ςθμεία του τετραγϊνου που ςχεδιάηουμε κα απεικονιςτοφν τελικά, ςτα εξισ pixels τθσ εικόνασ, ςτθν οκόνθ του υπολογιςτι (θ ανάλυςθ που ζχουμε επιλζξει είναι 512x512 pixels): (0.53017775, 0.53017775) (271.451008, 271.451008) (0.53017775, 0.46982225) (271.451008, 240.548992) (0.46982225, 0.46982225) (240.548992, 240.548992) (0.46982225, 0.53017775) (240.548992, 271.451008) Από ότι βλζπουμε, οι ςυντεταγμζνεσ των ςθμείων όταν αυτά απεικονίηονται ςε εικονοςτοιχεία ςτθν οκόνθ του υπολογιςτι δεν είναι ακζραιοι αρικμοί. Αυτό ςθμαίνει ότι δεν είναι ακριβϊσ ευκυγραμμιςμζνα τα εικονοςτοιχεία με τισ πραγματικζσ ςυντεταγμζνεσ των μεταςχθματιςμζνων ςθμείων. Το φαινόμενο αυτό ζχει ωσ αποτζλεςμα να παρουςιάηονται ζντονεσ ακμζσ ςτο περίγραμμα των 46

αντικειμζνων. Θ λφςθ ςε αυτό το πρόβλθμα είναι ο multisample buffer που παρουςιάςτθκε ςε προθγοφμενθ ενότθτα και ζνα παράδειγμα εφαρμογισ του είναι θ Εικόνα 7. Με τον multisample buffer κάκε εικονοςτοιχείο δειγματολθπτείται πολλαπλζσ φορζσ ζτςι ϊςτε να υπολογίηεται με ακρίβεια πιο ποςοςτό του καλφπτει κάκε ςχιμα ςτθν τελικι εικόνα κι ζτςι να χρωματίηεται ανάλογα με τα ποςοςτά κάλυψθσ κι όχι από ζνα χρϊμα αποκλειςτικά. Τελικά, βλζπουμε ότι το τετράγωνο απεικονίςτθκε ςε 271.451008-240.548992 = 30.902016 pixels ςτο x άξονα τθσ οκόνθσ και ςε επίςθσ 30.902016 pixels ςτον y άξονα τθσ οκόνθσ, θ οποία ζχει 512x512 pixels ανάλυςθ. Αυτό που απομζνει είναι να εφαρμοςτεί θ υφι ςτο τετράγωνο, αφοφ αυτό πλζον ζχει μετατραπεί ςε εικονοςτοιχεία. Κεωροφμε πωσ θ υφι ζχει διαςτάςεισ 256x256 pixels κι ότι εφαρμόηουμε ςε αυτιν, τθν τεχνικι του mip-mapping που παρουςιάςτθκε ςτθν προθγοφμενθ ενότθτα. Αυτό ςθμαίνει πωσ θ υφι αποκθκεφεται από το API ςε διαφορετικά μεγζκθ και ςυγκεκριμζνα ςτα εξισ: 256x256 (αρχικό μζγεκοσ), 128x128, 64x64, 32x32, 16x16, 8x8, 4x4, 2x2, 1x1. Ενεργοποιϊντασ το φιλτράριςμα, θ GPU επιλζγει τθν ι τισ υφζσ που ζχουν το κατάλλθλο μζγεκοσ ςε ςχζςθ με τα εικονοςτοιχεία που καταλαμβάνει θ γεωμετρία ςτθν οκόνθ ζτςι ϊςτε να μθν παρουςιάηονται προβλιματα ποιότθτασ όπωσ φαίνονται ςτθν Εικόνα 20. Στο ςυγκεκριμζνο παράδειγμα, τα εικονοςτοιχεία τα οποία πρζπει να καλυφκοφν από τθν υφι είναι 30.902016x30.902016, δθλαδι όςθ θ επιφάνεια του τετραγϊνου. Αυτό ςθμαίνει πωσ θ GPU κα επιλζξει τθν υφι με μζγεκοσ 32x32 αν εφαρμόηουμε διγραμμικό φιλτράριςμα (bilinear filtering), ι τισ υφζσ που ζχουν μζγεκοσ 32x32 και 16x16 αν εφαρμόηουμε τριγραμμικό φιλτράριςμα (trilinear filtering). Θ επιλογι του κατάλλθλου μεγζκουσ γίνεται από τθν GPU με βάςθ τθν παράγωγο που ζχουν οι ςυντεταγμζνεσ υφισ ςε ςχζςθ με το μζγεκοσ τθσ υφισ. Στθν ςυγκεκριμζνθ περίπτωςθ ο ρυκμόσ αφξθςθσ των ςυντεταγμζνων υφισ είναι 1/30.902016 ανά εικονοςτοιχείο ενϊ το ιδανικό κα ιταν θ αφξθςθ να είναι 1/256, δθλαδι ίςθ με τθν φυςικι ανάλυςθ τθσ υφισ. Οι γλώςςεσ προγραμματιςμού των GPUs Στθν προθγοφμενθ ενότθτα περιγράψαμε τα APIs. Αυτι θ περιγραφι, προφανϊσ, δεν είναι λεπτομερισ, αφοφ ςκοπόσ αυτισ τθσ εργαςίασ είναι να δθμιουργιςει το υπόβακρο για τθν ανάλυςθ των δικϊν μασ υλοποιιςεων κι όχι μία εκτενισ περιγραφι των APIs για τθν παραγωγι γραφικϊν. Στθν βιβλιογραφία αναφζρονται πολφ καλζσ πθγζσ, όπου ο ενδιαφερόμενοσ μπορεί να εμβακφνει ςε αυτά [7] [8] [9] [10]. Ραρόλα αυτά, ζγινε εμφανζσ, πωσ θ πολυπλοκότθτα των καταςτάςεων των APIs και των παραμζτρων τουσ, τισ οποίεσ καλείται να ελζγξει και να ορίςει ο προγραμματιςτισ είναι πάρα πολφ μεγάλοσ, με αποτζλεςμα θ παραγωγι γραφικϊν να γίνεται μία πολφπλοκθ διαδικαςία, με μεγάλθ τθν πικανότθτα προβλθμάτων ςτο 47

οπτικό αποτζλεςμα, χωρίσ ανάλυςθ κι επανζλεγχο του κϊδικα. Επιπλζον, με τθν ςυνεχι κλιςθ ςυναρτιςεων και τθν παραμετροποίθςθ των GPUs ζχουμε μεγάλθ επιβάρυνςθ ςτθν απόδοςθ τθσ εφαρμογισ αφοφ αυξάνεται θ επικοινωνία ανάμεςα ςτο πρόγραμμα, το API και τθν GPU. Θ ενςωμάτωςθ ολοζνα και περιςςότερθσ λειτουργικότθτασ ςτισ GPUs τα τελευταία χρόνια και θ δθμιουργία αντίςτοιχα περιςςότερων καταςτάςεων και παραμζτρων ςτα APIs για τον ζλεγχό τουσ, οδιγθςε ςτθν δθμιουργία προγραμματιηόμενων μονάδων ςτο pipeline των GPUs με ςκοπό όχι μόνο τθν μεγαλφτερθ ευελιξία και των ζλεγχο τθσ πολυπλοκότθτασ προγραμματιςμοφ αλλά και τθν δθμιουργία νζων ςκιάςεων που πριν ιταν αδφνατο να επιτευχκοφν. Οι γλϊςςεσ προγραμματιςμοφ που ζχουν επικρατιςει ςιμερα είναι οι GLSL (OpenGL Shading Language) [7], HLSL (High Level Shading Language) [11] και Cg (C for graphics) [12]. Θ πρϊτθ γλϊςςα αναπτφχκθκε από τθν κοινότθτα του OpenGL και ςυνεργάηεται με αυτό, θ δεφτερθ αναπτφχκθκε από τθν Microsoft και ςυνεργάηεται με το DirectX και θ τρίτθ αναπτφχκθκε από τθν Nvidia και ςυνεργάηεται και με τα δφο παραπάνω APIs. Πλεσ οι παραπάνω γλϊςςεσ προςφζρουν τισ ίδιεσ δυνατότθτεσ ςτον προγραμματιςτι. Θ διαφοροποίθςι τουσ ζγκειται ςτο ςυντακτικό τουσ και ςτθν ενςωμάτωςι τουσ ςτο API. Συγκεκριμζνα, οι γλϊςςα HLSL ενθμερϊνεται και αναβακμίηεται με νζα χαρακτθριςτικά από τθν Microsoft με τρόπο αντίςτοιχο του DirectX. Δθλαδι, θ Microsoft ανά τακτά χρονικά δθμοςιεφει καινοφριεσ εκδόςεισ του μεταγλωττιςτι (compiler) που μεταφράηει τα προγράμματα γραμμζνα ςε HLSL. Θ μετάφραςθ αυτι δεν οδθγεί ςε γλϊςςα μθχανισ απ ευκείασ, αλλά ςε μία ενδιάμεςθ γλϊςςα που υποςτθρίηεται από τον οδθγό κάκε κάρτασ γραφικϊν. Αντίςτοιχα, ςυμβαίνει με τθν Cg. Τζλοσ, θ GLSL γλϊςςα ακολουκεί μία διαφορετικι φιλοςοφία. Δεν παρζχεται μεταγλωττιςτισ από τθν OpenGL ARB ομάδα που τθν ενθμερϊνει, αλλά απαιτείται από κάκε καταςκευαςτι GPUs να παρζχει τον κατάλλθλο μεταγλωττιςτι, που είναι ενςωματωμζνοσ μζςα ςτον οδθγό τθσ GPU, για τθν μετάφραςθ κι εκτζλεςθ των προγραμμάτων. Τζλοσ, ςθμαντικό κζμα ςε κάκε γλϊςςα προγραμματιςμοφ είναι θ ενςωμάτωςι τθσ με το API. Δθλαδι, θ επικοινωνία ανάμεςα ςτα προγραμματιηόμενα τμιματα τθσ GPU και ςτο API. Τα προγραμματιηόμενα τμιματα των GPUs αυξάνονται όςο αυτζσ εξελίςςονται κι ζτςι επεκτείνεται το ςυντακτικό τθσ γλϊςςασ ενϊ γίνονται οι κατάλλθλεσ αλλαγζσ ςτα APIs για τθν διαχείριςθ των νζων προγραμματιηόμενων μονάδων. Θ ανάλυςθ που κα ακολουκιςει κα γίνει με βάςθ το μοντζλο ςκίαςθσ 48

3.0. Αυτό το μοντζλο ςκίαςθσ, ορίηει 2 προγραμματιηόμενα τμιματα επάνω ςε μία GPU, τουσ Vertex και τουσ Pixel επεξεργαςτζσ. Ζνα πρόγραμμα γραμμζνο να τρζχει ςτουσ Vertex επεξεργαςτζσ εκτελείται όμοια για κάκε ζνα ςθμείο γεωμετρίασ που δζχεται ςτθν είςοδό του, μαηί με όποια επιπλζον πλθροφορία. Αντίςτοιχα, ζνα πρόγραμμα γραμμζνο για τουσ Pixel επεξεργαςτζσ, εκτελείται όμοια, για κάκε ζνα εικονοςτοιχείο τθσ οκόνθσ. Θ εκτζλεςθ είναι ςειριακι και δεν υπάρχει επικοινωνία μεταξφ γειτονικϊν ςθμείων ι εικονοςτοιχείων. Κάκε ζνα αντιμετωπίηεται ανεξάρτθτα από τθν γεωμετρικι οντότθτα ςτθν οποία ανικει. Ο προγραμματιςτισ ζχει τρόπουσ να χρθςιμοποιιςει πλθροφορίεσ από γειτονικά εικονοςτοιχεία ι γεωμετρία, αλλά αυτό απαιτεί να αναπτφξει δικοφσ του αλγορίκμουσ. Στθν ςυνζχεια, κα δοφμε τα κυριότερα χαρακτθριςτικά των γλωςςϊν προγραμματιςμοφ των GPUs. Πλεσ οι γλϊςςεσ είναι μθ αντικειμενοςτραφείσ και ζχουν ςαν βάςθ τθν C, με διαφοροποιιςεισ ςτο ςυντακτικό κι ενςωμάτωςθ χαρακτθριςτικϊν από τθν C++. Συγκεκριμζνα, από τθν C++ οι γλϊςςεσ ζχουν υιοκετιςει τουσ constructors και τθν υπερφόρτωςθ μεκόδων (method overloading). Από τθν άλλθ, επειδι τα προγράμματα πρζπει να τρζχουν πολφ γριγορα ςτθν GPU κι επειδι είναι ςυνικωσ μικρά ςε μζγεκοσ και απαιτθτικά ςε μακθματικζσ πράξεισ δεν υιοκετικθκαν άλλα αντικειμενοςτραφι χαρακτθριςτικά αλλά ακολουκείται το προςτακτικό μοντζλο προγραμματιςμοφ. Οι γλϊςςεσ των GPUs υποςτθρίηουν επιπλζον τφπουσ δεδομζνων από ότι θ C. Υποςτθρίηονται πίνακεσ διάςταςθσ 4x4 οι οποίοι αποκθκεφουν τουσ πίνακεσ μεταςχθματιςμϊν και προβολισ, και διανφςματα διάςταςθσ 2,3 και 4 ςτοιχείων. Πλοι οι παραπάνω τφποι μποροφν να περιζχουν bool, float, half float, ι int τιμζσ. Επίςθσ, όλεσ οι πράξεισ που εκτελοφνται ςτισ GPUs παραλλθλοποιοφνται από τον μεταγλωττιςτι και υπολογίηονται ςε διανφςματα των τεςςάρων ςτοιχείων. Αυτό ςυμβαίνει γιατί τόςο τα ςθμεία ςτον χϊρο, όςο και το χρϊμα ςτθν οκόνθ αναπαρίςταται, όπωσ ζχουμε ιδθ αναφζρει από τζςςερισ ςυνιςτϊςεσ. Πλεσ οι πράξεισ ςτθν GPU γίνονται με ακρίβεια 32bit floating point αρικμθτικι, ενϊ υπάρχουν υλοποιιςεισ που ζχουν μεγάλο κόςτοσ αλλά υποςτθρίηουν και 64bit floating point ακρίβεια. Οι δεφτερεσ, χρθςιμοποιοφνται όχι μόνο για τθν παραγωγι γραφικϊν αλλά και για υπολογιςμό γενικοφ ςκοποφ που απαιτεί ταχφτθτα ςε ςυνδυαςμό με ακρίβεια ςτο αποτζλεςμα. Γενικά, οι GPUs δεν χρθςιμοποιοφν denormals, γιατί κάτι τζτοιο απαιτεί υλικό και δεν απαιτείται τζτοιου είδουσ ακρίβεια από τθν κοινότθτα των τριςδιάςτατων εφαρμογϊν. Ζνα ςθμαντικό χαρακτθριςτικό των γλωςςϊν είναι οι ενςωματωμζνεσ ςυναρτιςεισ που διακζτουν. Οι ςυναρτιςεισ είναι μακθματικζσ και μποροφν να κατθγοριοποιθκοφν ςε τρεισ κατθγορίεσ: τριγωνομετρικζσ, εκκετικζσ και γενικοφ ςκοποφ. Αυτζσ οι ςυναρτιςεισ υπάρχουν για να διευκολφνουν τον προγραμματιςμό αφοφ αποτελοφν εργαλεία που χρθςιμοποιοφνται πολφ ςυχνά για τθν δθμιουργία 49

ςκιάςεων. Επίςθσ, προςφζρουν ομοιογζνεια ςτα προγράμματα και ςε άλλεσ περιπτϊςεισ αποτελοφν τον μοναδικό τρόπο για τθν προςπζλαςθ του υλικοφ από τον προγραμματιςτι (όπωσ ςτθν περίπτωςθ τθσ προςπζλαςθσ τθσ υφισ). Επιπλζον, επειδι υλοποιοφνται από τον καταςκευαςτι ζχουν και τθν μζγιςτθ δυνατι απόδοςθ. Σθμαντικό είναι να αποςαφθνιςτεί πωσ το API επικοινωνεί με τα προγράμματα τα οποία εκτελοφνται ςτθν GPU κι ζχουν γραφεί με μία από τισ παραπάνω γλϊςςεσ. Σε αυτό το κζμα υπάρχουν δφο προςεγγίςεισ. Το OpenGL επικοινωνεί με τα GLSL προγράμματα με χριςθ ςυναρτιςεων που ορίηουν ποιο δεδομζνο που κρατά το OpenGL αντιςτοιχεί ςτθν εκάςτοτε είςοδο του GLSL προγράμματοσ. Γίνεται δθλαδι μία ςφνδεςθ (binding) κατά τθν εκτζλεςθ του κϊδικα ανάμεςα ςτα δεδομζνα του OpenGL και τα δεδομζνα που απαιτεί ζνα GLSL πρόγραμμα για να τρζξει. Σε αυτό το ςθμείο γίνονται ζλεγχοι ορκότθτασ ανάμεςα ςτο είδοσ των δεδομζνων που δίνει το OpenGL και τα δεδομζνα που περιμζνει το GLSL πρόγραμμα. Επιπλζον, υπάρχει επικοινωνία ανάμεςα ςτα επιμζρουσ GLSL προγράμματα (Vertex Shaders και Pixel Shaders) αφοφ θ ζξοδοσ από τον Vertex Shader αποτελεί τθν είςοδο για τον Pixel Shader. Θ αντιςτοίχιςθ των ειςόδων και των εξόδων και ςε αυτι τθν περίπτωςθ γίνεται με τρόπο παρόμοιο. Το DirectX επικοινωνεί με τα HLSL προγράμματα και οι Vertex Shaders και Pixel Shaders μεταξφ τουσ, κάνοντασ χριςθ προκακοριςμζνων λζξεων (semantics). Συγκεκριμζνα για τθν επικοινωνία ανάμεςα ςτο Vertex πρόγραμμα και το DirectX υπάρχουν οι παρακάτω προκακοριςμζνεσ λζξεισ που χρθςιμοποιοφνται για τθν αντιςτοίχιςθ των ειςόδων. Στο HLSL πρόγραμμα ο προγραμματιςτισ ορίηει μεταβλθτζσ οι οποίεσ ακολουκοφνται από μία από τισ παρακάτω λζξεισ κάνοντασ χριςθ του εξισ ςυντακτικοφ: <όνομα μεταβλθτισ> : προκακοριςμζνθ λζξθ. Για παράδειγμα ο κϊδικασ: geometry : POSITION0 ςθμαίνει πωσ θ μεταβλθτι με όνομα geometry, περιζχει τθν γεωμετρία του μοντζλου που τθσ παρζχει το DirectX. Στουσ παρακάτω πίνακεσ το *n+ ςθμαίνει πωσ οι δεςμευμζνεσ λζξεισ μπορεί να ζχουν n ςτο πλικοσ διαφορετικά ονόματα. Για παράδειγμα το COLOR[N] αντιςτοιχεί ςτο: COLOR0, COLOR1, COLOR2,, COLORN. Επομζνωσ ςαν είςοδοσ ςτο πρόγραμμα μπορεί να υπάρχουν πάνω από μία τιμζσ χρϊματοσ. 50

Είςοδοσ Περιγραφι Σφποσ δεδομζνων BINORMAL[n] Συνεφαπτομζνθ float4 BLENDINDICES[n] Δείκτεσ ανάμιξθσ uint BLENDWEIGHT[n] Βάρθ ανάμιξθσ float COLOR[n] Χρϊμα διάχυςθσ ι ανάκλαςθσ float4 NORMAL[n] Κάκετο διάνυςμα επιφάνειασ float4 POSITION[n] Συντεταγμζνεσ ςθμείου float4 POSITIONT Συντεταγμζνεσ μεταςχθματιςμζνου ςθμείου float4 PSIZE[n] Μζγεκοσ ςθμείου float TANGENT[n] Εφαπτομζνθ float4 TEXCOORD[n] Συντεταγμζνεσ υφισ float4 Οι προκακοριςμζνεσ λζξεισ για τθν περιγραφι των εξόδων του Vertex Shader είναι: Ζξοδοσ Περιγραφι Σφποσ δεδομζνων COLOR[n] Χρϊμα διάχυςθσ ι ανάκλαςθσ float4 FOG Τιμι ομίχλθσ για το ςθμείο float POSITION[n] Κζςθ ενόσ ςθμείου ςε ομογενείσ ςυντεταγμζνεσ. Θ κζςθ ςτθν οκόνθ υπολογίηεται διαιρϊντασ με w. Κάκε Vertex Shader πρζπει να υπολογίηει αυτι τθν τιμι. float4 PSIZE Μζγεκοσ ςθμείου float TESSFACTOR[n] Ραράγοντασ διακριτοποίθςθσ float TEXCOORD[n] Συντεταγμζνεσ υφισ float4 51

Οι ζξοδοι αυτοί δίδονται κι αποτελοφν τθν είςοδο του Pixel Shader μαηί με κάποιεσ επιπλζον παραμζτρουσ. Στθν ςυνζχεια παρουςιάηονται οι είςοδοι ενόσ Pixel Shader: Είςοδοσ Περιγραφι Σφποσ δεδομζνων COLOR[n] Χρϊμα διάχυςθσ ι ανάκλαςθσ float4 TEXCOORD[n] Συντεταγμζνεσ υφισ float4 VFACE Τιμι που περιγράφει τον προςανατολιςμό μίασ επιφάνειασ. Αν είναι κετικι, τότε θ επιφάνεια είναι προςανατολιςμζνθ προσ τθν μεριά του παρατθρθτι, ενϊ είναι αρνθτικι ςε αντίκετθ περίπτωςθ float VPOS Θ κζςθ του pixel ςε ςυντεταγμζνεσ οκόνθσ float2 Τζλοσ οι προκακοριςμζνεσ λζξεισ για τθν ζξοδο ενόσ Pixel Shader είναι: Ζξοδοσ περιγραφι Σφποσ δεδομζνων COLOR[n] Χρϊμα float4 DEPTH[n] Βάκοσ float Θ ζξοδοσ από τον Pixel Shader μπορεί να είναι πολλζσ τιμζσ χρϊματοσ (ζωσ 4 ταυτόχρονα) κι αντίςτοιχα το βάκοσ που αντιςτοιχεί ςτο κάκε ζνα από τα pixels. Οι Vertex και θ Pixel επεξεργαςτζσ μίασ GPUS, ενϊ προγραμματίηονται με τθν ίδια γλϊςςα, δεν υποςτθρίηουν και οι δφο όλα τα χαρακτθριςτικά τθσ, δθλαδι υπάρχουν εντολζσ και ςυναρτιςεισ που υποςτθρίηονται μόνο από το ζνα είδοσ επεξεργαςτϊν. Για παράδειγμα, ςτο μοντζλο ςκίαςθσ 3, με βάςθ το οποίο κάνουμε τθν ανάλυςθ ςτθν ςυγκεκριμζνθ εργαςία, υποςτθρίηει τθν προςπζλαςθ υφϊν ςτουσ Vertex επεξεργαςτζσ αλλά υποςτθρίηονται πολφ ςυγκεκριμζνα format εικόνασ (μόνο floating point τιμζσ). Άλλο παράδειγμα είναι ότι οι Pixel επεξεργαςτζσ, γνωρίηουν τθν κζςθ ενόσ εικονοςτοιχείου ςτθν οκόνθ, ενϊ οι Vertex επεξεργαςτζσ όχι. Ενϊ οι GPUs υποςτθρίηουν ζλεγχο ροισ, θ απόδοςι τουσ επθρεάηεται ςε μεγάλο βακμό από τθν δομι των προγραμμάτων και τον ζλεγχο ροισ που υπάρχει ςε αυτά. Οι GPUs προςφζρουν μεγάλθ παραλλθλία μειϊνοντασ το υλικό που χρθςιμοποιείται για ζλεγχο ροισ κι αυξάνοντασ το υλικό που κάνει τουσ υπολογιςμοφσ. Αυτό ςθμαίνει πωσ ο προγραμματιςτισ κα πρζπει να αποφεφγει κϊδικα που απαιτεί ζλεγχο ροισ και να τον μετατρζπει, όποτε είναι δυνατόν, ςε ςειριακό. Κάτι τζτοιο δεν απαιτείται πάντα, αλλά εξαρτάται από το είδοσ του ελζγχου ροισ. Υπάρχουν δφο είδθ ελζγχου ροισ, το δυναμικό και το ςτατικό. 52

Ζνα παράδειγμα ςτατικοφ ελζγχου ροισ είναι: if ligting == true {compute ligting; } Σε αυτι τθν περίπτωςθ θ μεταβλθτι lighting ορίηεται από τον προγραμματιςτι πριν τθν εκτζλεςθ του προγράμματοσ κι είναι ςτακερι για όλα τα ςτοιχεία. Επομζνωσ, ο compiler γνωρίηει τθν ζκβαςθ αυτισ τθσ ςυνκικθσ και δεν υπάρχει επίπτωςθ ςτισ επιδόςεισ. Ζνα παράδειγμα δυναμικοφ ελζγχου ροισ είναι: float a = texture2d sampler, coords. xy. r; if a > 2.0 {compute someting; } Στθν περίπτωςθ του δυναμικοφ ελζγχου ροισ, ο compiler δεν μπορεί να εκτιμιςει τθν ζκβαςθ τθσ ςυνκικθσ, μιασ κι αυτι κα κακοριςτεί από τθν τιμι που κα προςκομιςτεί από τθν μνιμθ (texture2d sampler, coords. xy. r). Κάκε διαφορετικό ςθμείο ι εικονοςτοιχείο ςε αυτι τθν περίπτωςθ μπορεί να ακολουκιςει διαφορετικό μονοπάτι υπολογιςμοφ κι επομζνωσ κα υπάρχει μεγάλθ επίπτωςθ ςτισ επιδόςεισ. Συγκεκριμζνα, ςε αυτι τθν περίπτωςθ υπολογίηονται και τα 2 μονοπάτια και τελικά αποκθκεφεται θ τιμι θ οποία είναι αλθκισ για κάκε ςτοιχείο. Σθμαντικι παράμετροσ ςτθν απόδοςθ για τον δυναμικό ζλεγχο ροισ είναι θ χωρικι ομοιομορφία των διακλαδϊςεων του υπολογιςμοφ. Αυτό ςθμαίνει πωσ αν υπάρχουν διακριτζσ περιοχζσ με πολλά εικονοςτοιχεία ςτθν οκόνθ τα οποία πρόκειται να ακολουκιςουν το ίδιο μονοπάτι ςτον υπολογιςμό, τότε πράγματι υπάρχει αφξθςθ των επιδόςεων. Αν από τθν άλλθ δεν ιςχφει το παραπάνω αλλά είναι τυχαία θ κατανομι των διακλαδϊςεων ςτα εικονοςτοιχεία, τότε θ απόδοςθ μπορεί να πζςει κάτω από το μιςό. Ρροφανϊσ τα παραπάνω ςτοιχεία είναι μείηονοσ ςθμαςίασ ςτθν δθμιουργία αποδοτικϊν ςκιάςεων. 53

Ανϊλυςη πολυπλοκότητασ για την ςχεδύαςη μύασ τριςδιϊςτατησ ςκηνόσ Μζχρισ αυτό το ςθμείο, ζγινε μία ανάλυςθ των APIs και των γλωςςϊν προγραμματιςμοφ των GPUs. Ζχοντασ μία εικόνα του τρόπου λειτουργίασ των GPUs, ςε αυτι τθν ενότθτα, κα γίνει ανάλυςθ πολυπλοκότθτασ μίασ τριςδιάςτατθσ ςκθνισ, για να γίνει ξεκάκαρο γιατί υπάρχουν μεγάλεσ απαιτιςεισ για παραλλθλία ςτον υπολογιςμό και μεγάλθ διαμεταγωγι (bandwidth) ςτθν προςπζλαςθ τθσ μνιμθσ. Οι απαιτιςεισ που κα προκφψουν από αυτι τθν ανάλυςθ, ενϊ μασ δίνουν μία εικόνα για τθν πολυπλοκότθτα, δεν λαμβάνουν υπόψθ άλλεσ παραμζτρουσ που επιβαρφνουν τθν CPU, όπωσ διαχείριςθ μνιμθσ κι αποςτολι δεδομζνων ςτθν GPU, και από τθν GPU, όπωσ αποκικευςθ επιπλζων δεδομζνων που δεν ςχεδιάηονται ςτθν οκόνθ αλλά πρόκειται να ςχεδιαςτοφν ςε επόμενα καρζ, τον υπολογιςμό τθσ φυςικισ προςομοίωςθσ (physics) που μπορεί να γίνεται παράλλθλα ςτθν GPU κ.α. Αυτό ζχει ωσ αποτζλεςμα οι πραγματικζσ απαιτιςεισ ενόσ πολφπλοκου προγράμματοσ, όπωσ είναι, ζνα τριςδιάςτατο δικτυακό παιχνίδι, να είναι πολφ μεγαλφτερεσ. Κεωροφμε πωσ κζλουμε να ςχεδιάςουμε μία ςκθνι, θ οποία αποτελείται από 2 εκατομμφρια ςθμεία. Σε κάκε μοντζλο αυτισ τθσ ςκθνισ κα εφαρμόςουμε τθν τεχνικι του Normal Mapping, θ οποία απαιτεί 2 υφζσ, μία για τον φωτιςμό και μία για τθν προςομοίωςθ τθσ επιφάνειασ του κάκε μοντζλου. Ακόμα τα μοντζλα κα χρθςιμοποιοφν άλλθ μία υφι, θ οποία προςομοιϊνει τθν ανάκλαςθ (specular mapping). Κάκε υφι ζχει διαςτάςεισ 1024x1024 ενϊ εφαρμόηουμε και mipmapping. Θ τεχνικι του Normal Mapping κα παρουςιαςτεί αναλυτικά ςε επόμενθ παράγραφο, αφοφ ςε αυτι τθν ενότθτα μασ ενδιαφζρει μόνο να υπολογίςουμε τισ απαιτιςεισ για τθν ςχεδίαςθ. Ο επικυμθτόσ ρυκμόσ ανανζωςθσ τθσ εικόνασ για μία προςομοίωςθ χωρίσ τρεμόπαιγμα και κακυςτεριςεισ είναι 60 εικόνεσ το δευτερόλεπτο. Επιπλζον, θ ανάλυςθ ςτθν οποία κζλουμε να ςχεδιάςουμε είναι 1600x1200 εικονοςτοιχεία. Με βάςθ τα παραπάνω, ςε επίπεδο απαιτιςεων μνιμθσ ζχουμε: 32.000.000 bytes για τθν αποκικευςθ των ςθμείων τθσ γεωμετρίασ: 2.000.000 * 4 ςυνιςτϊςεσ * 4 bytes. 24.000.000 bytes για τθν αποκικευςθ των κάκετων διανυςμάτων ςτα ςθμεία τθσ γεωμετρίασ: 2.000.000 * 4 ςυνιςτϊςεσ * 3 bytes. 24.000.000 bytes για τθν αποκικευςθ των εφαπτόμενων διανυςμάτων ςτα ςθμεία τθσ γεωμετρίασ: 2.000.000 * 4 ςυνιςτϊςεσ * 3 bytes. 24.000.000 bytes για τθν αποκικευςθ των ςυνεφαπτόμενων διανυςμάτων ςτα ςθμεία τθσ γεωμετρίασ: 2.000.000 * 4 ςυνιςτϊςεσ * 3 bytes. 54

12.000.000 bytes για τθν αποκικευςθ των ςυνιςτωςϊν ςυντεταγμζνων για τθν προςπζλαςθ ςτισ υφζσ (4.194.304 + 1048576 + 262144 + 65536 + 16384) * 3 bytes για τθν αποκικευςθ με τθν τεχνικι του mip-mapping για κάκε μία από τισ υφζσ 1200*1600 * 4 * 2= 15.360.000 bytes χρειάηονται για τθν αποκικευςθ κάκε καρζ τθσ εικόνασ με χριςθ διπλισ προςωρινισ μνιμθσ αποκικευςθσ (double buffering). 5586944 131360000 16760832 Συνολικά, λοιπόν, θ απαιτοφμενθ μνιμθ είναι: 148.120.832 bytes ι 141.26 Μbytes περίπου. Μία ςφγχρονθ GPU ζχει μνιμθ από 256 Mbytes ζωσ 2 Gbytes, οπότε, μπορεί να αποκθκεφςει μία τζτοια ςκθνι. Σχετικά τϊρα με τισ απαιτιςεισ διαμεταγωγισ (bandwidth) μνιμθσ τθσ GPU, δθλαδι για τθν προςκόμιςθ δεδομζνων από τθν μνιμθ τθσ GPU, ςτο ολοκλθρωμζνο που κάνει τθν ςχεδίαςθ, ζχουμε 60 καρζ/sec * 141.26 Mbytes = 8.277 Gbytes / sec. Βλζπουμε εφκολα, πωσ θ μεγάλθ διαμεταγωγι είναι κάτι κεμελιϊδεσ για μία ςχεδίαςθ πραγματικοφ χρόνου. Στθν ςυνζχεια, αναλφουμε τισ απαιτιςεισ ςε υπολογιςμοφσ. Για κάκε ζνα ςθμείο τθσ γεωμετρίασ εκτελοφνται 25 εντολζσ. Κεωροφμε πωσ κάκε εντολι απαιτεί τον ίδιο χρόνο να εκτελεςτεί για λόγουσ απλότθτασ, οπότε θ εκτζλεςθ του Vertex προγράμματοσ για τα 2.000.000 ςθμεία τθσ γεωμετρίασ απαιτεί 50.000.000 εντολζσ. Αντίςτοιχα, για τθν εκτζλεςθ του Pixel προγράμματοσ, για ζνα εικονοςτοιχείο απαιτοφνται 27 εντολζσ, οπότε ςυνολικά είναι: 1600*1200 * 27 = 51.840.000 εντολζσ. Οι παραπάνω εντολζσ εκτελοφνται για τθν ςχεδίαςθ ενόσ καρζ, οπότε για τθν ςχεδίαςθ 60 καρζ απαιτοφνται 101.840.000 * 60 = 6.110.400.000 εντολζσ ι με άλλα λόγια 6.11 GIPS (Giga Instructions Per Second). Επειδι οι GPUs είναι διανυςματικοί επεξεργαςτζσ κάκε εντολι αντιςτοιχεί ςε 3 ι 4 πράξεισ. Κεωρϊντασ πωσ εκτελοφνται ςε κάκε εντολι 3.5 πράξεισ κατά μζςο όρο, παίρνουμε ςαν αποτζλεςμα 6.11 * 3.5 = 21.385 GFLOPS. Από τθν παραπάνω ςφντομθ ανάλυςθ καταλαβαίνουμε πωσ οι απαιτιςεισ για τθν ςχεδίαςθ γραφικϊν, είναι μεγάλεσ. Συγκεκριμζνα, παρατθρείται πωσ οι απαιτιςεισ ςε υπολογιςτικι ιςχφ είναι ςθμαντικά μεγαλφτερεσ από τισ απαιτιςεισ ςε διαμεταγωγι. Αυτό το φαινόμενο αποτυπϊνεται ςιμερα ςτο υλικό των GPUs και ςυγκεκριμζνα ο λόγοσ (υπολογιςτικισ ιςχφοσ)/(διαμεταγωγι προςπζλαςθσ μνιμθσ) είναι πάνω από 6 και αυξάνεται ςε κάκε νζα γενιά GPU. Θ παραπάνω διαπίςτωςθ είναι πολφ ςθμαντικι για τθν επίτευξθ υψθλϊν επιδόςεων. Ρρζπει να γίνεται προςεκτικι χριςθ τθσ διαμεταγωγισ μνιμθσ γιατί το αντίκετο ςθμαίνει πωσ θ GPU μζνει ανενεργι περιμζνοντασ δεδομζνα από τθν μνιμθ. Αυτό οδθγεί είτε ςτθν χριςθ υφϊν που ςυμπιζηονται κάνοντασ χριςθ ειδικϊν format που παρζχει το API, είτε ςτθν περιγραφι των υφϊν, όποτε είναι εφικτό με μακθματικζσ ςυναρτιςεισ. Θ τελευταία προςζγγιςθ που αποτελεί πεδίο ζρευνασ προςφζρει υψθλζσ επιδόςεισ, 55

και παρζχει πολφ καλφτερθ ποιότθτα ςτθν τελικι εικόνα, αφοφ οι υφζσ είναι μακθματικζσ ςυναρτιςεισ που υπολογίηονται εκ νζου ςε κάκε καρζ. ΧΝΑ Το XNA [13] [14] [16]είναι ζνα ςφνολο από εργαλεία και βιβλιοκικεσ (Framework) τα οποία βοθκοφν τον προγραμματιςτι να δθμιουργεί και να ςυντθρεί ι να επεκτείνει θλεκτρονικά παιχνίδια, τριςδιάςτατεσ ι διςδιάςτατεσ εφαρμογζσ πραγματικοφ χρόνου και πολυμεςικζσ εφαρμογζσ. Το XNA παρουςιάςτθκε ςαν ιδζα το 2004 από τθν Microsoft κι ζγινε διακζςιμο ςτουσ προγραμματιςτζσ τον Μάρτιο του 2006. Το XNA ιδθ βρίςκεται ςτθν ζκδοςθ 3.0 και υποςτθρίηει τθν ανάπτυξθ εφαρμογϊν για PC (Windows λειτουργικά μόνο), για Xbox 360 και για το Zune. Το Xbox 360 είναι μία κονςόλα για παιχνίδια που ςυνδζεται με τθν τθλεόραςθ ενϊ το Zune είναι μία φορθτι ςυςκευι πολλαπλϊν χριςεων. Ζνα πρόγραμμα γραμμζνο με το XNA μπορεί να τρζξει με ελάχιςτεσ ι κακόλου αλλαγζσ ςτον κϊδικα ςε PC, Xbox και το Zune. Οι περιοριςμοί που υπάρχουν είναι θ ανάλυςθ (προφανϊσ το PC υποςτθρίηει πολφ περιςςότερεσ αναλφςεισ από ότι το Xbox ι ακόμα περιςςότερο το Zune) και το υλικό: το Xbox και το Zune δεν υποςτθρίηουν είςοδο από τον χριςτθ μζςω ποντικιοφ (mouse) ενϊ δεν υποςτθρίηουν όλα τα χαρακτθριςτικά επιτάχυνςθσ των ςφγχρονων GPUs. Πλεσ αυτζσ οι παράμετροι κα πρζπει να λαμβάνονται υπόψθ ςτθν ανάπτυξθ των εφαρμογϊν, εφόςον μασ ενδιαφζρει να υποςτθρίξουμε κι άλλα ςυςτιματα πζρα από το PC. Το XNA δεν είναι ζνα API όπωσ το DirectX ι το OpenGL. Το XNA είναι ζνα ςφνολο από εργαλεία βιβλιοκικεσ που βαςίηεται ςτο DirectX 9.0C. Ο προγραμματιςμόσ με το XNA γίνεται ςε C# γλϊςςα προγραμματιςμοφ και παράγεται managed κϊδικασ. Managed ονομάηεται ο κϊδικασ εκείνοσ ο οποίοσ δεν εκτελείται κατευκείαν από τθν CPU του υπολογιςτι ςτον οποίο δθμιουργικθκε το πρόγραμμα αλλά από μία εικονικι μθχανι. Θ λογικι είναι παρόμοια με αυτιν τθσ γλϊςςασ προγραμματιςμοφ Java. Συγκεκριμζνα με το XNA (και γενικά με το.net framework) ο προγραμματιςτισ παράγει πθγαίο κϊδικα γραμμζνο ςε C# και ο μεταγλωττιςτισ (compiler) δεν τον μετατρζπει απευκείασ ςε δυαδικό κϊδικα αλλά ςε μία ενδιάμεςθ γλϊςςα (IL Intermediate Language). Αυτι θ ενδιάμεςθ γλϊςςα υπάρχει είτε ςε μορφι δυναμικισ βιβλιοκικθσ (.dll) είτε ςε μορφι εκτελζςιμου (.exe). Πταν ο χριςτθσ εκτελεί τθν εφαρμογι, θ ενδιάμεςθ γλϊςςα που υπάρχει ςτισ παραπάνω μορφζσ, τροφοδοτείται ςε ζνα περιβάλλον εκτζλεςθσ αυτισ τθσ ενδιάμεςθσ γλϊςςασ (Language Runtime). Αυτό το περιβάλλον εκτζλεςθσ μπορεί να εφαρμόηει πολιτικζσ αςφαλείασ και να ελζγχει πλιρωσ τθν πρόςβαςθ ςτθν μνιμθ και τισ κλιςεισ του λειτουργικοφ ςυςτιματοσ που επικυμεί θ εφαρμογι, παρζχοντασ καλφτερο ζλεγχο ςτο πρόγραμμα και αςφάλεια ςτον χριςτθ και ςτα δεδομζνα του. Επιπλζον θ διαχείριςθ των αντικειμζνων και τθσ μνιμθσ (δζςμευςθ κι αποδζςμευςθ μνιμθσ) ελζγχονται από το περιβάλλον εκτζλεςθσ με αποτζλεςμα να αποφεφγονται τα 56

φαινόμενα διαρροισ μνιμθσ (memory leakage) που είναι ζνα από τα ςυνθκζςτερα προβλιματα (bugs) που αντιμετωπίηουν οι προγραμματιςτζσ ςε εφαρμογζσ που δεν είναι managed. Τα παραπάνω πλεονεκτιματα όμωσ ζχουν και το κόςτοσ τουσ. Το μεγαλφτερο μειονζκτθμα είναι οι χαμθλότερεσ επιδόςεισ ςτθν εκτζλεςθ των εφαρμογϊν. Ανάλογα με τθν ποιότθτα και τθν βελτιςτοποίθςθ που ζχει δεχκεί ο κϊδικασ θ πτϊςθ κυμαίνεται από 5 ζωσ 15 %. Επειδι οι managed εφαρμογζσ δεν εκτελοφνται απευκείασ ςτθν CPU αλλά ςτθν εικονικι μθχανι, αυτό το επιπλζον ςτρϊμα αφαίρεςθσ ανάμεςα ςτον κϊδικα και το υλικό ειςάγει επιπλζον υπολογιςτικό φορτίο και κακυςτζρθςθ. Επειδι, λοιπόν, με το XNA παράγεται managed κϊδικασ και οι εφαρμογζσ πραγματικοφ χρόνου που επικυμοφμε να δθμιουργιςουμε είναι πολφ απαιτθτικζσ ςε ταχφτθτα και υπολογιςτικοφσ πόρουσ, απαιτείται ιδιαίτερθ προςοχι και ςυγκεκριμζνεσ τακτικζσ, οι οποίεσ κα παρουςιαςτοφν ςτθν ςυνζχεια, για να αποφευχκοφν κακυςτεριςεισ και κακι απόδοςθ. Το μεγαλφτερο πλεονζκτθμα κι ουςιαςτικά αυτό που αντιςτακμίηει τθν πτϊςθ τθσ απόδοςθσ με τθν χριςθ managed κϊδικα είναι θ αποφυγι λακϊν (bugs) ςτον κϊδικα και ο καλφτεροσ ζλεγχοσ των λειτουργιϊν και των πόρων που απαιτεί. Ειδικά ςε μεγάλα και πολφπλοκα ζργα, όπωσ είναι, θ δθμιουργία πολυμεςικϊν εφαρμογϊν πραγματικοφ χρόνου και τα θλεκτρονικά παιχνίδια, αυτό το πλεονζκτθμα είναι μείηονοσ ςθμαςίασ αφοφ επιταχφνει τθν ανάπτυξθ, μειϊνοντασ τουσ χρόνουσ δοκιμϊν (testing) και τουσ χρόνουσ που χρειάηονται για τθν επίλυςθ λακϊν ςτθν εφαρμογι. Κα πρζπει να ςθμειωκεί ότι με τθν ςυνεχόμενθ εξζλιξθ του υλικοφ και τθν αφξθςθ τθσ παραλλθλίασ και τθσ ταχφτθτασ των επεξεργαςτϊν, θ μειωμζνθ ταχφτθτα εκτζλεςθσ του managed κϊδικα, δεν αποτελεί τόςο μεγάλο πρόβλθμα όςο πριν μερικά χρόνια. Αυτό ζχει ωσ αποτζλεςμα όλο και περιςςότεροι καταςκευαςτζσ λογιςμικοφ να ςτρζφονται προσ αυτό το είδοσ τεχνολογίασ. Σε αυτιν τθν εργαςία όλα τα πειράματα και οι ςκιάςεισ δθμιουργικθκαν και βαςίηονται ςτο XNA. Επιπλζον οι υλοποιιςεισ μασ υποςτθρίηουν μόνο PC κι όχι άλλα ςυςτιματα (Xbox και Zune). Χαρακτηριςτικϊ του XNA Αναφζρκθκε ιδθ, πωσ το XNA βαςίηεται ςτο DirectX 9.0C ΑPI και ζχει μία αρχιτεκτονικι θ οποία επιτρζπει τθν εφκολθ επζκταςι του και τθν ενςωμάτωςθ νζων χαρακτθριςτικϊν ςε αυτό. Με το XNA ο προγραμματιςτισ δεν καλεί ςυναρτιςεισ του DirectX API για να προγραμματίςει τθν GPU αλλά μεκόδουσ κάνοντασ χριςθ τθσ γλϊςςασ C#. Το XNA υποςτθρίηει το μοντζλο ςκίαςθσ ζκδοςθσ 3.0 κι επομζνωσ υποςτθρίηει προγραμματιηόμενουσ επεξεργαςτζσ γεωμετρίασ κι εικονοςτοιχείων. Το XNA πζρα από τισ βιβλιοκικεσ ςχεδίαςθσ γραφικϊν και πολυμζςων πραγματικοφ χρόνου, προςφζρει κι άλλεσ βιβλιοκικεσ για τθν ανάπτυξθ εφαρμογϊν. Αυτζσ ανικουν ςε 7 κατθγορίεσ και κα παρουςιαςτοφν ςτθν ςυνζχεια. 57

Βιβλιοθήκη γραφικών Το XNA παρζχει μεκόδουσ για τθν ςχεδίαςθ με βάςθ το DirectX 9.0C. Ρροφανϊσ μπορεί να ςχεδιάηει είτε διςδιάςτατα είτε τριςδιάςτατα γραφικά. Ο προγραμματιςτισ μπορεί να δθμιουργεί βοθκθτικζσ επιφάνειεσ για ςχεδίαςθ, να δθμιουργεί και να επεξεργάηεται ςκιάςεισ και γενικότερα να ελζγχει πλιρωσ τθν διαδικαςία παραγωγισ γραφικϊν. Ραρζχεται μία πλθκϊρα βοθκθτικϊν μεκόδων ςχετικά με γραφικά, όπωσ είναι θ δθμιουργία και θ διαχείριςθ των παρακφρων ςτα οποία κα γίνεται θ ςχεδίαςθ, ενϊ υποςτθρίηεται θ μεταφορά δεδομζνων κι από τθν κάρτα γραφικϊν προσ τον κεντρικό επεξεργαςτι του ςυςτιματοσ. Επιπλζον, το XNA, παρζχει μία υλοποίθςθ βαςικισ ςκίαςθσ για να μπορεί ζνασ αρχάριοσ χριςτθσ να πειραματιςτεί και να κατανοιςει καλφτερα τθν διαδικαςία ςχεδίαςθσ. Διαχείριςη Περιεχομένου Το XNA υποςτθρίηει μία πλθκϊρα μορφϊν αποκικευςθσ (formats) υφϊν, τριςδιάςτατων μοντζλων, ςκιάςεων, γραμματοςειρϊν, xml αρχείων παραμετροποίθςθσ και αρχείων ιχου ςε ςυνδυαςμό με πολλζσ μεκόδουσ διαχείριςθσ αυτϊν. Μερικζσ από τισ μορφζσ που υποςτθρίηονται είναι:.fbx και.x μορφζσ αποκικευςθσ τριςδιάςτατων μοντζλων.fx αρχεία αποκικευςθσ ςκιάςεων.bmp,.dds,.dib,.hdr,.jpg,.pfm,.png,.ppm, και.tga αρχεία αποκικευςθσ υφϊν Γενικά, θ διαχείριςθ του περιεχομζνου (άνοιγμα, κλείςιμο, αποκικευςθ, αλλαγι αρχείων) είναι ζνα από τα πιο πολφπλοκα κζματα και το XNA πζρα από τθν απευκείασ υποςτιριξθ των παραπάνω μορφϊν, επιτρζπει ςτον προγραμματιςτι να υποςτθρίξει κι άλλεσ μορφζσ από άλλα πρότυπα ι να δθμιουργιςει τα δικά του. Τζλοσ, το XNA παρζχει τρόπουσ για παραμετροποίθςθ τθσ διαχείριςθσ του περιεχομζνου με γραφικό τρόπο. Για παράδειγμα, κατά το άνοιγμα ενόσ τριςδιάςτατου μοντζλου, παρζχεται εφκολοσ τρόποσ μζςα από το περιβάλλον ανάπτυξθσ, να ενςωματωκοφν ςε αυτό πλθροφορίεσ ςχετικά με το κάκετο διάνυςμα, τθν εφαπτομζνθ και τθν ςυνεφαπτομζνθ κάκε ςθμείου τθσ γεωμετρίασ εφόςον αυτό περιζχει ιδθ ςυντεταγμζνεσ υφϊν. Μαθηματικέσ βιβλιοθήκεσ Ρολφ ςθμαντικι είναι θ υποςτιριξθ μακθματικϊν πράξεων και ςυναρτιςεων, αφοφ είναι μείηονοσ ςθμαςίασ ςτισ τριςδιάςτατεσ εφαρμογζσ. Το XNA, υποςτθρίηει με αποδοτικό τρόπο μακθματικζσ πράξεισ μεταξφ πινάκων, διανυςμάτων και πολλζσ επιπλζον λειτουργίεσ επί αυτϊν. Για παράδειγμα, παρζχονται μζκοδοι για τθν εφρεςθ των αντιςτρόφων πινάκων, για τθν εφρεςθ του ανάςτροφου, τθν εφρεςθ ιδιοτιμϊν, τθν εφρεςθ απόςταςθσ ςθμείου από ευκεία ι επίπεδο κ.α. Επιπλζον, παρζχονται μζκοδοι που βρίςκουν τον κφβο ι τθν ςφαίρα που περιζχει ζνα 58

τριςδιάςτατο μοντζλο, ζτςι ϊςτε να χρθςιμοποιθκεί αυτι θ πλθροφορία ςτουσ ελζγχουσ ςφγκρουςθσ μεταξφ αντικειμζνων. Επειδι οι μζκοδοι που παρζχονται είναι πάρα πολλζσ, για μία αναλυτικι παρουςίαςθ αυτϊν, παραπζμπουμε τον αναγνϊςτθ ςτθν βιβλιογραφία Υπόλοιπα εργαλεία Το XNA παρζχει μία πλθκϊρα επιπλζον βιβλιοκθκϊν πζρα από τισ παραπάνω. Ραρζχει μθχανιςμό για τθν διαχείριςθ τθσ ειςόδου από τον χριςτθ, είτε αυτι προζρχεται από το ποντίκι, το πλθκτρολόγιο ι από ζνα ζωσ τζςςερα χειριςτιρια του Xbox 360. Ο προγραμματιςτισ μπορεί να εφαρμόηει ανάδραςθ ςτα χειριςτιρια ανάλογα με τισ κινιςεισ του παίχτθ ςτθν εφαρμογι. Ραρζχεται επίςθσ εργαλείο για τθν δθμιουργία εφζ ιχου και ςτθν ςυνζχεια τθν ενςωμάτωςι τουσ ςτο XNA. Ο ιχοσ που υποςτθρίηεται επιταχφνεται από τισ ςφγχρονεσ κάρτεσ γραφικϊν κι είναι επίςθσ τριςδιάςτατοσ και πολυκάναλοσ. Το XNA υποςτθρίηει XML αρχεία παραμετροποίθςθσ, με τα οποία ο προγραμματιςτισ μπορεί να δθμιουργεί όμορφα μενοφ μζςα ςτισ πολυμεςικζσ εφαρμογζσ του, ενϊ παρζχεται μθχανιςμόσ για τθν αποκικευςθ κι ανάκτθςθ δεδομζνων ϊςτε να αποκθκεφεται θ κατάςταςθ του χριςτθ όταν αυτόσ εξζρχεται και ειςζρχεται ςτθν εφαρμογι. Επιπλζον, υποςτθρίηει πολλαπλοφσ παίκτεσ ι χριςτεσ με χριςθ δικτφου ι διαδικτφου και παρζχει τισ κατάλλθλεσ βιβλιοκικεσ. Το XNA είναι ζνα πολφ δυνατό περιβάλλον ανάπτυξθσ με μία ςυνεχϊσ αυξανόμενθ κοινότθτα κι ζναν ευφυι μθχανιςμό ενςωμάτωςθσ ςε αυτό επεκτάςεων κι αρκρωμάτων (plugins). Ιδθ θ κοινότθτα του XNA ζχει δθμιουργιςει αρκετζσ ενδιαφζρουςεσ επεκτάςεισ που διευκολφνουν τθν ανάπτυξθ των εφαρμογϊν. Επιπλζον, παρζχεται πολφ καλι τεκμθρίωςθ ςτο διαδίκτυο για τον τρόπο λειτουργίασ του. Το XNA μπορεί να ςυνδυαςτεί με άλλα εργαλεία που δίνει θ Microsoft για τον ζλεγχο και ςτθν ςυνζχεια τθν βελτιςτοποίθςθ τθσ απόδοςθσ των προγραμμάτων που δθμιουργοφμε. Ζνα τζτοιο είναι το PIX με το οποίο ο προγραμματιςτισ μπορεί να εντοπίςει ςχετικά εφκολα προβλθματικά κομμάτια κϊδικα ζτςι ϊςτε να τα βελτιϊςει. Το PIX παρζχει μετρθτζσ υψθλισ ακριβείασ, τθν δυνατότθτα επιςκόπθςθσ των μοντζλων, των υφϊν κι όλων των δεδομζνων που χρθςιμοποιεί θ εφαρμογι κακϊσ και τον χρόνο φόρτωςθσ και μεταφοράσ αυτϊν από και προσ τθν κάρτα γραφικϊν. Τζλοσ, προτείνεται ςτον προγραμματιςτι να κατεβάςει τθν τελευταία ζκδοςθ του DirectX SDK (Software Development Kit) που περιζχει πολλά παραδείγματα ςκιάςεων και τεχνικϊν που χρθςιμοποιοφνται κατά τθν ςχεδίαςθ γραφικϊν. Επιπλζον, το SDK περιζχει πολλά εργαλεία για τθν διαχείριςθ και τθν επεξεργαςία των διαφόρων τφπων μοντζλων και υφϊν και τθν τελευταία ζκδοςθ του HLSL μεταγλωττιςτι. 59

Κεφϊλαιο 3 ο Παρουςύαςη υλοποιόςεων Στα πλαίςια αυτισ τθσ εργαςίασ υλοποιιςαμε ςκιάςεισ και μελετιςαμε μεκόδουσ βελτιςτοποίθςθσ αυτϊν. Οι ςκιάςεισ που υλοποιικθκαν είναι οι: Normal Mapping, Soft Shadow Mapping, Procedural Sky, Blooming, Depth of Field. Χρθςιμοποιοφμε τουσ αγγλικοφσ όρουσ για τθν περιγραφι των ςκιάςεων, γιατί δεν υπάρχουν αντίςτοιχοι ςτθν Ελλθνικι ορολογία κι είναι εφκολο κάποιοσ να βρει επιπλζον πλθροφορίεσ για τισ τεχνικζσ αυτζσ χρθςιμοποιϊντασ τθν Αγγλικι. Σκοπόσ τθσ εργαςίασ δεν είναι μόνο θ δθμιουργία των ςκιάςεων αλλά θ δθμιουργία ενόσ ενιαίου προγραμματιςτικοφ περιβάλλοντοσ (Framework) το οποίο κα ενςωματϊνει όλεσ τισ ςκιάςεισ με αποδοτικό τρόπο και κα επιτρζπει τθν εφκολθ επζκταςι του. Με άλλα λόγια, όλεσ οι υλοποιιςεισ ενςωματϊκθκαν ςε μία εφαρμογι, θ οποία επιτρζπει τθν ενεργοποίθςθ ι τθν απενεργοποίθςθ αυτϊν, ζτςι ϊςτε να γίνεται εμφανισ θ επίδραςθ που ζχει κάκε ςκίαςθ ςτο τελικό αποτζλεςμα. Βαςικϋσ ϋννοιεσ Για τθν καλφτερθ κατανόθςθ τθσ υλοποίθςθσ κα γίνει μία πιο αφαιρετικι περιγραφι τθσ αρχικά. Θ εφαρμογι αποτελείται από τα εξισ ςυςτατικά μζρθ: 1. Τθν δθμιουργία ενόσ παρακφρου για τθν ςχεδίαςθ γραφικϊν 2. Τθν διαχείριςθ των μοντζλων και των υφϊν ςτθν μνιμθ 3. Τθν διαχείριςθ τθσ ειςόδου από τον χριςτθ (User Interaction) 4. Τθν διαχείριςθ τθσ κάμερασ του παρατθρθτι 5. Τθν διαχείριςθ του φωτιςμοφ και των χαρακτθριςτικϊν του Για το 1, δθμιουργοφμε ζνα παράκυρο με χριςθ των μεκόδων του XNA ςε ςυνδυαςμό με το παρακυρικό περιβάλλον. Το παράκυρο που δθμιουργείται ζχει διαςτάςεισ που ορίηονται ςε ζνα XML αρχείο είτε από τον προγραμματιςτι είτε από τον χριςτθ. Θ εφαρμογι επιτρζπει τθν μελλοντικι δθμιουργία μενοφ επιλογϊν για τθν επιλογι τθσ ανάλυςθσ. Επιπλζον, επιλζγεται αν το παράκυρο κα καλφπτει όλθ τθν οκόνθ (full screen) ι κα καλφπτει μζροσ αυτισ. Ορίηεται το πλικοσ των χρωμάτων τθσ οκόνθσ, ενϊ δεν γίνεται χριςθ multisampling buffer γιατί ζχει μεγάλθ επίπτωςθ ςτισ επιδόςεισ (αλλά κάτι τζτοιο υποςτθρίηεται). Για το 2, φορτϊνουμε ςτθν μνιμθ με χριςθ των ενςωματωμζνων μθχανιςμϊν του ΧΝΑ τα μοντζλα και τισ υφζσ. Για τθν εφαρμογι τθσ τεχνικισ του Normal Mapping ςτα μοντζλα επιλζγουμε να δθμιουργοφμε και το Tangent Frame (δθλαδι τθν παραγωγι του κάκετου διανφςματοσ, τθσ εφαπτομζνθσ και τθσ ςυνεφαπτομζνθσ κάκε ςθμείου). Επιπλζον, ςτισ υφζσ επιλζγουμε να δθμιουργοφνται mip-maps για καλφτερθ ποιότθτα κατά τθν εφαρμογι υφισ. 60

Για το 3, χρθςιμοποιοφμε το interface που παρζχει το XNA προσ το πλθκτρολόγιο και το ποντίκι και ςφμφωνα με τθν είςοδο που ζχουμε περιςτρζφουμε ι μετακινοφμε ανάλογα τον τριςδιάςτατο εικονικό κόςμο. Το 4 ςχετίηεται άμεςα με το 3, αφοφ με βάςθ τα διανφςματα ειςόδου που δθμιουργοφμε διαβάηοντασ τθν είςοδο από το πλθκτρολόγιο και τισ γωνίεσ περιςτροφισ που υπολογίηουμε με βάςθ τθν μετακίνθςθ του ποντικιοφ δθμιουργοφμε τον πίνακα παρατθρθτι με τον οποίο μεταςχθματίηουμε τον τριςδιάςτατο κόςμο. Το 5, είναι ουςιαςτικά θ διαχείριςθ των ςκιάςεων και πωσ εφαρμόηονται επάνω ςτα αντικείμενα του τριςδιάςτατου κόςμου. Κάκε αντικείμενο ζχει διαφορετικζσ φυςικζσ ιδιότθτεσ (μάρμαρο, πλαςτικό, γυαλί κτλ) και κατά ςυνζπεια τισ δικζσ του παραμζτρουσ για τθν εφαρμογι τθσ ςκίαςθσ. Υπάρχουν όμωσ ςκιάςεισ που εφαρμόηονται αφοφ ζχει ςχεδιαςτεί θ τριςδιάςτατθ ςκθνι και αλλάηουν το αποτζλεςμα όλθσ τθσ εικόνασ αφοφ ζχει απεικονιςτεί ςε εικονοςτοιχεία, όπωσ κα μποροφςε κάποιοσ να επεξεργαςτεί μία ψθφιακι εικόνα με ζνα πρόγραμμα επεξεργαςίασ εικόνασ (π.χ. Photoshop). Τα βαςικά βιματα κατά τθν ςχεδίαςθ των γραφικϊν ςτθν ςυγκεκριμζνθ υλοποίθςθ είναι τα παρακάτω: 1. Κακαριςμόσ οκόνθσ και βοθκθτικϊν μνθμϊν 2. Μετακίνθςθ αντικειμζνων του εικονικοφ κόςμου 3. Μετακίνθςθ όλου του τριςδιάςτατου κόςμου με βάςθ τθν είςοδο του χριςτθ. Αν ο χριςτθσ πατιςει Esc τότε βγεσ από τθν εφαρμογι 4. Ανανζωςθ των παραμζτρων των ςκιάςεων κι εφαρμογι ςκιάςεων ςε κάκε αντικείμενο 5. Σχεδίαςθ εικόνασ 6. Εφαρμογι ςκιάςεων επί τθσ εικόνασ Ραρατθροφμε δθλαδι, ότι θ εφαρμογι μασ περιλαμβάνει μόνο τθν διαχείριςθ του οπτικοφ αποτελζςματοσ και τθν αλλθλεπίδραςθ με τον χριςτθ αλλά όχι τθν διαχείριςθ τθσ φυςικισ (ςυγκροφςεισ μεταξφ αντικειμζνων), το animation και τθν τεχνθτι νοθμοςφνθ (AI) που ςυναντά κανείσ ςε τριςδιάςτατα παιχνίδια ι ακόμα τθν διαχείριςθ και τθν υποςτιριξθ πολλϊν παικτϊν μζςω διαδικτφου. Περϊςματα (Passes) & Deferred Shading Είναι ςθμαντικό να ορίςουμε τι είναι ζνα πζραςμα ςτθν γλϊςςα των GPUs. Πταν εφαρμόηουμε κάποια ςκίαςθ ςε γεωμετρία τότε κάνουμε υπολογιςμοφσ είτε για να τθν μεταςχθματίςουμε είτε για να υπολογίςουμε τον φωτιςμό ςε αυτι. Το αποτζλεςμα προκφπτει μετά από αρκετζσ πράξεισ, ανάλογα με τθν πολυπλοκότθτα του αλγόρικμου φωτιςμοφ. Αν ςε επόμενο ςτάδιο τθσ ςχεδίαςθσ ο 61

προγραμματιςτισ απαιτεί το αποτζλεςμα τθσ ςκίαςθσ, είτε πρζπει να το υπολογίςει ξανά, είτε να το προςκομίςει από τθν μνιμθ. Στθν δεφτερθ περίπτωςθ απαιτείται από τον προγραμματιςτι να ζχει αποκθκεφςει ρθτά το αποτζλεςμα τθσ ςκίαςθσ. Ζτςι λοιπόν, μποροφμε να ορίςουμε τθν ζννοια του περάςματοσ (pass) το οποίο αναφζρεται ςε αυτι τθν διαδικαςία που μόλισ περιγράψαμε. Δθλαδι, το αποτζλεςμα ενόσ υπολογιςμοφ αποκθκεφεται και χρθςιμοποιείται ςε επόμενθ ςχεδίαςθ (επόμενο πζραςμα). Αν για παράδειγμα επικυμοφμε να εφαρμόςουμε ζνα φίλτρο πάνω ςε μία εικόνα που παράγουμε με τριςδιάςτατα γραφικά, κα πρζπει να αποκθκεφςουμε τθν εικόνα (πρϊτο πζραςμα) και ςτθν ςυνζχεια να τροφοδοτιςουμε το αποτζλεςμα αυτό ςτο πρόγραμμα τθσ GPU που κα εφαρμόςει το φίλτρο (δεφτερο πζραςμα). Θ παραπάνω διαδικαςία δεν μπορεί να γίνει ςε ζνα πζραςμα γιατί όταν επεξεργαηόμαςτε ζνα pixel δεν υπάρχει δυνατότθτα να προςπελαφνουμε γειτονικά του pixel ι γενικά pixels που αποτελοφν μζροσ τθσ ίδιασ εικόνασ που ςχεδιάηουμε εκείνθ τθν ςτιγμι. Στθν δικι μασ υλοποίθςθ, επειδι παρουςιαηόταν ζντονα θ ανάγκθ για επαναχρθςιμοποίθςθ πλθροφορίασ κι επειδι το υπολογιςτικό τθσ κόςτοσ ιταν μεγάλο, ζπρεπε να επιλζξουμε ζνα ευζλικτο κι αποδοτικό μοντζλο. Ευζλικτο με τθν ζννοια τθσ ςυντιρθςθσ κι επζκταςθσ του κϊδικα κι αποδοτικό με τθν ζννοια ότι δεν κα ζπρεπε να ζχει χειρότερθ απόδοςθ από κάποια άλλθ προςζγγιςθ. Θ τεχνικι που επιλζχκθκε ονομάηεται Deferred Shading [17] και διαχωρίηει το ςτάδιο επεξεργαςίασ τθσ γεωμετρίασ από τον φωτιςμό. Θ τεχνικι αυτι, απαιτεί τθν αποκικευςθ περιςςότερων από 4 τιμϊν ςε ζνα πζραςμα (που είναι και το μζγιςτο που μπορεί να αποκθκευτεί ςε 1 βοθκθτικι μνιμθ (επιφάνεια για ςυντομία) του framebuffer), οπότε αυτό οδθγεί ςτθν χριςθ πολλαπλϊν επιφανειϊν ςχεδίαςθσ (MRT Multiple Render Targets). Το MRT είναι ζνα χαρακτθριςτικό που ενςωματϊκθκε ςτο DirectΧ 9 κι επιτρζπει ςε μία GPU να μθν αποκθκεφει 4 τιμζσ ςε μία επιφάνεια ςε ζνα πζραςμα αλλά μζχρι 16 ςε 4 διαφορετικζσ επιφάνειεσ του frame buffer. Το DirectX 9 API επιτρζπει ςτον προγραμματιςτι να γράφει ςε 1-4 επιφάνειεσ αλλά απαιτεί το ςφνολο των bits των επιφανειϊν να είναι το ίδιο. Αυτό ςθμαίνει πωσ θ πρϊτθ επιφάνεια μπορεί να ζχει RGBA format = 4*8bits = 32bits, θ δεφτερθ επιφάνεια 16bit RG format = 2 * 16Bit = 32bits και θ τρίτθ 32bit R format = 1*32bit = 32bit. Το προθγοφμενο είναι απλά ζνα παράδειγμα με τρεισ επιφάνειεσ και παρουςιάηεται για να γίνει κατανοθτόσ ο περιοριςμόσ ωσ προσ τα bits, δεν είναι ο μοναδικόσ ςυνδυαςμόσ ςυμβατϊν formats. Από τθν άλλθ μία GPU που υποςτθρίηει το DirectX10 δεν ζχει αυτό τον περιοριςμό και μπορεί να γίνει χριςθ του νζου χαρακτθριςτικοφ από το XNA, αλλά χάνεται θ ςυμβατότθτα με παλαιότερεσ GPUs. Γι αυτό επιλζξαμε τθν πρϊτθ λφςθ. Στθν δικι μασ υλοποίθςθ ςτο πρϊτο πζραςμα απαιτοφμε να αποκθκεφςουμε ςε 3 επιφάνειεσ. Θ μία επιφάνεια ζχει 32bit floating point format και οι άλλεσ δφο από 62

32 bit RGBA. Θ πρϊτθ επιφάνεια αποκθκεφει τθν απόςταςθ κάκε pixel από τον παρατθρθτι, θ δεφτερθ επιφάνεια αποκθκεφει το κάκετο διάνυςμα κάκε ςθμείου μαηί με ςυνιςτϊςεσ φωτόσ και θ τρίτθ επιφάνεια αποκθκεφει τισ υφζσ που εφαρμόηονται ςτα pixels τθσ εικόνασ μαηί με κάποιο παράγοντα ςκιάσ που κα αναλυκεί παρακάτω. Γενικά, θ χριςθ του Deferred Shading ενϊ πριν 2-3 χρόνια ιταν προβλθματικι λόγω των αυξθμζνων απαιτιςεων ςε διαμεταγωγι μνιμθσ, ςιμερα είναι μία πολλά υποςχόμενθ τεχνικι με υψθλι απόδοςθ, εκτεταμζνθ υποςτιριξθ από τισ τελευταίεσ GPUs θ οποία ζχει τα παρακάτω μειονεκτιματα: Μεγάλεσ απαιτιςεισ ςε διαμεταγωγι μνιμθσ Δεν υποςτθρίηει εγγενι εξομάλυνςθ γωνιϊν Δεν υποςτθρίηει ανάμειξθ χρωμάτων με χριςθ του παράγοντα Alpha Από τθν άλλθ τα πλεονεκτιματά τθσ είναι: Θ ςκίαςθ τθσ τριςδιάςτατθσ ςκθνισ είναι ανεξάρτθτθ τθσ πολυπλοκότθτάσ τθσ κι εξαρτάται μόνον από τθν ανάλυςθ του παρακφρου που ςχεδιάηουμε Τα προγράμματα ςκίαςθσ που εκτελοφνται ςτθν GPU ζχουν πρόςβαςθ ςτο βάκοσ κάκε pixel και ςε άλλεσ πλθροφορίεσ που ςχετίηονται με αυτά Κάκε pixel φωτίηεται μόνο μία φορά ανά φωτεινι πθγι. Αυτό ςθμαίνει πωσ δεν υπολογίηουμε τον φωτιςμό ςε αντικείμενα τα οποία ςτθν ςυνζχεια καλφπτονται από άλλα Ξεκάκαροσ διαχωριςμόσ του κϊδικα που εκτελείται ςτθν GPU. Άλλοσ κϊδικασ διαχειρίηεται το υλικό κάκε αντικειμζνου τθσ ςκθνισ κι άλλοσ τον φωτιςμό τθσ Μοντϋλο φωτιςμού Ζχουν αναπτυχκεί πολλά μοντζλα για τθν προςομοίωςθ του φωτιςμοφ. Πλα είναι προςεγγιςτικά, αφοφ θ εξίςωςθ αλλθλεπίδραςθσ του φωτόσ με τισ επιφάνειεσ τθσ γεωμετρίασ περιλαμβάνει τον υπολογιςμό άγνωςτων ολοκλθρωμάτων. Το μοντζλο πάνω ςτο οποίο ςτθρίχκθκε θ διπλωματικι είναι το μοντζλο φωτιςμοφ που πρότεινε ο Phong [7], [18]. Ο φωτιςμόσ ςε αυτό το μοντζλο αποτελείται από το άθροιςμα τριϊν ςυνιςτωςϊν: τθν ςυνιςτϊςα περιβάλλοντοσ (ambient), τθν ςυνιςτϊςα διάχυςθσ (diffuse) και τθν ςυνιςτϊςα ανάκλαςθσ (specular). Θ ςυνιςτϊςα περιβάλλοντοσ αναφζρεται ςτθν ζνταςθ του φωτόσ που εκπζμπουν τα αντικείμενα όταν δεν φωτίηονται άμεςα. Αυτόσ ο παράγοντασ αντιςτοιχεί ςτον φωτιςμό των αντικειμζνων μία ςυννεφιαςμζνθ θμζρα. Δθλαδι, ενϊ δεν υπάρχει μία ςυγκεκριμζνθ πθγι φωτόσ, υπάρχει φωσ που διαχζεται ςτο περιβάλλον χωρίσ μία ςυγκεκριμζνθ κατεφκυνςθ. 63

Θ ςυνιςτϊςα διάχυςθσ περιγράφει τθν αλλθλεπίδραςθ του φωτόσ που προζρχεται από μία ςυγκεκριμζνθ πθγι φωτόσ με τθν επιφάνεια του αντικειμζνου. Θ ςυνιςτϊςα ανάκλαςθσ ςχετίηεται με εκείνα τα ςθμεία τθσ επιφάνειασ που ο φωτιςμόσ είναι πολφ ζντονοσ, με άλλα λόγια, με τα ςθμεία εκείνα τθσ επιφάνειασ ςτα οποία το φωσ ανακλάται ςχεδόν πλιρωσ. Για να γίνουν κατανοθτά τα παραπάνω κα παρουςιαςτεί ζνα παράδειγμα και ςτθν ςυνζχεια κα περιγραφεί μακθματικά κάκε μία από τισ τρεισ ςυνιςτϊςεσ φωτόσ. Στθν Εικόνα 22, παρουςιάηεται ζνα παράδειγμα φωτιςμοφ μία κόκκινθσ μπάλασ του μπιλιάρδο. Εικόνα 22: Οι 3 ςυνιςτϊςεσ φωτιςμοφ του μοντζλου φωτιςμοφ Phong. a) υνιςτϊςα περιβάλλοντοσ b) υνιςτϊςα διάχυςθσ c) υνιςτϊςα ανάκλαςθσ d) Σελικό αποτζλεςμα = άκροιςμα των τριϊν ςυνιςτωςϊν. Θ ςυνιςτϊςα a ςτθν Εικόνα 22, είναι ςτακερι. Στον πραγματικό κόςμο αυτι θ ςυνιςτϊςα δεν είναι ςτακερι, ο υπολογιςμόσ τθσ όμωσ απαιτεί μεγάλθ υπολογιςτικι ιςχφ. Σιμερα, οι GPUs ζχουν τθν υπολογιςτικι ιςχφ για ζναν, προςεγγιςτικά πάντα, υπολογιςμό αυτισ τθσ ςυνιςτϊςασ. 64

Θ ανάλυςθ τθσ ςυνιςτϊςασ διάχυςθσ και ανάκλαςθσ κα γίνει με βάςθ τθν Εικόνα 23. Πλα τα διανφςματα που παρουςιάηονται ςτθν εικόνα αυτι είναι μοναδιαία. Θ ςυνιςτϊςα διάχυςθσ υπολογίηεται ςε κάκε ςθμείο τθσ γεωμετρίασ με βάςθ το κάκετο διάνυςμα και το διάνυςμα τθσ πθγισ φωτόσ. Το εςωτερικό γινόμενο αυτϊν των διανυςμάτων μασ δίνει το ςυνθμίτονο τθσ μεταξφ τουσ γωνίασ και παίρνει τιμζσ ςτο *-1,1]. Αν, λοιπόν, το κάκετο διάνυςμα ςε ζνα ςθμείο τθσ επιφάνειασ και το διάνυςμα τθσ πθγισ είναι ςυνευκειακά τότε θ μεταξφ τουσ γωνία είναι 0 μοίρεσ κι επομζνωσ το ςυνθμίτονο ίςο με 1. Αυτό ςθμαίνει ότι θ ςυνιςτϊςα ςε αυτό το ςθμείο παίρνει τθν μζγιςτθ τιμι. Εικόνα 23: Σα απαραίτθτα διανφςματα για τον υπολογιςμό του Phong μοντζλου φωτιςμοφ Από τθν άλλθ αν θ γωνία είναι 180 μοίρεσ τότε το ςυνθμίτονο είναι -1. Επειδι δεν ορίηεται αρνθτικι τιμι χρϊματοσ, περιορίηουμε τισ αρνθτικζσ τιμζσ των ςυνθμίτονων ςτο 0 κι επομζνωσ όλεσ οι γωνίεσ μεγαλφτερεσ των 90 μοιρϊν ςθμαίνουν 0 ςτθν ςυνιςτϊςα διάχυςθσ. Θ ςυνιςτϊςα ανάκλαςθσ υπολογίηεται με περιςςότερεσ πράξεισ. Συγκεκριμζνα υπολογίηουμε το διάνυςμα ανάκλαςθσ, το οποίο είναι ςυμμετρικό ςτο διάνυςμα τθσ πθγισ του φωτόσ ωσ προσ το κάκετο διάνυςμα τθσ επιφάνειασ ςε κάκε ςθμείο. 65

Μετά υπολογίηουμε το εςωτερικό γινόμενο ανάμεςα ςτο διάνυςμα ανάκλαςθσ και το διάνυςμα παρατθρθτι. Στθν ςυνζχεια υψϊνουμε το αποτζλεςμα τθσ πράξθσ ςε μία μεγάλθ δφναμθ, ςυνικωσ 32. Επειδι θ τιμι που επιςτρζφει το εςωτερικό γινόμενο ανικει ςτο *0,1+ (με τον περιοριςμό ότι κρατάμε μόνο κετικζσ τιμζσ χρϊματοσ), αυτό ςθμαίνει πωσ θ φψωςθ ςε δφναμθ περιορίηει ςθμαντικά το εφροσ αυτισ τθσ ςυνιςτϊςασ επάνω ςτθν επιφάνεια του αντικειμζνου και φαίνονται τιμζσ που πριν τθν φψωςθ ςτθν δφναμθ ιταν πολφ κοντά ςτο 1 (βλζπετε και το c ςτθν Εικόνα 22). Στθν ςυνζχεια πολλαπλαςιάηουμε κάκε ςυνιςτϊςα με τθν τιμι χρϊματοσ που τθσ ζχουμε αποδϊςει. Αυτό ςθμαίνει ότι το φωσ περιβάλλοντοσ μπορεί να είναι κοκκινωπό αν ςχεδιάηουμε ζνα αντικείμενο κάτω από τον ιλιο που δφει. Από τθν άλλθ θ ςυνιςτϊςα διάχυςθσ ζχει ςυνικωσ το χρϊμα που εκπζμπει ζνα αντικείμενο ανάλογα με το υλικό που κζλουμε να μοντελοποιιςουμε (μάρμαρο, ξφλο κτλ) και τζλοσ θ ςυνιςτϊςα ανάκλαςθσ ζχει το ίδιο χρϊμα με το χρϊμα που εκπζμπει θ πθγι του φωτόσ. Τζλοσ, προςκζτουμε όλεσ τισ τιμζσ χρϊματοσ μαηί και παίρνουμε ζνα αποτζλεςμα ςαν αυτό που φαίνεται ςτο d τθσ Εικόνα 22. Η κϊμερα Θ εφαρμογι υποςτθρίηει ζναν παρατθρθτι ο οποίοσ βλζπει τον τριςδιάςτατο κόςμο μζςα από μία κάμερα. Θ κάμερα αυτι μπορεί να πετά ςε οποιοδιποτε ςθμείο του τριςδιάςτατου κόςμου και δεν μπορεί να κάνει κφκλουσ γφρω από τον άξονα X. Μπορεί να κινείται 90 μοίρεσ προσ τα επάνω και 90 μοίρεσ προσ τα κάτω. Στον Y άξονα δεν υπάρχει περιοριςμόσ. Ο χριςτθσ μπορεί να κακορίςει χαρακτθριςτικά τθσ κάμερασ, όπωσ το που είναι τοποκετθμζνθ ςτον τριςδιάςτατο κόςμο όταν ξεκινά θ εφαρμογι και το εφροσ κζαςθσ ςε μοίρεσ. Σε κάκε ςχεδίαςθ ενόσ καρζ θ κάμερα τοποκετείται και περιςτρζφεται ανάλογα με τθν είςοδο του χριςτθ. Συγκεκριμζνα, ο χριςτθσ πατϊντασ τα πλικτρα W, S, A, D τθν μετακινεί αντίςτοιχα εμπρόσ, πίςω, αριςτερά και δεξιά. Συνδυαςμόσ των παραπάνω πλικτρων μετακινεί αντίςτοιχα τθν κάμερα διαγϊνια μπροςτά και διαγϊνια προσ τα πίςω. Σε κάκε περίπτωςθ το άκροιςμα των κατευκφνςεων που δίδει ο χριςτθσ μζςω των πλικτρων, κανονικοποιείται και προςτίκεται ςτο ςθμείο που βριςκόταν θ κάμερα ςτο αμζςωσ προθγοφμενο καρζ για να υπολογίςουμε τθν νζα κζςθ. Θ κάμερα ορίηεται μακθματικά ωσ εξισ: όταν ξεκινά θ εφαρμογι ορίηουμε το άνω διάνυςμα που περιγράφει ποια είναι θ πάνω κατεφκυνςθ τθσ κάμερασ. Συνικωσ αυτό είναι το (0,1,0). Στθν ςυνζχεια, αφοφ ζχουμε ορίςει το που κοιτάει θ κάμερα και το ςθμείο που βρίςκεται όταν ξεκινά θ εφαρμογι, υπολογίηουμε το εμπρόσ διάνυςμα και με εξωτερικό γινόμενο του εμπρόσ με το πάνω διάνυςμα (τα οποία πρζπει να είναι μθ ςυνευκειακά) ορίηουμε το δεξιά διάνυςμα. Τα τρία διανφςματα αυτά (πάνω, δεξιά, εμπρόσ) αποτελοφν μία ορκοκανονικι βάςθ, αφοφ τα 66

αποκθκεφουμε πάντα κανονικοποιθμζνα και μασ δίνουν τισ κατευκφνςεισ προσ τισ οποίεσ κινείται θ κάμερα ανάλογα με τθν είςοδο. Ο χριςτθσ μετακινϊντασ το ποντίκι ορίηει τθν γωνία περιςτροφισ τθσ κάμερασ, γφρω από τον Χ ι τον Υ άξονα. Συγκεκριμζνα, όταν ξεκινά θ εφαρμογι και ςε κάκε επαναςχεδίαςθ τθσ εικόνασ, ο δείκτθσ του ποντικιοφ τοποκετείται ςτο μζςο του παρακφρου. Ο χριςτθσ κουνϊντασ το ποντίκι ςτουσ X, Y άξονεσ ορίηει τισ γωνίεσ περιςτροφισ ωσ προσ τουσ Y, X άξονεσ αντίςτοιχα. Αυτό γίνεται υπολογίηοντασ κάκε φορά το διάνυςμα μετακίνθςθσ του δείκτθ από το κζντρο του παρακφρου. Με βάςθ αυτζσ τισ γωνίεσ μεταςχθματίηεται θ ορκοκανονικι βάςθ που ορίηει τον μεταςχθματιςμό του παρατθρθτι (άνω αριςτερά 3x3 μζροσ του πίνακα παρατθρθτι). Θ κλάςθ τθσ κάμερασ δεν επιτρζπει τθν δθμιουργία περιςςοτζρων του ενόσ αντικειμζνων, ακριβϊσ επειδι θ κάμερα είναι μοναδικι και ελζγχεται από ζνα μόνο πλθκτρολόγιο και ποντίκι και παρζχει όλεσ τισ απαραίτθτεσ πλθροφορίεσ ςτισ άλλεσ οντότθτεσ τθσ εφαρμογισ, όπωσ είναι θ κζςθ τθσ και ο πίνακασ παρατθρθτι και προβολισ που χρειάηονται για τθν ςχεδίαςθ όλων των αντικειμζνων και τθν εφαρμογι των φωτιςμϊν από τθν GPU. Normal Mapping Θ τεχνικι του Normal Mapping παρουςιάςτθκε το 1978 από τον Blinn [19]. Σκοπόσ τθσ είναι να προςομοιϊςει με λεπτομζρεια τθν επιφάνεια ενόσ αντικειμζνου τροποποιϊντασ τον φωτιςμό τθσ, χωρίσ να απαιτεί επιπλζον γεωμετρία για τθν αφξθςθ τθσ ποιότθτασ ςτο τελικό αποτζλεςμα. Ζνα παράδειγμα εφαρμογισ τθσ τεχνικισ αυτισ είναι θ Εικόνα 24. Εικόνα 24: Παράδειγμα εφαρμογισ Normal Mapping. a) Γεωμετρία b) Εφαρμογι υφισ και φωτιςμοφ c) Εφαρμογι Normal Mapping και φωτιςμοφ. Το a τθσ Εικόνα 24, δείχνει τθν γεωμετρία πάνω ςτθν οποία εφαρμόηεται θ υφι και ο φωτιςμόσ (b). Το c δείχνει ακριβϊσ τθν ίδια γεωμετρία φωτιςμζνθ με τθν χριςθ Normal Mapping. Είναι προφανζσ πωσ αυτι θ τεχνικι αυξάνει τθν αλθκοφάνεια αλλά ζχει κόςτοσ ςε υπολογιςμοφσ. Επιπλζον, είναι εμφανισ θ ζλλειψθ τθσ 67

γεωμετρικισ πλθροφορίασ ςτισ επιφάνειεσ που ζχουν μεγάλθ κλίςθ ωσ προσ το επίπεδο του παρατθρθτι. Το πρόβλθμα αυτό επιςθμαίνεται ςτθν Εικόνα 25. Εικόνα 25: Σο μειονζκτθμα τθσ Normal Mapping τεχνικισ είναι πωσ γίνεται αντιλθπτι θ ζλλειψθ τθσ γεωμετρικισ πλθροφορίασ ςτισ περιοχζσ με μεγάλθ κλίςθ ωσ προσ το επίπεδο του παρατθρθτι (περιοχι ανάμεςα ςτον μωβ και κόκκινο δακτφλιο). Θ Normal Mapping τεχνικι απαιτεί θ γεωμετρία να φζρει πλθροφορίεσ για τα κάκετα διανφςματα (Normals), τθν εφαπτομζνθ (Tangent) και τθν ςυνεφαπτομζνθ (Binormal) ςε κάκε ςθμείο κι επιπλζον απαιτεί 2 υφζσ. Μία θ οποία αποκθκεφει το χρϊμα του υλικοφ που κα εφαρμόςουμε ςτθν γεωμετρία κι άλλθ μία που αποκθκεφει τα διανφςματα με βάςθ τα οποία κα γίνει ο υπολογιςμόσ του φωτιςμοφ. Οι υφζσ που χρθςιμοποιικθκαν για ςτο παράδειγμα τθσ Εικόνα 25, φαίνονται ςτθν Εικόνα 26. O υπολογιςμόσ του φωτιςμοφ εκτελείται ανά pixel ςτουσ Pixel Processors τθσ GPU. Το πρόγραμμα που εκτελείται ςτουσ Vertex Processors μεταςχθματίηει τα τρία διανφςματα (κάκετο, εφαπτομζνθ, ςυνεφαπτομζνθ) ςτον χϊρο του παρατθρθτι και ςτθν ςυνζχεια δθμιουργεί ζναν πίνακα 3x3, ο οποίοσ ςε κάκε γραμμι του ζχει κάκε ζνα από τα μεταςχθματιςμζνα διανφςματα. Στθν ςυνζχεια μεταςχθματίηει τα διανφςματα του παρατθρθτι και του φωτόσ ςτον χϊρο εφαπτομζνθσ (tangent space) κάκε ςθμείου πολλαπλαςιάηοντάσ τα με τον 3x3 πίνακα που μόλισ δθμιουργιςαμε. Στθν ςυνζχεια τα μεταςχθματιςμζνα διανφςματα παρατθρθτι και φωτόσ προωκοφνται ςτουσ Pixel Processors οι οποίοι αφοφ τα κανονικοποιιςουν (μζτρο ίςο με 1), εφαρμόηουν το μοντζλο φωτιςμοφ Phong που περιγράψαμε αλλά ςαν κάκετο διάνυςμα χρθςιμοποιοφν τθν τιμι που προςπελαφνουν από τθν υφι 68

των κάκετων διανυςμάτων (b ςτθν Εικόνα 26). Αφοφ υπολογιςτεί θ ζνταςθ που ζχουν οι τρεισ ςυνιςτϊςεσ του Phong μοντζλου φωτιςμοφ, πολλαπλαςιάηεται θ ςυνιςτϊςα διάχυςθσ με τθν υφι χρϊματοσ (a ςτθν Εικόνα 26) και παράγεται το τελικό αποτζλεςμα. Εικόνα 26: Παράδειγμα υφϊν για τθν εφαρμογι του Normal Mapping. Να ςθμειωκεί θ υφι b ςτθν Εικόνα 26 αποκθκεφεται ςυνικωσ ςε RGB ι RGBA format. Οι τιμζσ που υποςτθρίηουν αυτά τα formats κυμαίνονται ςτο *0,1+. Πμωσ οι τιμζσ κάκε ςυνιςτϊςασ των κανονικοποιθμζνων διανυςμάτων που κζλουμε να αποκθκεφςουμε κυμαίνονται ςτο *-1,1+. Γι αυτό εφαρμόηουμε ζνα μεταςχθματιςμό που απεικονίηει τισ τιμζσ από το *0,1+ ςτο *-1,1] μετά τθν προςπζλαςθ και πριν χρθςιμοποιιςουμε αυτά τα διανφςματα για τον υπολογιςμό του φωτιςμοφ. Τζλοσ, να ςθμειωκεί πωσ θ παραπάνω διαδικαςία εφαρμόηεται για μία πθγι φωτόσ και πρζπει να τθν επαναλαμβάνουμε για κάκε επιπλζον πθγι και να προςκζτουμε τα ακροίςματά τουσ. Blooming & Depth of Field Οι τεχνικζσ που παρουςιάηονται ςτθν ςυνζχεια εφαρμόηονται ςτθν εικόνα που ζχει παραχκεί μετά τθν ςχεδίαςθ τθσ γεωμετρίασ. Δθλαδι, ενεργοφν ςτο ςφνολο τθσ εικόνασ κι είναι γνωςτζσ με τον όρο post processing effects, δθλαδι ςκιάςεισ που εφαρμόηονται αφοφ ολοκλθρωκεί θ ςχεδίαςθ όλθσ τθσ γεωμετρίασ τθσ ςκθνισ. Οι ςκιάςεισ Blooming και Depth of Field (Βάκοσ πεδίου), παρουςιάηουν ομοιότθτεσ και γι αυτό αναλφονται μαηί. Τα αποτελζςματα τθσ εφαρμογισ αυτϊν των ςκιάςεων φαίνονται ςτθν Εικόνα 27 και ςτθν Εικόνα 28. Αφοφ ζχει ςχεδιαςτεί θ ςκθνι (πάνω μζροσ τθσ Εικόνα 27), εφαρμόηουμε ζνα φίλτρο το οποίο απομονϊνει τισ περιοχζσ τθσ που ζχουν ζνταςθ χρϊματοσ πάνω από ζνα ςυγκεκριμζνο όριο. Στθν ςυνζχεια κολϊνουμε (blur) τισ περιοχζσ αυτζσ. Αυτό το πετυχαίνουμε κάνοντασ δειγματολθψία ςτα γειτονικά εικονοςτοιχεία και 69

ςτθν ςυνζχεια βγάηοντασ τον μζςο όρο του χρϊματοσ. Το αποτζλεςμα αυτισ τθσ διαδικαςίασ ςυνδυάηεται με τθν αρχικι εικόνα κι ζτςι ςχεδιάηουμε τθν εικόνα όπωσ φαίνεται ςτο κάτω μζροσ τθσ Εικόνα 27. Εικόνα 27: Επάνω ςχεδίαςθ χωρίσ bloom effect. Κάτω με χριςθ bloom effect. Ππωσ είναι εμφανζσ το αποτζλεςμα τθσ ςκίαςθσ Bloom είναι ότι περιοχζσ που ζχουν ζντονο φωτιςμό τονίηονται περιςςότερο και δθμιουργείται ζνα είδοσ καμπάδασ. Θ ςκίαςθ του βάκουσ πεδίου, που φαίνεται ςτθν Εικόνα 28, προςομοιϊνει το φαινόμενο που ςυμβαίνει όταν ο φακόσ τθσ κάμερασ εςτιάηει ςε μία ςυγκεκριμζνθ απόςταςθ. Πςο πιο μακριά από το ςθμείο εςτίαςθσ βρίςκεται ζνα αντικείμενο, τόςο πιο κολό φαίνεται. Για παράδειγμα ςτθν Εικόνα 28, επειδι θ κάμερα εςτιάηει ςτο πρόςωπο του Βοφδα, το πάνω μζροσ του αγάλματοσ και τα πόδια του που είναι εκτόσ εςτίαςθσ, ςχεδιάηονται κολά. Για τθν επίτευξθ αυτισ τθσ ςκίαςθσ ακολουκείται θ παρακάτω διαδικαςία. 70

Εικόνα 28: χεδίαςθ χωρίσ χριςθ του Depth of Field (Επάνω) και με χριςθ (Κάτω). Αφοφ ολοκλθρωκεί θ ςχεδίαςθ τθσ ςκθνισ (πάνω μζροσ τθσ Εικόνα 28), κολϊνουμε το αποτζλεςμα. Το κόλωμα που εφαρμόηουμε ςε αυτι τθν περίπτωςθ ζχει ζναν περιοριςμό. Δεν αναμιγνφουμε χρϊματα αν αυτά αντιςτοιχοφν ςε ςθμεία ςτο χϊρο τα οποία ζχουν απόςταςθ μεγαλφτερθ από ζνα ςυγκεκριμζνο όριο. Αν το κάναμε αυτό, τότε κα είχαμε διαρροι χρϊματοσ από αντικείμενα τα οποία ιταν εντόσ εςτίαςθσ ςε αντικείμενα που ιταν εκτόσ εςτίαςθσ ι μεταξφ αντικειμζνων τα οποία είναι μεν εκτόσ εςτίαςθσ αλλά ζχουν μεγάλθ απόςταςθ μεταξφ τουσ. Αυτό χαλάει το τελικό αποτζλεςμα μιασ και το φαινόμενο αυτό ςτον πραγματικό κόςμο εμφανίηει τα αντικείμενα κολά, αλλά δεν αναμιγνφονται τα περιγράμματά των αντικειμζνων. Για να ικανοποιιςουμε αυτόν τον περιοριςμό μποροφμε είτε να κάνουμε ζλεγχο ροισ για να εντοπίηουμε τθν απόςταςθ μεταξφ δφο pixel ςτθν εικόνα, με χριςθ του βάκουσ που αποκθκεφουμε με το deferred shading, είτε να εφαρμόηουμε ζνα είδοσ βάρουσ ςτα pixels και να ορίηουμε μεγάλο βάροσ ςε εικονοςτοιχεία που είναι κοντά ςε απόςταςθ ςε αυτό ςτο οποίο εφαρμόηουμε το κόλωμα και πολφ μικρό ςε αυτά 71

που είναι μακριά. Τα πειράματα μασ ζδωςαν αντίςτοιχα αποτελζςματα κι επιλζχκθκε ο ζλεγχοσ ροισ που κάνει τον κϊδικα πιο ξεκάκαρο. Στθν ςυνζχεια, κεωροφμε πωσ ο παρατθρθτισ εςτιάηει ςτθν απόςταςθ που αντιςτοιχεί ςτο κεντρικό pixel τθσ εικόνασ. Με βάςθ αυτι τθν απόςταςθ ςχεδιάηουμε τθν τελικι εικόνα: όςο πιο κοντά είναι ζνα pixel ςτθν απόςταςθ τθσ εςτίαςθσ τόςο μεγαλφτερο ποςοςτό τθσ μθ κολωμζνθσ εικόνασ επιλζγουμε. Πςο μεγαλφτερθ είναι αυτι θ απόςταςθ, επιλζγουμε μεγαλφτερο ποςοςτό από τθν κολωμζνθ εικόνα. Με μακθματικά αυτι θ ςχζςθ περιγράφεται: Τελικό χρώμα = 1 απόςταςη κεντρικού pixel απόςταςη τρέχοντοσ pixel μη θολωμένη εικόνα + ( απόςταςη κεντρικού pixel απόςταςη τρέχοντοσ pixel ) θολωμένη εικόνα Δυναμικόσ ουρανόσ Πλα τα ςφγχρονα παιχνίδια και οι αλλθλεπιδραςτικζσ εφαρμογζσ υποςτθρίηουν αυτό το χαρακτθριςτικό ςε μικρι ι μεγάλθ ζκταςθ. Ο όροσ δυναμικόσ ουρανόσ χρθςιμοποιείται για να περιγράψει τον ουρανό που μεταβάλλεται με το πζραςμα του χρόνου, είτε επειδι εμφανίηονται ι εξαφανίηονται ςφννεφα, είτε επειδι μετακινείται ο ιλιοσ. Οι παραπάνω παράμετροι ζχουν επίδραςθ ςτον φωτιςμό των αντικειμζνων του εικονικοφ κόςμου, είτε ωσ προσ τθν ζνταςθ του φωτόσ είτε ωσ προσ το χρϊμα. Με τον όρο ουρανό εννοοφμε αυτό που γνωρίηουμε από τον φυςικό μασ κόςμο. Ο ουρανόσ επειδι βρίςκεται πολφ μακριά από τα μάτια μασ, χάνει τθν τριςδιάςτατθ υπόςταςι του κι εμφανίηεται ςαν μία διςδιάςτατθ εικόνα κολλθμζνθ ςτον ουράνιο κόλο. Αυτι ακριβϊσ είναι θ προςζγγιςθ που χρθςιμοποιείται ςτισ εφαρμογζσ οι οποίεσ υποςτθρίηουν δυναμικό ουρανό. Στθν δικι μασ προςζγγιςθ ςχεδιάηουμε μία ςφαίρα θ οποία περιβάλλει τον εικονικό κόςμο και ςτο εςωτερικό τθσ οποίασ εφαρμόηουμε υφζσ. Οι υφζσ που εφαρμόηουμε υπολογίηονται δυναμικά ςαν μία ι περιςςότερεσ ςυναρτιςεισ με βάςθ κάποιεσ άλλεσ βοθκθτικζσ υφζσ ειςόδου (όπωσ υφζσ κορφβου). Θ ςφαίρα ςτθν οποία ςχεδιάηεται ο ουρανόσ μζνει πάντα ςτθν μζγιςτθ απόςταςθ από τον παρατθρθτι, με άλλα λόγια ο παρατθρθτισ δεν πλθςιάηει ποτζ ςε αυτι και κατά ςυνζπεια ςτον ουρανό. Για να επιτευχκεί αυτό, όταν μεταςχθματίηουμε τθν ςφαίρα για να περιβάλλει τον εικονικό κόςμο κζτουμε τθν z ίςθ με τθν w ςυνιςτϊςα κάκε ςθμείου τθσ γεωμετρίασ, κατά ςυνζπεια θ ςφαίρα ςχεδιάηεται πάντα ςτθν οκόνθ και ςε ςτακερι απόςταςθ, αφοφ θ διαίρεςθ προβολισ πάντα κα μασ δίνει 1. Στθν ςυνζχεια αφοφ τοποκετιςαμε τον ουράνιο κόλο ςτθν ςκθνι, πρζπει να δθμιουργιςουμε ςφννεφα και ιλιο, τα οποία μετακινοφνται κι αλλάηει αντίςτοιχα το χρϊμα και θ ζνταςθ του φωτόσ. Αυτι θ διαδικαςία εκτελείται ςτουσ Pixel Processors τθσ GPU. Τα ςφννεφα δθμιουργοφνται κάνοντασ προςπζλαςθ ςε μία 72

τριςδιάςτατθ υφι που περιζχει τιμζσ κορφβου των 8 bit κι ζχει διαςτάςεισ 128x128x128. Ο κόρυβοσ αυτόσ είναι ςυνεχισ ςε όλεσ τισ διαςτάςεισ του. Σε κάκε ςυγκεκριμζνθ χρονικι προςπελαφνουμε τθν τιμι (x, y, mod(time, 128)), δθλαδι, ςε κάκε καρζ προςπελαφνουμε διαφορετικι «φζτα» τθσ τριςδιάςτατθσ υφισ για να δθμιουργιςουμε τα ςφννεφα και ανά 128 δευτερόλεπτα επαναλαμβάνουμε τθν προςπζλαςθ ςτθν πρϊτθ «φζτα». Αυτό δθμιουργεί τθν αίςκθςθ ότι τα ςφννεφα μετακινοφνται ενϊ παράλλθλα αλλάηει το ςχιμα τουσ. Εικόνα 29: φγκριςθ τθσ ποιότθτασ των ςφννεφων χωρίσ (a) και με (b) εφαρμογι διγραμμικοφ φιλτραρίςματοσ. Βαςικι προχπόκεςθ για μία επιτυχθμζνθ αναπαράςταςθ των ςφννεφων είναι να εφαρμόηουμε φιλτράριςμα κατά τθν προςπζλαςθ. Θ ποιότθτα του αποτελζςματοσ πζφτει κατακόρυφα αν δεν γίνεται κάτι τζτοιο κι ζνα παράδειγμα φαίνεται ςτθν Εικόνα 29. 73

Ρζρα από τα ςφννεφα, ςτον ουρανό δθμιουργοφμε χρθςιμοποιϊντασ μακθματικζσ ςυναρτιςεισ τον ιλιο. Κεωροφμε πωσ είναι εντελϊσ ςτρογγυλόσ ζτςι ϊςτε να περιγράφεται με λιγότερεσ πράξεισ κατά τθν εκτζλεςθ του προγράμματοσ ςτθν GPU. Επίςθσ ο ιλιοσ μετακινείται ςτον ουρανό και μεταβάλλοντασ παραμζτρουσ κατά τθν ςχεδίαςι του επιτφχαμε να είναι λίγο ζντονο το φωσ του όταν είναι κοντά ςτον ορίηοντα αλλά πολφ ζντονο όταν βρίςκεται ςτθν ανϊτερθ κζςθ πάνω από τθν τριςδιάςτατθ ςκθνι. Επιπλζον, τα ςφννεφα, ο ίδιοσ ο ιλιοσ και φυςικά τα αντικείμενα τα οποία φωτίηει ζχουν διαφορετικό χρϊμα ανάλογα με τθν κζςθ του ςτον ουρανό. Στθν Εικόνα 30, φαίνονται 2 κζςεισ του ιλιου, μία ςτο φψοσ του ορίηοντα (a) και μία όταν βρίςκεται ςτθν ανϊτερθ κζςθ του (b). Εικόνα 30: χεδίαςθ του ιλιου ςτον ουρανό. 74

Ραρατθριςτε, πωσ αλλάηει το χρϊμα του ουρανοφ, των ςφννεφων και του εδάφουσ ςτισ δφο αυτζσ κζςεισ. Το χρϊμα αυτό προκφπτει φςτερα από προςπζλαςθ ςε 2 διαφορετικζσ υφζσ τθσ μίασ διάςταςθσ θ κάκε μία. Θ μία υφι περιζχει το χρϊμα του ιλιου ςε κάκε κζςθ από τθν ελάχιςτθ ζωσ τθν μζγιςτθ. Θ άλλθ υφι περιζχει το χρϊμα που ζχουν τα ςφννεφα και το ζδαφοσ για τισ αντίςτοιχεσ κζςεισ του ιλιου ςτον ουρανό. Θ προςπζλαςθ ςε αυτζσ τισ υφζσ κακορίηεται από τθν ςυνιςτϊςα y που περιγράφει το φψοσ του ιλιου πάνω από ζδαφοσ και οι τιμζσ τθσ κυμαίνονται ςτο *0,1+. Τα ςφννεφα ςε ςχζςθ με το ζδαφοσ ζχουν ζνα πιο φωτεινό χρϊμα, ενϊ κατά τθν δφςθ κι ανατολι του θλίου το ζδαφοσ παίρνει ζνα ςκοφρο μπλε χρϊμα και διαφοροποιείται από το χρϊμα του ιλιου. Τα χρϊματα αυτά μπορεί να αλλάηουν από τον προγραμματιςτι επιτυγχάνοντασ περιςςότερο αλθκοφανι ι φανταςτικά χρϊματα ανάλογα με τον ςκοπό τθσ εφαρμογισ. Απαλϋσ ςκιϋσ με χρόςη Shadow Mapping Θ τελευταία τεχνικι ςκίαςθσ θ οποία υλοποιικθκε, βαςίηεται ςτθν αλγόρικμο του shadow mapping, ο οποίοσ παρουςιάςτθκε το 1978 από τον Lance Williams [20]. Θ τεχνικι αυτι είναι δφο περαςμάτων (two passes). Στο πρϊτο πζραςμα αποκθκεφουμε ςε κάποια βοθκθτικι μνιμθ (buffer) τθν απόςταςθ των αντικειμζνων του τριςδιάςτατου κόςμου από τθν πθγι του φωτόσ. Στο δεφτερο πζραςμα, χρθςιμοποιοφμε τθν πλθροφορία που αποκθκεφςαμε ςτο πρϊτο, ζτςι ϊςτε να διαπιςτϊςουμε αν θ γεωμετρία που ςχεδιάηουμε φαίνεται ι όχι από τθν φωτεινι. Με άλλα λόγια κεωροφμε το φωσ ςαν τον παρατθρθτι τθσ ςκθνισ και ςτθν ςυνζχεια κάνουμε ζναν ζλεγχο για να δοφμε τι είναι ορατό από αυτόν τον παρατθρθτι. Θ μζκοδοσ του Shadow mapping λόγω τθσ μικρισ πολυπλοκότθτάσ τθσ είναι πολφ αποδοτικι, ειδικά όταν εκτελείται ςτισ ςφγχρονεσ GPUs. Το μεγάλο μειονζκτθμα τθσ μεκόδου είναι θ εμφάνιςθ τεχνουργθμάτων (artifacts). Με τον όρο αυτό αναφερόμαςτε ςε ςθμεία τθσ ςκιάσ τα οποία παρουςιάηουν περίεργεσ γωνίεσ και δεν ακολουκοφν το περίγραμμα των αντικειμζνων με τα οποία ςχετίηονται. Αυτό ζχει ωσ αποτζλεςμα τθν μείωςθ τθσ ποιότθτασ τθσ τελικισ εικόνασ. Στθν Εικόνα 31 παρουςιάηεται το πρόβλθμα αυτό. Ππωσ μπορεί κανείσ να δει ςτο πρόςωπο, το ςϊμα του Βοφδα και το ζδαφοσ, οι ςκιζσ εμφανίηουν περίεργεσ γωνίεσ και χαλάνε το τελικό αποτζλεςμα. Το πρόβλθμα αυτό οφείλεται ςε δφο παράγοντεσ. Ο ζνασ είναι θ ακρίβεια των αρικμθτικϊν πράξεων. Πταν ςυγκρίνουμε αποςτάςεισ από τθν φωτεινι πθγι κι όςο θ γωνία μίασ επιφάνειασ με το επίπεδο X,Y τθσ φωτεινισ πθγισ μεγαλϊνει, τόςο πιο εμφανζσ είναι το πρόβλθμα. Αυτό ςυμβαίνει γιατί θ floating point ακρίβεια (ειδικά όταν οι αποςτάςεισ ςτον τριςδιάςτατο κόςμο είναι μεγάλεσ) δεν επαρκεί για να κωδικοποιιςει αποςτάςεισ μερικϊν εκατοςτϊν όταν τα αντικείμενα βρίςκονται εκατοντάδεσ μζτρα μακριά. Ζτςι, οι επιφάνειεσ άλλοτε φωτίηονται κι άλλοτε όχι, ι επιφάνειεσ οι οποίεσ ζπρεπε να φωτίηονται είναι υπό ςκιά. Το πρόβλθμα αυτό παρουςιάηεται κυρίωσ ςτο ζδαφοσ τθσ Εικόνα 31. Μία εφκολθ λφςθ ςτο πρόβλθμα 75

τθσ αρικμθτικισ ακρίβειασ είναι να μετακινοφμε τθν μία από τισ δφο επιφάνειεσ τισ οποίεσ ςυγκρίνουμε ωσ προσ τθν απόςταςθ από το φωσ, ελάχιςτα πιο μακριά από αυτό. Εικόνα 31: Πρόβλθμα εμφάνιςθσ τεχνουργθμάτων κατά τθν εφαρμογι του Shadow Mapping αλγόρικμου. Εφαρμόηοντασ αυτι τθν μετακίνθςθ παίρνουμε το αποτζλεςμα που φαίνεται ςτθν Εικόνα 32. Ρροςοχι πρζπει να δοκεί ςτο ποςοςτό τθσ μετακίνθςθσ που κα εφαρμόςουμε, γιατί μεγάλο ποςοςτό μετακινεί τθν ςκιά μακριά από τα αντικείμενα με τα οποία ςχετίηεται και χαλά το αιςκθτικό αποτζλεςμα. Από τθν άλλθ μικρι μετακίνθςθ ςθμαίνει μικρι βελτίωςθ ςτθν ποιότθτα τθσ εικόνασ, λόγω τθσ μθ εξάλειψθσ των τεχνουργθμάτων. Σε κάκε περίπτωςθ, απαιτείται πειραματιςμόσ ι προςζγγιςθ με άλλεσ μεκόδουσ, όπωσ θ μετακίνθςθ των επιφανειϊν κατά ζνα ποςοςτό ςχετικά με το κάκετο διάνυςμα ςτθν επιφάνεια. Ενϊ θ ποιότθτα τθσ τελικισ εικόνασ είναι ςαφϊσ καλφτερθ, ςυνεχίηουν να εμφανίηονται τεχνουργιματα ςτο πρόςωπο και ςτο ζδαφοσ, ειδικά ςτο περίγραμμα του αγάλματοσ του Βοφδα. Το πρόβλθμα που εμφανίηεται μετά τθν παραπάνω διόρκωςθ ςχετίηεται με τθν με τθν φφςθ του Shadow Mapping αλγόρικμου. Συγκεκριμζνα, ο αλγόρικμοσ εφαρμόηεται ςτον χϊρο εικόνασ (image space), κάνει δθλαδι ςυγκρίςεισ πλθροφορίασ ανάμεςα ςε εικόνεσ. Θ μία, είναι αυτι που ςχεδιάηουμε και θ άλλθ είναι θ εικόνα που κρατά τθν απόςταςθ από τθν φωτεινι πθγι. Επειδι θ ανάλυςθ (ςε εικονοςτοιχεία) των δφο εικόνων κι ειδικά τθσ δεφτερθσ είναι πεπεραςμζνθ, 76

ςυμβαίνει να δειγματολθπτοφμε το ίδιο pixel τθσ εικόνασ πολλαπλζσ φορζσ. Αυτό ζχει ωσ αποτζλεςμα ςτθν τελικι εικόνα να εμφανίηονται ςκαλοπάτια ςτα περιγράμματα των αντικειμζνων. Ρροφανϊσ, αυτό το πρόβλθμα δεν μπορεί να ξεπεραςτεί πλιρωσ και για τθν αντιμετϊπιςι του ζχουν προτακεί πάρα πολλζσ διαφορετικζσ προςεγγίςεισ. Θ δικι μασ προςζγγιςθ ιταν να δειγματολθπτιςουμε πολλαπλζσ φορζσ τα εικονοςτοιχεία που περιζχουν τισ αποςτάςεισ ςε διαφορετικζσ περιοχζσ και να βγάλουμε ζναν μζςο όρο για να υπολογίςουμε αν φωτίηονται ι όχι τα εικονοςτοιχεία τθσ τελικισ εικόνασ. Εικόνα 32: Μείωςθ των τεχνουργθμάτων που οφείλονται ςτθν αρικμθτικι ακρίβεια. Θ δειγματολθψία περιορίηεται ςε ςυγκεκριμζνθ απόςταςθ από το εικονοςτοιχείο που μασ ενδιαφζρει αλλά αυτι θ παράμετροσ μπορεί να αλλάηει ζτςι ϊςτε να δθμιουργοφμε ςκιζσ με πιο απαλά ι ζντονα περιγράμματα. Θ δειγματολθψία γίνεται ςε 24 ςθμεία για κάκε εικονοςτοιχείο. Συγκεκριμζνα, ζχουμε 12 ςθμεία τα οποία αποτελοφν Poisson κατανομι ςε ζνα κφκλο και ζνα παράδειγμα φαίνεται ςτθν Εικόνα 33. Κάνουμε δειγματολθψία γι αυτά τα 12 ςθμεία και τα ςυμμετρικά τουσ ωσ προσ τουσ X,Y άξονεσ κι επομζνωσ ζχουμε 24 ςθμεία δειγματολθψίασ. Για κάκε ςθμείο εξετάηουμε αν βρίςκεται ςε ςκιά (0) ι ςτο φωσ (1) και το αποτζλεςμα το διαιροφμε με 24. Επομζνωσ οι τιμζσ που μπορεί να πάρει θ ζνταςθ τθσ ςκιάσ πλζον είναι 24 από 0/24 ζωσ 24/24. Επιπλζον, δεν κρατάμε το μοτίβο τθσ δειγματολθψίασ ςτακερό, γιατί αυτό δθμιουργεί μοτίβα ομοιομορφίασ ςτθν ςκιά 77

(βλ. Εικόνα 34) αλλά περιςτρζφουμε τον δίςκο δειγματολθψίασ κατά τυχαία κάκε φορά γωνία. Εικόνα 33: 12 ςθμεία ςε Poisson κατανομι ςε ζνα κφκλο Θ τυχαίεσ γωνίεσ περιςτροφισ είναι αποκθκευμζνεσ ςε μία υφι, θ οποία περιζχει ςε κάκε εικονοςτοιχείο τθσ 4 γωνίεσ περιςτροφισ που χρθςιμοποιοφνται για 2 δειγματολθψίεσ γειτονικϊν εικονοςτοιχείων. Το αποτζλεςμα αυτισ τθσ προςζγγιςθσ είναι θ δθμιουργία κορφβου και κατά ςυνζπεια θ απομάκρυνςθ των μοτίβων ομοιομορφίασ. Εικόνα 34: Μοτίβο ομοιομορφίασ ςτθν ςκιά, λόγω ομοιόμορφθσ δειγματολθψίασ. Επειδι το ανκρϊπινο μάτι δεν είναι ευαίςκθτο ςτον κόρυβο, το αποτζλεςμα είναι ανϊτερο από αυτό τθσ Εικόνα 32 και παρουςιάηεται ςτθν Εικόνα 35. Βλζπουμε πωσ πλζον οι ςκιζσ ζχουν πολφ πιο ομαλζσ μεταβάςεισ και απαλό περίγραμμα ενϊ βελτιϊνεται δραςτικά θ κίνθςθ των ςκιϊν όταν μετακινείται το αντικείμενο ωσ προσ τθν φωτεινι πθγι ι ο παρατθρθτισ ι θ ίδια θ πθγι φωτόσ. Ρροφανϊσ, οι βελτιϊςεισ ςτθν ποιότθτα που πετφχαμε με τισ παραπάνω μεκόδουσ, ζχουν επιπτϊςεισ ςτθν απόδοςθ. Πλεσ όμωσ, οι ςφγχρονεσ GPUs είναι ςε κζςθ να εκτελζςουν αποδοτικά τουσ αλγόρικμουσ αυτοφσ. 78