Γραφικά Υπολογιστών Απεικόνιση Αναγλύφου Απεικόνιση Αναγλύφου Γ. Γ. Παπαϊωάννου, - 2008
Σκοπιμότητα Πολλές φορές, είναι δύσκολο ή ασύμφορο να περιγράψουμε γεωμετρικά (πλέγμα) τις λεπτομέρειες μιας επιφάνειας Καταφεύγουμε σε τεχνικές απεικόνισης υφής Απλή λύση: χρήση μιας έτοιμης εικόνας με προϋπολογισμένο φωτισμό (texture baking) Πρόβλημα: η υφή περιέχει σκίαση που εξαρτάται από τη συγκεκριμένη φωτεινή πηγή Αν αλλάξει κάποιο χαρακτηριστικό της πηγής, δεν αλλάζει ο φωτισμός
Μέθοδοι Αναπαράστασης Αναγλύφου Displacement Mapping Δημιουργεί Γεωμετρική λεπτομέρεια αντίστοιχη του αναγλύφου Bump Mapping Προσομοιώνει το φωτισμό από την παρουσία αναγλύφου Normal Mapping Προσομοιώνει το φωτισμό από την παρουσία αναγλύφου Parallax Mapping Στέλνει ακτίνες από τον παρατηρητή προς την εικονική ανάγλυφη επιφάνεια και υπολογίζει τα νέα σημεία
Displacement Mapping Χρήση υφής (φωτεινότητα) για να «ανασηκωθούν» τα σημεία της επιφάνειας ως προς την διεύθυνση του κανονικού διανύσματος s = s+ n offset b( u, v) MAX
Displacement Mapping Απαιτεί: Την ύπαρξη λεπτής διαμέρισης της επιφάνειας σε τρίγωνα ώστε να υπάρχει αρκετή γεωμετρική πληροφορία ή Τη διμέριση της επιφάνειας επί τόπου (on the fly) Το μέγεθος των πολυγώνων πρέπει να είναι ανάλογο της λεπτομέρειας της απεικονιζόμενης πληροφορίας: Υψηλή εναλλαγή ύψους στην εικόνα μεγάλη διαμέριση επιλεκτική διαμέριση με βάση την παράγωγο της εικόνας αναγλύφου
Displacement Mapping Αρχική Ομοιόμορφη Προσαρμοστική Αποτέλεσμα επιφάνεια υποδιαίρεση υποδιαίρεση
Displacement Mapping και RT-Rendering Είναι κατάλληλο το displacement mapping για εφαρμογές πραγματικού χρόνου; Μεγάλη σπατάλη γεωμετρίας Ανάγκη υπολογισμών είτε στην αρχή (στατική γεωμετρία) είτε συνεχώς (παραμορφώσιμα μοντέλα) Μας ενδιαφέρει μόνο όταν έχουμε μεγάλες υψομετρικές διαφορές Μας ενδιαφέρει μόνο όταν κινούμαστε κοντά στην επιφάνεια και πλαγίως (με κλίση), π.χ. σε έδαφος
Τεχνικές Κανονικού Διανύσματος Αντιλαμβανόμαστε το ανάγλυφο από το φωτισμό της επιφάνειας Για κάθε θέση της επιφάνειας, ο υπολογισμός του φωτισμού εξαρτάται μόνο από το κανονικό διάνυσμα, τον παρατηρητή και τη θέση των φώτων
Τεχνικές Κανονικού Διανύσματος Μπορούμε να «ξεγελάσουμε» τον παρατηρητή και να δώσουμε κατευθείαν το αποτέλεσμα της διαμόρφωσης του αναγλύφου αντί να δημιουργήσουμε το ανάγλυφο
Τεχνικές Κανονικού Διανύσματος Δύο Βασικές Τεχνικές: Bump Mapping: Διαφορική εκτροπή κανονικού διανύσματος Normal Mapping: Ανάθεση τοπικού κανονικού διανύσματος Tangent-Space Normal Mapping Object-Space Normal Mapping
O Χώρος των Εφαπτόμενων Διανυσμάτων Σε κάθε σημείο μιας επιφάνειας ορίζεται ένα τοπικό σύστημα συντεταγμένων με άξονες τα εφαπτόμενα διανύσματα και το κανονικό διάνυσμα:
O Χώρος των Εφαπτόμενων Διανυσμάτων Ένα σημείο επιφάνειας έχει άπειρο αριθμό από διερχόμενα εφαπτόμενα διανύσματα Επιλέγουμε αυτά που ακολουθούν την κατεύθυνση μεταβολής των παραμέτρων υφής Γιατί; Στη συνέχεια θα χρειαστεί να αντλήσουμε δεδομένα και παραγώγους αυτών από εικόνες υφής και χρειαζόμαστε αντιστοιχία μεταβολών μεταξύ διανυσματικού χώρου και παραμετρικού χώρου Στη συνέχεια θα χρησιμοποιούμε την έκφραση του σημείου ως προς τις παραμέτρους σε αυτό: s=s(u,v)
Bump Mapping Στο bump mapping προσπαθούμε να υπολογίσουμε το κανονικό διάνυσμα που θα είχε ένα σημείο επιφανείας s αν αυτό το σηκώναμε σύμφωνα με μια εικόνα στην οποία η φωτεινότητα αντιστοιχεί με το ύψος (bump map)
Bump Mapping
Bump Mapping Υπολογισμός Καν. Διανύσματος Αν b είναι η τιμή του bump map στο σημείο s, η «ανεβασμένη» επιφάνεια δίνεται από: Για τη νέα επιφάνεια, το καινούριο κανονικό διάνυσμα θα είναι κάθετο στα εφαπτόμενα:
Bump Mapping Υπολογισμός Καν. Διανύσματος Για να βρούμε τα νέα εφαπτόμενα διανύσματα, εφαρμόζουμε την παραγώγιση πολυωνύμου (κανόνας αλυσίδας) στη σχέση: ~0 ~0
Bump Mapping Υπολογισμός Καν. Διανύσματος Οπότε: Και αντικαθιστώντας στο εξωτερικό γινόμενο που δίνει το νέο κανονικό διάνυσμα: ˆn ˆ b ˆ t 0
Πρακτικό Bump Mapping Με βάση τον παραπάνω τύπο χρειαζόμαστε για κάθε fragment: Το κανονικό διάνυσμα Δύο εφαπτόμενα διανύσματα προς την κατεύθυνση μεταβολής των u,v Τις παραγώγους της υψομετρικής εικόνας αναγλύφου ως προς u (οριζόντια) και v (κατακόρυφη) Οι παράγωγοι προυπολογίζονται και σώζονται ως υφές. buv (, ) buv (, ) u buv (, ) v
Bump Mapping - Αποτελέσματα χρώμα ανάγλυφο
Bump Mapping - Αποτελέσματα Το ανάγλυφο αποκόπτεται στις ακμές
Normal Mapping Εισαγωγή To bump mapping απαιτεί χρήση παραγώγων μιας εικόνας ύψους: Κατασκευή ή υπολογισμός παραγώγων ύψους Στο normal mapping, η εικόνα αποθηκεύει τα τελικά διανύσματα για κάθε θέση στην επιφάνεια ως προς την παραμετροποίηση u,v. Τα διανύσματα αυτά μπορούν να είναι εκφρασμένα: Ως προς το tangent space tangent-space normal mapping Ως προς το τοπικό σύστημα των συντεταγμένων του αντικειμένου object-space normal mapping
Αποθήκευση Κανονικών Διανυσμάτων Σε κάθε τριπλέτα RGB μιας εικόνας υφής αντιστοιχίζεται και ένα κανονικό διάνυσμα: color( u, v) nˆ( uv, ) = (1,1,1) 1 2 Nbits
Normal Mapping: Object/Tangent Space NM Γιατί να προτιμήσουμε κάποιο από τα δύο; OSNM: Εύκολη εφαρμογή: απλά σε WCS αντικαθιστούμε το normal του fragment Απαιτεί μοναδικές συντεταγμένες υφής για κάθε σημείο Δεν είναι βολικός τρόπος κατασκευής normal maps, δε μπορούν να γίνουν από γραφίστα και απαιτείται ειδική διαδικασία υπολογισμών (ray-casting)
Normal Mapping: Object/Tangent Space NM TSNM: H εφαρμογή τους απαιτεί την «μετάφραση» του αποθηκευμένου διανύσματος από tangent space σε συντεταγμένες αντικειμένου M ux vx nx 0 uy vy ny 0 = R = uz vz nz 0 0 0 0 1 TBN WCS TBN WCS Όμως οι εικόνες είναι πιο εύκολο να παραχθούν από τις παραγώγους υψομετρικών εικόνων υφής
Πρακτικός Φωτισμός με Normal Mapping (1) Στον fragment shader, φέρνουμε όλα τα διανύσματα σε eye space (camera coordinates - ECS) Έτσι δε χρειάζεται να περνάνε στο shader τη θέση της κάμερας (είναι πάντα το (0,0,0) ) Το σύστημα ECS δεν έχει προοπτική παραμόρφωση δεν εισάγουμε σφάλμα υπολογισμών Χρειάζεται να περνάμε από το vertex shader τη θέση και το κανονικό διάνυσμα σε ECS (πριν εφαρμόσουμε την προβολή για να πάρουμε το gl_vertex) Περνάμε και το ένα από τα 2 εφαπτόμενα διανύσματα (έστω το t)
Πρακτικός Φωτισμός με Normal Mapping (2) Στο fragment shader, υπολογίζουμε το καινούριο ECS κανονικό διάνυσμα: Διαβάζουμε το TBN Normal από την υφή n TBN Διαβάζουμε το εφαπτόμενο διάνυσμα (ECS) που περάσαμε από τον vertex shader (t) Υπολογίζουμε το συνεφαπτόμενο διάνυσμα (b): b = n x t (cross product) Κατασκευάζουμε τον πίνακα αλλαγής συστήματος συντεταγμένων R Υπολογίζουμε το νέο κανονικό διάνυσμα σε ECS: n = R n TBN Υπολογίζουμε το τοπικό μοντέλο φωτισμού