Bilder aus der Masterthesis: Physik-basiertes Rendering
Das große Eichhörnchen ist aus Glas (Brechungsindex 1,5). Die dunklen Stellen – z.B. an der Schnauze – sollten nicht dunkel sein, aber der Pfad hat hier seine maximale Länge erreicht, weshalb keine Licht- und somit Farbinformationen gewonnen werden konnten. Die ganzen Erklärungen, was ich in diesem Projekt überhaupt gemacht habe, kommen irgendwann in einem anderen Blogeintrag.
Gleiche Szene wie eben, nur wurde als Licht ein eher dunkles, warmes Orange (CIE A) gewählt. Das kleine Eichhörnchen wurde zudem zur weißen Lichtquelle umdefiniert.
Ein Ikosaeder in der Mitte und die Wände links und rechts davon spiegeln. Allerdings ist die Spiegelung nicht perfekt, sondern leicht matt gewählt, weshalb das Bild mit zunehmender Spiegelungsanzahl verschwimmt. Die schwarze Wand am Schluss gibt es nicht wirklich, hier haben die Pfade nur wieder ihr Maximum erreicht.
Die weißen Linien zeichnen die Bounding Boxen ein. Als Datenstruktur wurde eine Bounding Volume Hierarchy verwendet – die Dreiecke wurden in kleine Gruppen eingeteilt.
Matter, grüner Boden. Der Affenkopf ist das Suzanne-Modell von Blender. Hier ist sehr schön Color Bleeding zu sehen – die Farbe des grünen Bodens strahlt auf die Objekte ab.
Das Applejack-Modell von KP-ShadowSquirrel. Die Farben und Material-Eigenschaften habe allerdings ich verbockt. Die richtigen Farben zu finden ist recht schwer, wenn man sie nicht einfach per Color Picker und Schieberegler zusammenklicken kann. Da mein Renderer mit Wellenlängen und Intensitäten zur Farbrepräsentation arbeitet, war viel Ausprobieren und Herantasten nötig.
Noch einmal mit anderer Beleuchtung. Alle Bilder wurden für circa 2 Minuten bei 10 FPS auf der Grafikkarte gerendert.
Comments
Mit Pfaden meinst du was genau? Die Länge des Weges die ein einzelner Lichtsrahl zutücklegt?
Bzgl. der 2min bei 10FPS: wie viel simulierte Zeit verstreicht zwischen 2 Frames? Oder falls nicht das, was passiert zwischen einzelnen Frames?
In Abständen von 100ms wurde je 1 Frame erzeugt. In dieser Zeit wird für jedes Pixel ein Strahl in die Szene geschossen und ein Pfad berechnet. Befindet sich am Ende des Pfades eine Lichtquelle, wird die Farbe für das Pixel berechnet. Dieser neu erzeugte Frame wird dann mit allen zuvor erzeugten Frames vermischt, wodurch das Bild nach und nach besser wird.
Wie lange hast du gebraucht, um dich dort einzuarbeiten und alle Funktionen die du brauchst du finden und zu verstehen? Würde mich wirklich mal interessieren. Und wie lange würdest du jetzt brauchen, um das mit dem Eichhörnchen noch einmal zu entwickeln?
Beste Grüsse,
Twaldigas
Es gibt einiges an Lektüre und kleineren Demos inklusive Beispielcode. Zum Glück. Ich habe trotzdem 2-3 Wochen gebraucht, um überhaupt mal etwas angezeigt zu bekommen. Sehr viel Zeit ging dann auch drauf, eine geeignete Datenstruktur für die 3D-Geometrie zu wählen. Ich hatte mich für einen kD-Baum entschieden, da dieser positiv in einigen Arbeiten erwähnt wurde. Den zu implementieren hat gedauert und war dann doch nicht so schnell wie gewünscht. Nach ~2 Monaten habe ich es dann aufgegeben und eine BVH ausprobiert. Diese war einfacher zu implementieren und sogar schneller.
Manche Bestandteile habe ich im Detail ehrlich gesagt immer noch nicht richtig verstanden. Fehler sind mit Sicherheit noch drin, nur an solchen Stellen, wo sie nicht allzu sehr auffallen. :P Die Bilder hier müssten auch noch einen Fehler enthalten, den ich erst kurz vor Abgabe behoben habe – je nach Betrachtungswinkel werden einige Flächen zu stark abgedunkelt.
Müsste ich wieder von vorne anfangen, hätte aber mein ganzes Wissen und meine Bookmarks, dann könnte ich mir vorstellen, das wieder in 2-3 Wochen hinzubekommen.