Κυριακή 24 Οκτωβρίου 2010

High dynamic range rendering (HDR)

Στα τρισδιάστατα γραφικά, το High Dynamic Range Rendering είναι η μορφοποίηση των γραφικών με την χρησιμοποίηση υπολογισμών φωτισμού που συμβαίνουν σε ένα μεγάλο, δυναμικό εύρος. Αυτό επιτρέπει την διατήρηση λεπτομερειών που μπορεί να χανόταν λόγω των περιοριστικών επιπέδων αντίθεσης. Τα βιντεοπαιχνίδια επωφελούνται άμεσα από αυτήν την τεχνολογία αφού επιτρέπει πιο ρεαλιστικές σκηνές απ' ότι με τις πιο απλές τεχνικές φωτισμού που χρησιμοποιούνται.


Ένα απλό παράδειγμα:


Το πλέονεκτημα του HDR είναι ότι οι λεπτομέρειες σε εικόνες με μεγάλη αντίθεση διατηρούνται. Χωρίς την χρήση του HDR, τα σκοτεινά σημεία θα γινόταν αυτομάτως μαύρα (ως 0.0 floating point value) και τα φωτεινά σημεία θα γινόταν άσπρα (ως 1.0 floating point value).

To HDR είναι πολύ δημοφιλές, αυτή τη στιγμή, στα παιχνίδια, κυρίως στο Xbox 360 της Microsoft και στο Playstation 3 της Sony. Υπάρχουν επίσης και Simulators για το Playstation 2, το Xbox, το GameCube και τα συστήματα Amiga.

Στα βιντεοπαιχνίδια, οι τιμές των χρωμάτων υπολογίζονται πολλές φορές με πολύπλοκες πράξεις πολλαπλασιασμών και διαιρέσεων (που τις περισσότερες φορές δημιουργούνε λάθη στρογγυλοποίησης) και καλό είναι να υπάρχει η ακρίβεις μίας 16bit μεταβλητής integer ή float.

Πολλά παιχνίδια που χρησιμοποιούν αυτήν την τεχνολογία μπορούν να βρεθούνε εδώ: http://www.uvlist.net/groups/info/hdrlighting

Παράδειγμα HDRR σε συνδιασμό με OpenGL:


Αλλά βέβαια υπάρχουν και κάποια μειονεκτήματα στην χρήση αυτής της τεχνολογίας.

1) Αντί να χρησιμοποιήσεις 3 διαφορετικά στιγμιότυπα (πράγμα δύσκολο για παλιές φωτογραφίες), μπορείς να χρησιμοποιήσεις ένα και να φτιάξεις έναν χάρτη τονικότητας σε διαφορετικά σημεία οπότε αυτομάτως χαμηλώνεις και αυξάνεις την φωτεινότητα της φωτογραφίες όπου αυτό χρειάζεται (tone mapping). Αυτό βέβαια χρησιμοποιείται μόνο σε φωτογραφίες και είναι πολύ δύσκολο να χρησιμοποιηθεί σε graphics rendering και video.

2) Οποιοδήποτε αντικείμενο μετακινείται στο σκηνικό (πράγμα συνηθισμένο στα βιντεοπαιχνίδια) δημιουργεί blurness (θολούρα??) και χαλάει κάπως τα γραφικά.

3) Το ανθρώπινο μάτι μπορεί να αυτορυθμιστεί ώστε να αντιλαμβάνεται αντιθέσεις της τάξης του 1,000,000:1. Παρ' όλα αυτά, σε οποιαδήποτε στιγμή, δεν μπορεί να δεχτεί (λόγω του μεγέθους της κόρης και των χημικών αντιδράσεων που λαμβάνουν χώρα) περισσότερο από 10.000:1, μία αναλογία που πολλές οθόνες ξεπερνούν. Άρα μεγάλο μέρος της τεχνολογίας πάει χαμένο.

Και μερικά παραδείγματα HDR σε βιντεοπαιχνίδια και γραφικά:




Reference:
http://en.wikipedia.org/wiki/High_dynamic_range_rendering
http://www.gamedev.net/community/forums/topic.asp?topic_id=536942
http://www.uvlist.net/groups/info/hdrlighting
http://www.flickr.com/groups/73448529@N00/discuss/72157594572841614/
http://www.luminous-landscape.com/tutorials/hdr.shtml
http://www.youtube.com/

