Material-Test

Um die Ferien über nicht nur unnütz rumzuhocken und um mich etwas auf das nächste Semester vorzubereiten, habe ich in den letzten Monate viele Verbesserungen an meiner Rendering-Software vorgenommen. Das ist ein wahrhaft endloses Vorhaben, denn für jede neu eingebaute Funktion fallen mir noch zwei andere wichtige Dinge ein, die eigentlich auch noch drin sein sollten… Um das Programm einigermaßen auf den aktuellen Stand der Technik zu bekommen, mussten mehrere Teile nochmal ganz neu geschrieben werden.
Die meiste Zeit habe ich damit verbracht, die sogenannten kd-Bäume noch effizienter zu bauen und zu durchlaufen. Die benötigt man z.B., um Kollisionen zwischen Lichtstrahlen und dreidimensionalen Objekten in möglichst kurzer Zeit zu berechnen. Dabei gibt es alle möglichen Tricks, mit denen man das Programm noch weiter beschleunigen kann (Wenn zum Beispiel mehrere Lichtstrahlen sehr nahe beieinander liegen, treffen sie höchstwahrscheinlich auch auf dasselbe Objekt. Man kann viele Berechnungen einsparen, indem man diese sogenannte “Kohärenz” vorteilhaft ausnutzt). Nach allen Optimierungen können komplexe Szenen mit mehr als 400.000 Dreiecken in Echtzeit (ca. 8 Bilder pro Sekunde) komplett auf der CPU berechnet und dargestellt werden.

Anschließend habe ich noch “Environment map lighting” eingebaut. Hier wird ein dreidimensionales Panorama verwendet, um ein Objekt zu beleuchten – d.h. jemand macht ein Foto von einer realen Umgebung, die anschließend in eine virtuelle Lichtquelle umgewandelt und um das (ebenfalls virtuelle) Objekt platziert wird. Hier sind ein paar Bilder vom letzten Material-Test, der unter anderem auch “environment map lighting” verwendet:



Lambert-Material

Von mir kommt hier nur das Programm – der Drache ist ein 3D-Scan der UTIA und TU Prag und das Hintergrund-Panorama stammt von Paul Debevec. Das “Lambert”-Material ist eine Art idealisierter diffuser Stoff. So etwas perfektes existiert in der realen Welt zwar nicht, wird in der Computergrafik aber gerne eingesetzt, um matt polierten Kunststoff zu imitieren.

 
Perfektes dielektrisches und reflektierendes Material

Das dielektrische Material hat einen einstellbaren Brechungsindex, mit den man Stoffe wie z.B. Glas, Wasser oder Diamant simulieren kann. Einen perfekten Spiegel gibt es ebenfalls nicht, weshalb man hier meist auf ein physikalisch etwas plausibleres Modell wechselt:

 
Mikrofacetten und Ward-Material

Das Mikrofacetten-Modell ist mein Favorit – es simuliert ein raues Object, dessen Oberfläche aus winzigen Facetten besteht. Die Häufigkeit der Facetten folgt außerdem noch einer gegebenen statistischen Verteilung, wodurch sich eine Vielzahl von verschiedenen Stoffen approximieren lässt. Das führt zu komplizierten Berechnungen, lohnt sich aber wegen der realistischen Ergebnisse.

Falls mir genug Zeit bleibt, will ich das Microfacetten-Modell noch erweitern, damit es auch durchsichtige Stoffe (z.B. Glas) darstellen kann, die eine raue Oberfläche besitzen. Und dann bräuchte es noch ein realistischeres Modell für Metalle… und, und, und….. man könnte ewig weitermachen!

2 comments

  1. Peter Marquardt

    Mmmm, das Mikrofacettenmaterial sieht schon echt lecker aus. Batmans Helm kommt mir da in den Sinn. Kommt es je nach Verteilung der Facetten zu unterschiedlich langen Rechenzeiten oder kann man sagen, dass alle damit annäherbaren Materialien mehr oder weniger gleich lange berechnet werden?

  2. Die Stoffe sehen alle so dunkel aus, da die Lichtstreuung unter der Oberfläche nicht simuliert wird. Die Rechenzeiten verändern sich abhängig davon, wie matt das Material ist (matter-> etwas langsamer). Jedes ser Bilder benötigt ca. 20 min zum rendern und wenn man bereit ist, etwas mehr Bildrauschen zu akzeptieren, reichen auch 4-5 Minuten.

Leave a comment