[Suche] Mitstreiter für Realtime Raytracing Engine
Verfasst: 24.06.2009, 14:16
Anm.: Die Sache ist gestorben. Ich hab keine Lust mehr mich alleine mit so viel Zeug rumzuschlagen, das ich dann nichtmal selbst weiter verwende, weil ich niemals die Zeit hätte was schönes mit zu machen. Falls aber jemand seinen eigenen Raytracer starten will kann er sich gerne mal bei mir melden, vielleicht hab ich ja noch n paar gute Ideeen. Man lernt doch ne Menge in 1.5 Jahren:)
Das Folgende ist noch in Arbeit, Kommentare sind aber erwünscht; wenn ich das Gefühl habe, dass es Ausgereift ist, also dass ich wirklich weiß, was ich machen will und das es so funktionieren wird, dann werde ich den Text weiter verteilen um mehr Menschen zu erreichen, als nur die Leser dieses Forums:)
Meine Motivation
(keine)
Eure Motivation
Ihr habt bestimmt schon mal was von den Intel Raytracing Demos gehört oder gesehen; dem ein oder anderen sagt sicher auch Arauna oder Realstorm was. Vielleicht hat euch auch überzeugt, was ich so produziert hab, vermutlich aber nicht.
Ansonsten kann ich noch youtube videos zu Quaternion Julia, Sparse Voxel Octrees oder Raytracing im allgemeinen empfehlen.
Der Punkt ist eigentlich, eine Alternative zu Rasterizern zu schaffen, die in der Lage ist Schatten, Reflexionen, ... in einfachen Situationen schöner darzustellen.
Außerdem lernt man einfach viel über Computer Grafik, Paralleles Programmieren, Softwarearchitektur, Teamarbeit, etc.
Was ich von euch erwarte
-Zuverlässigkeit
-ZUVERLÄSSIGKEIT, d.h. wenn ihr sagt ihr übernehmt eine Aufgabe, dann übernehmt ihr sie auch, oder meldet euch rechtzeitig ab.(wenn mal was dazwischen kommt, kein Thema, wir sind alle Menschen)
-für Programmieraufgaben: Sicheren Umgang mit der jeweiligen Sprache
-sicheres Englisch für Code & Kommentare
-sicheres Deutsch für Kommunikation mit anderen Teammitgliedern
-Regelmäßige Teilnahme an Besprechungen; ich plane atm. einmal pro Woche eine kurze Zusammenfassung aller Teammitglieder(ts, skype, wird man sehen) über das, was sie die letzte Woche so getrieben haben, weil es einfach motiviert und weil man viel effizienter arbeitet.
Tech
-Codepaths / Rechnerarchitektur(en):
Es wird eine offene Architektur entwickelt, die es erlaubt auf vernünftige und effiziente weise einzelne Pipelinestufen getrennt zu implementieren, d.h. es kann letztlich jede Stufe auf der GraKa oder der CPU gerechnet werden.
-Raytracing an sich:
Es wird wieder Rekursives Raytracing aus der Bildplane heraus werden. Alles andere ist meines Wissens für Realtime ungeeignet. Daraus ergeben sich dann die bekannten vor und nachteile, wie teure Softshadows, Absens mancher in Raytracern üblicher Spielereien.
Es wird einen inneren Frame geben, in dem das aktuelle Bild in einem Out of Order Verfahren berechnet wird. Das führt dazu, dass zwischen dem aktuell sichtbaren Bild und dem, welches gerade vorbereitet wird, wie bei GraKas auch genau ein Frame unsichtbar dazwischen liegt. (Das war bei APE 0.3 nicht so, daher auch manche der Artefakte) Das erlaubt aber auch, dass man Raypacks und Batchprozesse verwenden kann, ohne das jemand auserhalb des Cores was davon mitbekommt, d.h. es wird für den Endnutzer der lib nicht komplizierter.
Um das einigermaßen Performant hinzubekommen, ist geplant Rays oder Raypackages an Knoten im SceneGraphen zu pinnen, die dann selbstständig von Workerthreads abgeholt und mit einer optimierten Batchfunktion komplett alle bearbeitet werden. Der vorteil davon ist, dass man sich diverse load/store Operationen spart, weil man gegen das gleiche Objekt testet; außerdem ist das für die Prozessorpipeline viel netter.
UserRays, die manche Rayattribute auf const setzen, damit man sich verlassen kann, das Shader diese nicht ändern; leicht über cast operator zu realisieren.
Weitere Details spar ich mir hier mal.
Mit einfachen Mutexen wird sichergestellt, dass sich einzelne Pipelinestufen nicht im weg stehen, so dass Raycreation erst fertig läuft, bevor sekundärstrahlen gestartet werden, damit man danach, wenn zu viel Zeit verbraucht wurde auch abbrechen kann um eine erwünschte Mindestframerate auf kosten von Details zu erreichen.
-Texturen:
Es soll voll verwaltete Texturen geben, die prefetch, MipMaps und HDR unterstützen. Zudem konstante, lineare und cubische Interpolation, was man so eben alles braucht.
Bis auf mipmaps und prefetch ist eigentlich auch schon alles Implementiert, das prefetch wäre vermutlich etwas arbeit.
-Objekte:
Es wird "normale" Objekte geben, die so funktionieren, wie man das jetzt schon in APE sehen kann.
Zudem wird gefordert, dass sich alle Objekte wie Volumen haben, die ein innen/außen definieren, um die behandlung allgemeiner Objekte zu vereinfachen. Das würde, über eine Hyperebenen ähnlicthe Eigenschaft von Dreiecken, erlauben, dass Objekte selbst dann noch *dicht* sind, wenn man sich in ihnen befindet und nicht hohl, wie das bei rasterizern afaik immer gehandhabt ist. Dieses Verhalten wäre allerdings nur optionaler Natur, da die Standardimplementierung, wie jetzt auch schon, eine dünne Hülle um ein Dreieck sein wird.
Es wird Voxel basierte Geometrie geben, da man damit interessante Dinge machen kann und hier Raytracer mit Rasterizern speedtechnisch gleichziehen können, wobei Raytracer ihre Vorteile weiter behalten.
Allerdings ist von mir zunächst nur statische Voxelgeometrie geplant, da sich hier selbst bei scheinbar moderaten auflösungen riesige Datenmengen ergeben können.
Außerdem ist mir grad gekommen, dass man auf Grund der Gestalltung von Objekten, wie sie ab APE 0.2 war, ohne etwas über ein Objekt aussagen zu können, CSG aufbauen kann, sogar mit etwas komplexeren funktionen als AL, das ganze werd ich wohl selbst ausprobieren, da ich's vermutlich schneller selbst implementiert hab, als es jemandem genau zu erklären, so dass ers machen kann.
(Anm.: Es funktioniert mit ape nur bedingt, aber fast so wie ich mir das vorgestellt hab und der zusatzaufwand ist fast immer sehr gering; in ape kann man leider nicht rausfinden, wann ein Strahl aus einem Objekt austreten würde, was auf Grund der Volumenforderung hier kein Problem wäre. Für Objekte, die nah beieinander liegen funktionierte das aber in ape auch schon recht gut, auf Wunsch hätte ich da n Screenshot zu.)
-UI:
Es soll ein User Interface (also die Fassade für die Programmierer) geben, dass leicht und effizient zu benutzen ist.
Außerdem wird UI vollständig asynchron zum Rest laufen. Dafür bekommt *der Rest* eine FrameClock auf die man lauschen kann.
Aufgaben
- OS Maintainer, je für Windows und Linux; eventuell für Mac, wenn sich einer findet.
Die Aufgabe besteht darin regelmäßig die Bibliotheken und die Tests auf dem Zielsystem zu bauen und für eventuelle Probleme Bugreports zu schreiben. Diese Aufgabe kann im Prinzip jeder übernehmen.
- Core Rayhandling; den Weg, den Rays durch den Core nehmen; das würde ich selbst machen, weil ich da Erfahrung habe
- Core Texturen;
- Core SceneGraph;
- Object StandardObjects; Dreiecke, Vierecke, Boxen, Kugeln, etc.
- StandardObjects Materialien: Diffuse, Normalmap, Reflection, zusammengesetzte Fresnel Reflection/Refraction, etc.
- Object Voxel; alles was man mit Voxeln schönes machen kann
- Documentation Review; das sollte man vielleicht im Kreis rumreichen, dass es einfach jeder mal macht, sollte man aber machen
- Tutorial writer; jemand, der einfach Tutorials schreibt und testet, wie man mit der Lib arbeitet
- Modelformat; man müsste ein Format entwickeln, mit dem man Szenen beschreiben kann; da die Szenen, die man mit dieser Lib darstellen kann eine echte Obermenge von Dreieckbasierten Zeug sind wäre ein gängiges Format hier imho unpraktikabel. Das für sich ist imo eine Aufgabe die einen Hobbyentwickler voll auslasten würde und mit Raytracing an sich auch nicht zwingend was zu tun hat.
- UI Maintainer; jemand, der mir einfach sagt, wie meine Nutzerschnittstelle aussehen sollte, damit sie von normalsterblichen Programmierern zu bedienen ist. Das ist vermutlich die selbe Person wie der Tutorial writer.
voraussichtlicher Projektstart: 1.10.09
bisherige Interessenten neben mir:
- 1x PR
- 1x Programmierung
voraussichtliches Release von 0.1 noch 2009, wobei da nur die grundlegende Funktionalität im Vordergrund stehen wird und die Framerate auchnoch egal sein sollte. Einfach nur die Pipeline und ein paar schöne Bilder bauen, damit andere Leute auch was zu tun haben und motiviert sind, einzusteigen.
Kommentare sind erwünscht, bei Interesse könnt ihr hier schreiben, oder mir per Mail/Jabber/ICQ/PN.
Bei der Teamstruktur denke ich, dass ich das Projekt leiten würde, bis sich alle kennen und dass man dann zu einer Demokratischen Struktur übergeht, da das letztlich das beste ist und die meisten sowieso ohne Überschneidung arbeiten können.
Gruß
Timm
Das Folgende ist noch in Arbeit, Kommentare sind aber erwünscht; wenn ich das Gefühl habe, dass es Ausgereift ist, also dass ich wirklich weiß, was ich machen will und das es so funktionieren wird, dann werde ich den Text weiter verteilen um mehr Menschen zu erreichen, als nur die Leser dieses Forums:)
Meine Motivation
(keine)
Eure Motivation
Ihr habt bestimmt schon mal was von den Intel Raytracing Demos gehört oder gesehen; dem ein oder anderen sagt sicher auch Arauna oder Realstorm was. Vielleicht hat euch auch überzeugt, was ich so produziert hab, vermutlich aber nicht.
Ansonsten kann ich noch youtube videos zu Quaternion Julia, Sparse Voxel Octrees oder Raytracing im allgemeinen empfehlen.
Der Punkt ist eigentlich, eine Alternative zu Rasterizern zu schaffen, die in der Lage ist Schatten, Reflexionen, ... in einfachen Situationen schöner darzustellen.
Außerdem lernt man einfach viel über Computer Grafik, Paralleles Programmieren, Softwarearchitektur, Teamarbeit, etc.
Was ich von euch erwarte
-Zuverlässigkeit
-ZUVERLÄSSIGKEIT, d.h. wenn ihr sagt ihr übernehmt eine Aufgabe, dann übernehmt ihr sie auch, oder meldet euch rechtzeitig ab.(wenn mal was dazwischen kommt, kein Thema, wir sind alle Menschen)
-für Programmieraufgaben: Sicheren Umgang mit der jeweiligen Sprache
-sicheres Englisch für Code & Kommentare
-sicheres Deutsch für Kommunikation mit anderen Teammitgliedern
-Regelmäßige Teilnahme an Besprechungen; ich plane atm. einmal pro Woche eine kurze Zusammenfassung aller Teammitglieder(ts, skype, wird man sehen) über das, was sie die letzte Woche so getrieben haben, weil es einfach motiviert und weil man viel effizienter arbeitet.
Tech
-Codepaths / Rechnerarchitektur(en):
Es wird eine offene Architektur entwickelt, die es erlaubt auf vernünftige und effiziente weise einzelne Pipelinestufen getrennt zu implementieren, d.h. es kann letztlich jede Stufe auf der GraKa oder der CPU gerechnet werden.
-Raytracing an sich:
Es wird wieder Rekursives Raytracing aus der Bildplane heraus werden. Alles andere ist meines Wissens für Realtime ungeeignet. Daraus ergeben sich dann die bekannten vor und nachteile, wie teure Softshadows, Absens mancher in Raytracern üblicher Spielereien.
Es wird einen inneren Frame geben, in dem das aktuelle Bild in einem Out of Order Verfahren berechnet wird. Das führt dazu, dass zwischen dem aktuell sichtbaren Bild und dem, welches gerade vorbereitet wird, wie bei GraKas auch genau ein Frame unsichtbar dazwischen liegt. (Das war bei APE 0.3 nicht so, daher auch manche der Artefakte) Das erlaubt aber auch, dass man Raypacks und Batchprozesse verwenden kann, ohne das jemand auserhalb des Cores was davon mitbekommt, d.h. es wird für den Endnutzer der lib nicht komplizierter.
Um das einigermaßen Performant hinzubekommen, ist geplant Rays oder Raypackages an Knoten im SceneGraphen zu pinnen, die dann selbstständig von Workerthreads abgeholt und mit einer optimierten Batchfunktion komplett alle bearbeitet werden. Der vorteil davon ist, dass man sich diverse load/store Operationen spart, weil man gegen das gleiche Objekt testet; außerdem ist das für die Prozessorpipeline viel netter.
UserRays, die manche Rayattribute auf const setzen, damit man sich verlassen kann, das Shader diese nicht ändern; leicht über cast operator zu realisieren.
Weitere Details spar ich mir hier mal.
Mit einfachen Mutexen wird sichergestellt, dass sich einzelne Pipelinestufen nicht im weg stehen, so dass Raycreation erst fertig läuft, bevor sekundärstrahlen gestartet werden, damit man danach, wenn zu viel Zeit verbraucht wurde auch abbrechen kann um eine erwünschte Mindestframerate auf kosten von Details zu erreichen.
-Texturen:
Es soll voll verwaltete Texturen geben, die prefetch, MipMaps und HDR unterstützen. Zudem konstante, lineare und cubische Interpolation, was man so eben alles braucht.
Bis auf mipmaps und prefetch ist eigentlich auch schon alles Implementiert, das prefetch wäre vermutlich etwas arbeit.
-Objekte:
Es wird "normale" Objekte geben, die so funktionieren, wie man das jetzt schon in APE sehen kann.
Zudem wird gefordert, dass sich alle Objekte wie Volumen haben, die ein innen/außen definieren, um die behandlung allgemeiner Objekte zu vereinfachen. Das würde, über eine Hyperebenen ähnlicthe Eigenschaft von Dreiecken, erlauben, dass Objekte selbst dann noch *dicht* sind, wenn man sich in ihnen befindet und nicht hohl, wie das bei rasterizern afaik immer gehandhabt ist. Dieses Verhalten wäre allerdings nur optionaler Natur, da die Standardimplementierung, wie jetzt auch schon, eine dünne Hülle um ein Dreieck sein wird.
Es wird Voxel basierte Geometrie geben, da man damit interessante Dinge machen kann und hier Raytracer mit Rasterizern speedtechnisch gleichziehen können, wobei Raytracer ihre Vorteile weiter behalten.
Allerdings ist von mir zunächst nur statische Voxelgeometrie geplant, da sich hier selbst bei scheinbar moderaten auflösungen riesige Datenmengen ergeben können.
Außerdem ist mir grad gekommen, dass man auf Grund der Gestalltung von Objekten, wie sie ab APE 0.2 war, ohne etwas über ein Objekt aussagen zu können, CSG aufbauen kann, sogar mit etwas komplexeren funktionen als AL, das ganze werd ich wohl selbst ausprobieren, da ich's vermutlich schneller selbst implementiert hab, als es jemandem genau zu erklären, so dass ers machen kann.
(Anm.: Es funktioniert mit ape nur bedingt, aber fast so wie ich mir das vorgestellt hab und der zusatzaufwand ist fast immer sehr gering; in ape kann man leider nicht rausfinden, wann ein Strahl aus einem Objekt austreten würde, was auf Grund der Volumenforderung hier kein Problem wäre. Für Objekte, die nah beieinander liegen funktionierte das aber in ape auch schon recht gut, auf Wunsch hätte ich da n Screenshot zu.)
-UI:
Es soll ein User Interface (also die Fassade für die Programmierer) geben, dass leicht und effizient zu benutzen ist.
Außerdem wird UI vollständig asynchron zum Rest laufen. Dafür bekommt *der Rest* eine FrameClock auf die man lauschen kann.
Aufgaben
- OS Maintainer, je für Windows und Linux; eventuell für Mac, wenn sich einer findet.
Die Aufgabe besteht darin regelmäßig die Bibliotheken und die Tests auf dem Zielsystem zu bauen und für eventuelle Probleme Bugreports zu schreiben. Diese Aufgabe kann im Prinzip jeder übernehmen.
- Core Rayhandling; den Weg, den Rays durch den Core nehmen; das würde ich selbst machen, weil ich da Erfahrung habe
- Core Texturen;
- Core SceneGraph;
- Object StandardObjects; Dreiecke, Vierecke, Boxen, Kugeln, etc.
- StandardObjects Materialien: Diffuse, Normalmap, Reflection, zusammengesetzte Fresnel Reflection/Refraction, etc.
- Object Voxel; alles was man mit Voxeln schönes machen kann
- Documentation Review; das sollte man vielleicht im Kreis rumreichen, dass es einfach jeder mal macht, sollte man aber machen
- Tutorial writer; jemand, der einfach Tutorials schreibt und testet, wie man mit der Lib arbeitet
- Modelformat; man müsste ein Format entwickeln, mit dem man Szenen beschreiben kann; da die Szenen, die man mit dieser Lib darstellen kann eine echte Obermenge von Dreieckbasierten Zeug sind wäre ein gängiges Format hier imho unpraktikabel. Das für sich ist imo eine Aufgabe die einen Hobbyentwickler voll auslasten würde und mit Raytracing an sich auch nicht zwingend was zu tun hat.
- UI Maintainer; jemand, der mir einfach sagt, wie meine Nutzerschnittstelle aussehen sollte, damit sie von normalsterblichen Programmierern zu bedienen ist. Das ist vermutlich die selbe Person wie der Tutorial writer.
voraussichtlicher Projektstart: 1.10.09
bisherige Interessenten neben mir:
- 1x PR
- 1x Programmierung
voraussichtliches Release von 0.1 noch 2009, wobei da nur die grundlegende Funktionalität im Vordergrund stehen wird und die Framerate auchnoch egal sein sollte. Einfach nur die Pipeline und ein paar schöne Bilder bauen, damit andere Leute auch was zu tun haben und motiviert sind, einzusteigen.
Kommentare sind erwünscht, bei Interesse könnt ihr hier schreiben, oder mir per Mail/Jabber/ICQ/PN.
Bei der Teamstruktur denke ich, dass ich das Projekt leiten würde, bis sich alle kennen und dass man dann zu einer Demokratischen Struktur übergeht, da das letztlich das beste ist und die meisten sowieso ohne Überschneidung arbeiten können.
Gruß
Timm