Παρασκευή 22 Οκτωβρίου 2010

Water in Video Games

Πριν αρχίσω, ένα βίντεο σχετικά με την ιστορία των water effects στα βιντεοπαιχνίδια των τελευταίων δεκαετιών.



To νερό, όντας βασικό στοιχείο της καθημερινής ζωής, δεν θα μπορούσε να λείπει από τα βιντεοπαιχνίδια, ειδικά την στιγμή που οι επιχειρήσεις δημιουργίας τους επιδιώκουν να είναι όσο πιο ρεαλιστικά γίνεται.
Και το καταφέρνουν. Το νερό, αν και σε πολλές περιπτώσεις σε στέλνει απευθείας στο προηγούμενο checkpoint, σε ελκύει και σε ενθουσιάζει ανάλογα με τον βαθμό ρεαλισμού.



Ο σχεδιασμός του νερού, όπως και πολλών άλλων φυσικών στοιχείων, χωρίζεται σε δύο βασικά μέρη.
Το πρώτο στάδιο είναι ο υπολογισμός της φυσικής κίνησής του (Wave Model). Υπολογίζεται η κίνηση ενός σώματος νερού υπό την επήρεια εσωτερικών και εξωτερικών δυνάμεων. Το Wave Model είναι αυτό που κάνει το νερό να κουνηθεί, να αλλάζει σχήμα και να αλληλεπιδρά με το υπόλοιπο περιβάλλον.

Το δεύτερο στάδιο περιλαμβάνει την οπτικοποίηση, που δέχεται τα δεδομένα που έχουν υπολογιστεί μέσω του Wave Model και τα προβάλλει στην οθόνη. Για να υπάρχει ρεαλισμός, ωστόσο, πρέπει να γίνουν υπολογισμοί και σε αυτό το στάδιο, λαμβάνοντας υπόψιν περαιτέρω φυσικούς νόμους (π.χ. Το νερό πρέπει να ανακλά όσο γίνεται καλύτερα το φως από τον ήλιο ή άλλες πηγές φωτός).
Σε αντίθεση με το πρώτο στάδιο της σχεδίασης που μπορεί να υπολογιστεί στον κεντρικό επεξεργαστή του υπολογιστή, το δεύτερο στάδιο χρειάζεται περίπλοκες διαδικασίες για κάθε pixel (!) σχεδίασης. Κάρτες γραφικών που έχουν και per-pixel και per-vetrex δυνατότητα προγραμματισμού είναι ιδανικές για αυτές τις λειτουργίες.

Φυσικά σε ένα βιντεοπαιχνίδι δεν έχουμε το χρονικό περιθώριο για rendering που έχουμε στα CGI οπότε έχουμε κάτι τέτοιο:

αντί για κάτι τέτοιο:


Η πιο συνηθισμένη τεχνική απεικόνισης του νερού, και ταυτόχρονα η πιο αποτελεσματική σε θέμα αλληλεπίδρασης, είναι με την χρησιμοποίηση ενός συστήματος σωματιδίων. Το κάθε σωματίδιο έχει στοιχεία περί της θέσης του, των δυνάμεων που του ασκούνται, των συνδέσεων του με άλλα σωματίδια, της κατεύθυνσης της κίνησής του κ.α. Τα περισσότερα από αυτά ανανεώνονται και υπολογίζονται μέσω του Wave Model πριν γίνει η τελική οπτικοποίηση.

Πριν το rendering:

Μετά το rendering:


Πάντως με την εξέλιξη των DirectX και OpenGL APIs το εικονικό νερό έχει αρχίσει να πλησιάζει όλο και περισσότερο στο άγιο δισκοπότηρο, των βιντεοπαιχνιδιών, της "πλήρους ρεαλιστικότητας".

Και τέλος ένα αντιπροσωπευτικό βίντεο σχετικά με το real-time rendering ενός ωκεανού σχεδιασμένου με χρήση OpenGL και των επιπτώσεων που έχουν πάνω του οι αλλαγές του φωτισμού, του αέρα κτλ.




Reference:
http://www.gamedev.net/reference/articles/article2138.asp
http://en.wikipedia.org/wiki/
http://www.youtube.com/
http://www.neeyik.info/3dspecs/3dspecs_terms.html