1 ΤΕΙ Θεσσαλονίκης Τμήμα Πληροφορικής Γραφικά Υπολογιστών: Μέθοδοι Ανίχνευσης Επιφανειών (Surface Detection Methods) Πασχάλης Ράπτης http://aetos.it.teithe.gr/~praptis praptis@it.teithe.gr
2 Περιεχόμενα Σήμερα θα ρίξουμε μια ματιά στις τεχνικές ανίχνευσης ορατών επιφανειών: Γιατί χρειαζόμαστε την ανίχνευση επιφανειών Ανίχνευση πίσω όψεων-πλευρών (back face detection) Μέθοδος μνήμης-βάθους (Depth-buffer) Μέθοδος μνήμης-α (A-buffer) Μέθοδος σάρωσης-γραμμής (Scan-line)
3 Ανίχνευση Ορατών Επιφανειών Γιατί; Πρέπει να καθοριστεί: τι είναι ορατό μέσα σε μια σκηνή από μια επιλεγμένη θέση προβολής (θέασης) Για 3D κόσμους αυτό είναι γνωστό ως ανίχνευση ορατής επιφάνειας (surface detection) ή εξάλειψη (elimination) κρυμμένων επιφανειών
4 Δυο Κύριες Μέθοδοι (Two Main Approaches) Οι αλγόριθμοι ανίχνευσης ορατών επιφανειών σε γενικές γραμμές κατατάσσονται σε: Μέθοδοι χώρου αντικειμένων (Object Space Methods): Συγκρίνει τα αντικείμενα και τα μέρη των αντικειμένων μεταξύ τους στο πλαίσιο του ορισμού της σκηνής για να καθορίσει ποιες επιφάνειες είναι ορατές Μέθοδοι χώρου εικόνας (Image Space Methods): Η ορατότητα καθορίζεται σημείο προς σημείο σε κάθε θέση pixel στο επίπεδο προβολής Οι μέθοδοι χώρου εικόνας (Image space) χρησιμοποιούνται πιο συχνά.
5 Ανίχνευση πίσω πλευρών (Back-Face Detection) Το πιο απλό πράγμα που μπορούμε να κάνουμε είναι να βρούμε τις επιφάνειες στις πλάτες (πίσω πλευρές) (back face) των πολυέδρων και να τις πετάξουμε
6 Ανίχνευση πίσω πλευρών (2) Γνωρίζουμε (από πριν) ότι ένα σημείο (x, y, z) είναι πίσω από μια ένα επιφάνεια πολύγωνου εάν : Ax + By + Cz + D < 0 όπου A, B, C & D οι παράμετροι του επιπέδου για την επιφάνεια Αυτό μπορεί πραγματικά να γίνει ακόμα πιο εύκολο αν οργανώσουμε τα πράγματα ώστε να ταιριάζουν σε εμάς
7 Ανίχνευση πίσω πλευρών (3) Images taken from Hearn & Baker, Computer Graphics with OpenGL (2004) Βεβαιωνόμαστε ότι έχουμε ένα σύστημα δεξιού χεριού με την προβολή κατεύθυνσης κατά μήκος του αρνητικού άξονα z (z-axis). Τώρα μπορούμε απλά να πούμε ότι αν το στοιχείο z του πολυγώνου είναι μικρότερη του μηδενός η επιφάνεια δεν μπορεί να ειδωθεί-θεαθεί
8 Ανίχνευση πίσω πλευρών (4) Σε γενικές γραμμές η μέθοδος ανίχνευσης πίσω πλευρών (back-face) αναμένεται ότι θα εξαλείψει περίπου τις μισές επιφάνειες του πολυγώνου σε μια σκηνή από περαιτέρω ελέγχους ορατότητας Σε πιο περίπλοκες επιφάνειες θα είναι καταστροφική. Χρειαζόμαστε καλύτερες τεχνικές για να χειριστεί αυτό το είδος των καταστάσεων
9 Z-Buffer Z-buffer ή depth buffer είναι η πιο κοινή προσέγγιση για την αποκοπή κρυμμένων επιφανειών. Αποθηκεύει επιπλέον πληροφορίες για το βάθος (χρησιμοποιεί ως επί το πλείστον hardware, υπάρχουν επίσης και stware υλοποιήσεις)
10 Αλγόριθμος του Z-buffer: Κεντρική Ιδέα Εκτός από τη μνήμη-εικόνας (frame buffer), η οποία περιέχει τα χρώματα των pixels μιας εικόνας, διατηρεί και μια μνήμη-βάθους (z-buffer) ιδίου πλάτους και ύψους, που αποθηκεύει πληροφορίες βάθους για τα προβαλλόμενα πολύγωνα. Οθόνη Frame Buffer Χρώμα Πληροφορίες βάθους
11 Μέθοδος μνήμης βάθους (Depth-Buffer Method) Συγκρίνει τις τιμές βάθους επιφάνειας σε όλη την έκταση της σκηνής για κάθε θέση pixel στο επίπεδο προβολής Συνήθως εφαρμόζεται μόνο σε σκηνές που περιέχουν πολύγωνα Είναι πολύ γρήγορη μέθοδος καθώς οι τιμές βάθους μπορούν να εύκολα υπολογιστούν Συχνά αποκαλείται μέθοδος z-buffer
Images taken from Hearn & Baker, Computer Graphics with OpenGL (2004) 12 Μέθοδος μνήμης βάθους (2)
13 Αλγόριθμος μνήμης-βάθους (Depth-Buffer Algorithm) 1. Αρχικοποίησε το buffer βάθους και το buffer πλαισίου (frame), έτσι ώστε για όλες οι θέσεις μνήμης (x, y) depthbuff(x, y) = 1.0 framebuff(x, y) = bgcolour // χρώμα υπόβαθρου 2. Επεξεργάσου κάθε πολύγωνο σε μια σκηνή, ένα κάθε φορά
14 Αλγόριθμος μνήμης-βάθους (2) Για κάθε θέση προβαλλόμενου pixel (x, y) ενός πολυγώνου, υπολόγισε το βαθος z (αν δεν είναι ήδη γνωστό) Αν z < depthbuff(x, y), υπολόγισε το χρώμα της επιφάνειας σε εκείνη την θέση και θέσε depthbuff(x, y) = z framebuff(x, y) = surfcolour(x, y) Στο τέλος αφού όλες οι επιφάνειες επεξεργαστούν στα depthbuff και framebuff θα αποθηκευθούν οι σωστές τιμές
15 Υπολογίζοντας το βάθος Σε κάθε θέση επιφάνειας το βάθος υπολογίζεται από την εξίσωση του επιπέδου ως : Ax By D z = Για κάθε γραμμή σάρωσης διαδοχικές x θέσεις διαφέρουν κατά ± 1, όπως και παρακείμενες y θέσεις z' = A( x + 1) C By C D z' = z A C
16 Επαναληπτικοί Υπολογισμοί (Iterative Calculations) Ο αλγόριθμος μνήμης-βάθους (depth buffer) προχωρά ξεκινώντας από το σημείο κορυφής (top vertex) του πολυγώνου Στη συνέχεια υπολογίζει αναδρομικά τις τιμές των x-συντεταγμένων μέχρι την κάτω αριστερή άκρη του πολυγώνου Η τιμή του x στην θέση αρχής κάθε γραμμής σάρωσης μπορεί να υπολογιστεί από την προηγούμενη 1 x' = x όπου m είναι η κλήση m
17 Επαναληπτικοί Υπολογισμοί (2) Οι τιμές βάθους κατά μήκος της άκρης που εξετάζονται υπολογίζονται χρησιμοποιώντας την z' = z A + m C B
18 Επαναληπτικοί Υπολογισμοί (3) top scan line y scan line y - 1 scan line bottom scan line x x
19 Μέθοδος A-Buffer Το μέθοδος A-buffer είναι μια επέκταση της μεθόδου μνήμης βάθους (depth buffer) Το μέθοδος A-buffer είναι μια μέθοδος ανίχνευσης ορατότητας που αναπτύχθηκε στα Studios της Lucasfilm για το σύστημα απόδοσης (rendering) εικόνων REYES (Renders Everything You Ever Saw)
20 Μέθοδος A-Buffer (2) Το A-buffer επεκτείνει με το μέθοδο μνήμης-βάθους buffer ώστε να επιτρέπει διαφανείς επιφάνειες διαφάνειες Η βασική δομή δεδομένων στην μεθοδο A-buffer είναι η accumulation buffer
21 Μέθοδος A-Buffer (3) Εάν το βάθος είναι >= 0, τότε το πεδίο δεδομένων επιφάνειας αποθηκεύει το βάθος της θέσης του pixel όπως και πριν Εάν το βάθος είναι < 0 τότε το πεδίο δεδομένων αποθηκεύει ένα δείκτη σε μια συνδεδεμένη λίστα στοιχείων της επιφάνειας
22 Μέθοδος A-Buffer (4) Οι πληροφορίες που χειρίζεται η μέθοδος A-buffer για την επιφάνεια ειναι: RGB στοιχεία έντασης Παράμετρο αδιαφάνειας (opacity) Βάθος (depth) Ποσοστό κάλυψης περιοχής (percent area coverage) Αριθμός ταυτότητας επιφάνεια (surface identifier) Άλλες παράμετροι δημιουργίας επιφάνεια (surface rendering parameters) Ο αλγόριθμος προχωρά ακριβώς όπως ο αλγόριθμος βάθους buffer. Οι τιμές βάθους και αδιαφάνειας χρησιμοποιούνται για τον προσδιορισμό του τελικού χρώματος ενός pixel.
23 Μέθοδος σάρωσης γραμμής (Scan-Line Method) Είναι μια μέθοδος χώρου εικόνας για τον εντοπισμό ορατών επιφανειών Υπολογίζει και συγκρίνει τιμές βάθους κατά μήκος των διαφόρων γραμμών σάρωσης σε μια σκηνή
24 Μέθοδος σάρωσης γραμμής (2) Διατηρούνται δύο σημαντικοί πίνακες: πίνακας των ακμών (edge table) πίνακας πλευρών (facet) των επιφανειών Ο πίνακας των ακμών περιλαμβάνει: Συντεταγμένες των σημείων-άκρων της γραμμής στην σκηνή Την αντίστροφη κλίση της κάθε γραμμής Δείκτες στον πίνακα πλευρών των επιφανειών για να συνδεθούν οι ακμές στις επιφάνειες
25 Μέθοδος σάρωσης γραμμής (3) Οι πίνακες πλευρών επιφάνειας περιέχουν: Συντελεστές επιπέδου (plane coefficients) Ιδιότητες των υλικών επιφάνειας (material properties) Άλλα δεδομένα επιφάνειας Πιθανώς δείκτες στον πίνακα ακμών
26 Μέθοδος σάρωσης γραμμής (4) Για να διευκολυνθεί η αναζήτηση για επιφάνειες που τέμνουν μια δεδομένη scan-line, σχηματίζεται μια ενεργή λίστα των ακμών για κάθε γραμμή σάρωσης, καθώς επεξεργάζονται Η ενεργή λίστα αποθηκεύει μόνο αυτά τα άκρα που διασχίζουν την γραμμή σάρωσης ως προς το (αυξανόμενο) άξονα x Επίσης, ορίζεται μια σημαία για κάθε επιφάνεια που δείχνει αν μια θέση κατά μήκος μιας γραμμής σάρωσης είναι εντός ή είναι εκτός της επιφάνειας
27 Μέθοδος σάρωσης γραμμής (5) Οι θέσεις pixel κατά μηκος scan-line επεξεργάζονται από αριστερά προς τα δεξιά Στην αριστερή τομή με μια επιφάνεια η σημαία (flag) επιφάνειας ενεργοποιείται (turned on) Στο δεξιό σημείο τομής η σημαία απενεργοποιείται (turned f) Όταν περισσότερες από μία επιφάνειες έχουν τη σημαία ΟΝ σε μια συγκεκριμένη θέση της γραμμής σάρωσης (scan-line) τότε χρειάζεται να εκτελέσουμε μόνο υπολογισμούς βάθους
Μέθοδος σάρωσης γραμμής - Παραδειγμα Images taken from Hearn & Baker, Computer Graphics with OpenGL (2004)
Images taken from Hearn & Baker, Computer Graphics with OpenGL (2004) 29 Περιορισμοί της Μεθόδου σάρωσης γραμμής Η μέθοδος σάρωσης έχει πρόβλημα όταν οι επιφάνειες διασχίζουν η μια την άλλη ή έχουν κυκλική επικάλυψη Τέτοιες επιφάνειες πρέπει να διαιρεθούν
30 Σύνοψη Πρέπει να διασφαλίσουμε ότι σχεδιάζουμε τις ορατές μόνο επιφάνειες κατά την δημιουργίααπόδοση των σκηνών Υπάρχουν διάφορες τεχνικές για να γίνει αυτό, όπως Ανιχνευση πίσω πλευρών (back face detection) Μεθοδος Depth-buffer Μεθοδος A-buffer Μέθοδος σάρωσης γραμμής (scan-line) Την επόμενη φορά θα εξετάσουμε κάποιες άλλες τεχνικές και θα δούμε ποιες τεχνικές είναι κατάλληλες και σε ποίες καταστάσεις.