Graphics

5
May 10

Diffusions-Paper angenommen!

Juhu! Das SIGGRAPH-Paper, das mich nach Weihnachten so sehr beschäftigt hat, wurde nun endgültig angenommen. Im August fliege ich nach Los Angeles, um es dort zu präsentieren.

In dem Paper geht es um ein Thema, das mich schon seit langem beschäftigt hat: Materialien, bei denen die Lichtstreuung unter der Oberfläche eine wichtige Rolle spielt, und die zusätzlich noch eine interne “Struktur” besitzen (z.B. gewobene Stoffe, Holz, Muskelfasern, etc.)

Hier ist ein Link zur Projekt-Seite mit PDFs etc.

Und hier ist ein Bild von einem Schal, das mit der Methode im Paper berechnet wurde:




4
Aug 08

Mikrofacetten-Modell

Nach einigem Experimentieren funktioniert jetzt auch das Mikrofacetten-Modell für durchsichtige Stoffe. Hier sind ein paar Bilder von verschieden stark angerauten Glasoberflächen. Der erste Drache erinnert an ein wenig an Eis oder etwas sehr sehr kaltes, beschlagenes. Um so breiter (und rauer) die Mikrofacetten-Verteilung, um so mehr ähnelt die Erscheinung der von sandgestrahltem Glas.


  

Der nächste Schritt ist nun, den Renderer von den “nur” 3 RGB-Farben auf alle sichtbaren Spektralfarben zu erweitern, da ansonsten einige physikalische Phänomene schlecht oder gar nicht simuliert werden können.


2
Aug 08

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!


16
Jun 07

The processor works

About two weeks ago, I built the first hardware revision of the intersect processor. I was quite exited to start writing some programs using its acceleration features – only to find out that it encountered serious errors every couple of thousand operations. What happened is that it ‘choked’ from time to time and kept operations inside the intersection pipeline without ever finishing them.



A picture of the FPGA routing

This was awful since it wasn’t reproducible at all on computer simulations. And how do you debug a microchip? It’s like finding a needle in a haystack using a 50-foot pole and binoculars.
Today, I finally managed to pinpoint the error inside the caching subsystem, which comes as a great relief!


26
May 07

The intersect core

intersect is a project of mine on which I have been working for quite some time now. Recently, I managed to continue it as part of my Studienarbeit (kind of like a bachelor’s thesis in the German diploma system). I’ll blog about it from time to time for those who are interested in its progress. But first an introduction:

intersect is comprised of three parts: A special microprocessor, a linux kernel driver and a piece of software called beam. Together, they try to solve the problem which has become known as Global illumination (GI):

Global illumination algorithms used in 3D computer graphics are commonly used to add realistic lighting to 3D scenes. Images rendered using global illumination algorithms often appear more photorealistic than images rendered using only direct illumination algorithms. However, they are also much slower to generate and more computationally expensive. [Wikipedia]

Today, there are is an abundance of algorithms for computing Global illumination solutions and each one has some kind of severe drawback. One of the more robust algorithms is called bidirectional path tracing; its flaw is the excessive number of required ray-triangle intersection tests.
intersect uses bidirectional path tracing but takes a new approach: A custom graphics co-processor performs some of the calculations and makes use of the massive amount of parallelism. Up to 96 photons are simultaneously shot through the scene to speed up the calculations. The microprocessor is partly finished and for now, there is a software emulation to demonstrate its functionality. While it probably still has lots of bugs, it can already create some pretty pictures like this cornell box rendering:




Stay tuned..