Schlagwort: Raytracing

  • Durchbruch (in groß). Die Zweite.

    Nachdem ich vor gut zwei Monaten an selber Stelle verkünden durfte, dass mir bei meiner Diplomarbeit der große algorithmische Durchbruch gelungen ist, gibt’s heute den nächsten Meilenstein zu feiern. Musste ich mir beim ersten mal noch alles selbst ausdenken konnte ich für meinen zweiten großen Erfolg auf zahlreiche Paper zurück greifen.

    Zwar bin ich immer noch nicht dazu gekommen meine Diplomarbeit hier im Blog genauer und auch für Laien verständlich vorzustellen, jedoch kann man zum heutigen Meilenstein auch ohne große Einleitung einiges erzählen. Wie an den beiden Bildern unten zu erkennen ist, muss ich es offensichtlich geschafft haben, den Teapot und das Bunny zu rendern. Was soll daran nun so besonders sein? Mit OpenGL sollte sowas doch relativ schnell realisiert sein. Mit DirectX auch. Darüber hinaus sieht die Schattierung der beiden Modelle auch noch äußerst gewöhnungsbedürftig aus. Was ist da nun so toll dran?

    Nun, gerendert wurden die Modelle weder mit OpenGL noch mit DirectX sondern mit meinem eigenen in CUDA geschriebenen Raytracer. Die Berechnungen zur Erstellung der Bilder werden also nicht vom Hauptprozessor sondern von der Grafikkarte durchgeführt mit dem Vorteil, dass ich 100%ige Kontrolle über den Programmfluss habe, was mir bei OpenGL und DirectX in dieser Form nicht möglich gewesen wäre.

    Diese Kontrolle brauche ich, da es in meiner Diplomarbeit nicht primär um Visualisierungen von Dreiecksmengen geht sondern ich die grundlegende Algorithmik eines Raytracers für eine interne Simulation ohne grafische Ausgabe benötige. Auf diese Weise erklärt sich auch die merkwürdige Schattierung: Die Farbe eines Dreiecks korrespondiert nämlich mit dessen Indexnummer in der globalen Dreiecksliste und hat also nichts mit irgendwelchen Beleuchtungen zu tun.

    Für all diejenigen, die sich ein wenig näher mit der Materie auskennen dürfte das jetzt alles recht trivial wirken. Jedoch steckt da im Hintergrund doch noch einiges an Intelligenz drin: Zur Beschleunigung werden die Dreiecke des Modells in einer hierarchischen Struktur, einer sogenannten Bounding Volume Hierarchy organisiert. Diese parallel auf der Grafikkarte zu traversieren war die eigentliche Herausforderung. Somit schaffe ich es im Moment pro Sekunde eine dreistellige Anzahl von Bildern in einer Auflösung von 1024×768 zu erstellen. Genau habe ich das noch nicht gebenchmarkt. Darüber hinaus handelt es sich bei den unteren beiden Bilder um das Ergebnis der allerersten Version meiner Software. Da ist noch nichts optimiert, weder irgendwelche Parameter noch eine Zeile Programmcode.

    Teapot.
    Diese Version des Teapot besteht aus 4032 Dreiecken. Mit größeren Dreiecksmengen kann ich im Moment noch nicht arbeiten, da zwar das Rendering bereits relativ effizient von Statten geht, der Aufbau der zugrunde liegenden Hierarchisierug des Modells noch äußerst ineffizient vom Hauptprozessor übernommen wird.

    Bunny.
    Das Modell des Bunny besteht aus 3999 Dreiecken.

  • Radiometrische Beleuchtungssimulation mit präziser Sensormodellierung.

    Von meinem Programmierpraktikum habe ich hier in meinem Blog ja schon so einiges erzählt. Mit diesem Artikel möchte ich nun abschließend meine zusammenfassende Ausarbeitung der Allgemeinheit zur Verfügung stellen.

    Ausarbeitung: zybesi.pdf (360 KB)

    Die erstellte Software selbst, die ich Zybesi getauft habe (Zylinderbeleuchtungssimulator), beziehungsweise deren Quelltext werde ich nicht veröffentlichen. Das hängt damit zusammen, dass Zybesi massiven Gebrauch der FORWISS-Libraries macht. Diese werden für Punkt- und Vektorrechnungen in der Ebene und im Raum sowie für die Erstellung der grafischen Benutzeroberfläche benötigt. Jedoch sind diese Libraries nicht frei zugänglich. Da sie aber sowohl zum Kompilieren als auch für die Ausführung meines Programms benötigt werden, macht es wohl keinen all zu großen Sinn, Quelltext oder das Programm selbst über meinen Blog zu veröffentlichen.

  • Try & Error.

    Am letzten Sonntag hab ich’s endlich hinter mich gebracht: Mein Programmierpraktikum. Aus diesem Anlass möchte ich gleich zwei Blogeinträge online stellen. Den Ersten gibt’s heute. Teil zwei erscheint dann aller Voraussicht nach die nächsten Tage und wird die Ausarbeitung zu meinem Programmierpraktikum enthalten.

    Heute gibt’s aber erstmal ein bisschen zum „Schmunzeln“. Neben zahlreichen Bugs in meiner Software gab’s auch welche, die sich schön mit Bilder dokumentieren lassen. Schließlich handelt es sich um ein Tool, das die Beleuchtung von Zylindern simuliert und folglich auch Bilder produziert. Da kann so ein Programmierfehler oder eine falsch gesetzte Variable zu Bildern führen, die so nicht ganz dem realitätsnahen Anspruch meiner Software mithalten können. Also los geht’s…


    Das kommt davon, wenn man die Werte seiner Bildpunkte nicht im Blick hat. Dieses Bild ist aufgrund zahlreicher double-Überläufe entstanden. Noch dazu liegt die Lichtquelle der Szene genau hinter dem Zylinder, was eigentlich zu gar keiner Beleuchtung in dem Bereich führen dürfte, der von der Kamera eingesehen werden kann.


    Nanu, was ist denn hier passiert: Die unteren 2/3 sehen ja noch ganz OK aus, aber ab dem Fluchtpunkt sollte da doch nichts mehr sein. Stimmt, das kommt davon, wenn man die Sichtstrahlen des Raytracings zu stiefmütterlich behandelt. Die schneiden den Zylinder natürlich nicht nur vor, sondern auch hinter der Kamera, dort, wo sie eigentlich nichts sehen dürften. Schließlich hat eine Kamera keine Augen auf dem Rücken.


    Arrays hin und her zu kopieren ist eigentlich die Todsünde eines jeden Programmierers. Ab und zu lässt sich das aber nicht ganz vermeiden und wenn man nicht aufpasst, kommen solche tollen Streifen dabei raus.


    Und das passiert wenn man meint, dass sein Simulationsbild einen Pixel breiter und höher ist, als es tatsächlich zutrifft. Dann verschiebt sich beim Zeichnen der mühsam berechneten Pixel jede Zeile und jede Spalte ein wenig und über das ganze Bild betrachtet, sieht das dann so aus.

  • Durchbruch.

    Nur ganz kurz ein Bild der Früchte meines Erfolgs. Die meisten werden jetzt keine Ahnung haben, was es mit diesem Bild auf sich hat, allen anderen sei gesagt: Bei diesem Bild handelt es sich um das allererste, bei dem’s geklappt hat. Dementsprechend mau sieht’s noch aus.

    Wenn ich in den nächsten Tagen mal ein wenig Zeit hab, wonach’s leider nicht aussieht, werd‘ ich mal ein bisschen mehr über die Hintergründe des Bildes schreiben.