(Echtzeit-)Raytracing-Engine
-
- Beiträge: 114
- Registriert: 11.09.2004 07:58
- Wohnort: Mannheim
- Kontaktdaten:
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Ich hab mich die Woche mal wieder hingesetzt, weil ich endlich mal dahinter
gekommen bin, was an meiner Lichtbrechungsberechnungsfunktion falsch
war.
Außerdem hab ich den Code grad noch ein bisschen umgestellt und
verschiedene Sachen optimiert. Ich werde die Woche dann auch noch
Antialiasing einbauen.
Hier mal vier Bildchen.




Wie ihr seht, bin ich nicht gerade viel weiter gekommen. Hab aber ja auch
erst die Woche wieder angefangen. Es kann also sein, dass nächste Woche
wieder etwas anderes tolles dabei ist.
Kann mir vielleicht jemand verraten, ob es eine Möglichkeit gibt bei
DirectX direkt in den Frontbuffer zu plotten? Also ich mache
'OpenScreen()' ganz normal, will aber dann mit 'Plot()' direkt in den
Frontbuffer schreiben können, ohne 'FlipBuffers()' verwenden zu müssen.
gekommen bin, was an meiner Lichtbrechungsberechnungsfunktion falsch
war.
Außerdem hab ich den Code grad noch ein bisschen umgestellt und
verschiedene Sachen optimiert. Ich werde die Woche dann auch noch
Antialiasing einbauen.
Hier mal vier Bildchen.




Wie ihr seht, bin ich nicht gerade viel weiter gekommen. Hab aber ja auch
erst die Woche wieder angefangen. Es kann also sein, dass nächste Woche
wieder etwas anderes tolles dabei ist.
Kann mir vielleicht jemand verraten, ob es eine Möglichkeit gibt bei
DirectX direkt in den Frontbuffer zu plotten? Also ich mache
'OpenScreen()' ganz normal, will aber dann mit 'Plot()' direkt in den
Frontbuffer schreiben können, ohne 'FlipBuffers()' verwenden zu müssen.
Meinst du, dass wirklich das Plot die Geschwindigkeit ausmacht?
Schau mal hier
http://www.purebasic-lounge.com/viewtopic.php?t=5033
Also bei 1600 x 1200 Auflösung habe ich geschätzte 5 Frames pro Sekunde.
Bei 640 x 480 sind es mehr als genug, um ein flüssigen Eindruck zu haben.
Was noch eine Möglichkeit wäre, wenn du in den Speicher mit *Buffer schreibst und danach den ganzen *Buffer verschiebst.
Ohne jeden Punkt auszugeben.
Denke aber, dass beim Raytracen eher die Berechnung der Farbe des einzelnen Punktes die meiste Zeit kostet als später die Anzeige des selben.
Wenn ich nur an 3DStudioMax denke, wie lange da manchmal ein Rendern von einem einfachen Klotz gedauert hat. Und wenn ich ACDSee sehe, wie schnell das eine 6 Megapixel Bilddatei sofort anzeigen kann, obwohl es noch die JPEG-Datei entpacken muss.
Wenn das Raytracen nicht am allerschnellsten läuft, aber du fast ein Bild pro Sekunde hinbekommst, kannst du ja auch kleinere Animationen rendern, sie als Bildfolge ablegen. Und den Betrachter dann zwischendurch einen Ladebalken zeigen oder wärend die gespeicherte Animation läuft, schon die nächsten Bilder berechnen.
Vielleicht kannst du dein Raytracing auch dynamisch gestalten.
Dass es zum Beispiel im Zentrum des Bildes genauer ist als am Rand.
Und du dann statt Plot, Box nutzen kannst. Und immer gleich 3 x 3 Punkte zeichnest.
Vielleicht kannst du die Elemente im Programm auch teilen,
wenn du zum Beispiel eine Drehende Kugel hast, berechnest du Hintergund und Kugel unabhängig von einander und berechnest immer nur die Kugel neu und den Hintergrund vielleicht nur alle drei Bilder bei einer Drehung zum Beispiel.
Das wären jetzt noch so Tricks, die mir auf Anhieb einfallen, um es nahe zu in Echtzeit schaffen zu können. Natürlich mit Qualitätseinbußen.
http://scratch.mit.edu/projects/Canthiar/56074

Schau mal hier
http://www.purebasic-lounge.com/viewtopic.php?t=5033
Also bei 1600 x 1200 Auflösung habe ich geschätzte 5 Frames pro Sekunde.
Bei 640 x 480 sind es mehr als genug, um ein flüssigen Eindruck zu haben.
Was noch eine Möglichkeit wäre, wenn du in den Speicher mit *Buffer schreibst und danach den ganzen *Buffer verschiebst.
Ohne jeden Punkt auszugeben.
Denke aber, dass beim Raytracen eher die Berechnung der Farbe des einzelnen Punktes die meiste Zeit kostet als später die Anzeige des selben.
Wenn ich nur an 3DStudioMax denke, wie lange da manchmal ein Rendern von einem einfachen Klotz gedauert hat. Und wenn ich ACDSee sehe, wie schnell das eine 6 Megapixel Bilddatei sofort anzeigen kann, obwohl es noch die JPEG-Datei entpacken muss.
Wenn das Raytracen nicht am allerschnellsten läuft, aber du fast ein Bild pro Sekunde hinbekommst, kannst du ja auch kleinere Animationen rendern, sie als Bildfolge ablegen. Und den Betrachter dann zwischendurch einen Ladebalken zeigen oder wärend die gespeicherte Animation läuft, schon die nächsten Bilder berechnen.
Vielleicht kannst du dein Raytracing auch dynamisch gestalten.
Dass es zum Beispiel im Zentrum des Bildes genauer ist als am Rand.
Und du dann statt Plot, Box nutzen kannst. Und immer gleich 3 x 3 Punkte zeichnest.
Vielleicht kannst du die Elemente im Programm auch teilen,
wenn du zum Beispiel eine Drehende Kugel hast, berechnest du Hintergund und Kugel unabhängig von einander und berechnest immer nur die Kugel neu und den Hintergrund vielleicht nur alle drei Bilder bei einer Drehung zum Beispiel.
Das wären jetzt noch so Tricks, die mir auf Anhieb einfallen, um es nahe zu in Echtzeit schaffen zu können. Natürlich mit Qualitätseinbußen.
http://scratch.mit.edu/projects/Canthiar/56074

Kinder an die Macht http://scratch.mit.edu/
Habe voller erstaunen deine Bilder betrachtet. Scheint ja echt eine leistungs-NicTheQuick hat geschrieben:Ich hab mich die Woche mal wieder hingesetzt..
starke Raytracing-Engine zu sein!
Zwei neue Jahre - zwei neue geheime, noch bessere Versionen?
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: (Echtzeit-)Raytracing-Engine
Ich höre dieses Semester die Vorlesung "Computer Graphics" bei Philipp Slusallek.
Als praktisches Projekt schreiben wir in Teams zu 2 Personen eine Raytracing Engine in C++ mit wählbaren Features. Siehe hier.
Wenn das alles fertig und bewertet ist, werde ich schauen, dass ich daraus eine DLL mache und die auch für PB anbiete. Wir bekommen das Grundgerüst schon fertig und ich weiß noch nicht unter welcher Lizenz das stehen wird. Also kann es sein, dass es auch nicht geht, aber erstmal abwarten. Wenn ich die verschiedenen Algorithmen verstanden und erstmal programmiert habe, dann ist es ja auch nicht mehr schwer das ganze in PB zu übertragen.
Fast hätte ich es vergessen. Das vorgefertigte Framework kann übrigens mit Blender erstellte 3D-Szenen laden.
Als praktisches Projekt schreiben wir in Teams zu 2 Personen eine Raytracing Engine in C++ mit wählbaren Features. Siehe hier.
Wenn das alles fertig und bewertet ist, werde ich schauen, dass ich daraus eine DLL mache und die auch für PB anbiete. Wir bekommen das Grundgerüst schon fertig und ich weiß noch nicht unter welcher Lizenz das stehen wird. Also kann es sein, dass es auch nicht geht, aber erstmal abwarten. Wenn ich die verschiedenen Algorithmen verstanden und erstmal programmiert habe, dann ist es ja auch nicht mehr schwer das ganze in PB zu übertragen.
Fast hätte ich es vergessen. Das vorgefertigte Framework kann übrigens mit Blender erstellte 3D-Szenen laden.

Re: (Echtzeit-)Raytracing-Engine
Hört sich gut an, mach nur... ^^
Eine Art Query-Planner soll die Ausführung von Map/Reduce-Funktionen in Hadoop stark beschleunigen.
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: (Echtzeit-)Raytracing-Engine
Wen's interessiert: Das war die Rendering-Competition von letztem Jahr: Rendering Competition 2008/2009
Unter anderem gab es da diese netten Bilder:



Das gefällt mir auch ganz gut:

Unter anderem gab es da diese netten Bilder:



Das gefällt mir auch ganz gut:

- Blackskyliner
- Beiträge: 532
- Registriert: 28.07.2005 00:54
- Wohnort: /home/Blackskyliner/
Re: (Echtzeit-)Raytracing-Engine
Mal so als Anregung: Wenn mann noch CUAD von NVIDIA Karten unterstützen würde, wäre das doch perfekt und sehr schnell. Ich weiß ja nicht inwieweit sich das mit einbauen lässt, bzw. ob die Floatpoint Einheiten der Grafikkarte nicht sowieso schon verwendet werden, beim Raytracen, wenn nicht wäre das ja eine äußerst reizvolle Optimierung... Die Frage wäre halt nur in welchem Rahmen lässt sich sowas umsetzen und einbauen...
Ist mir nur so nebenbei, beim lesen eingefallen.
Ist mir nur so nebenbei, beim lesen eingefallen.
Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: (Echtzeit-)Raytracing-Engine
Das gibt es ja schon, allerdings nicht in PureBasic, sondern in C++. Bei uns am Computer Graphics-Lehrstuhl entwickeln sie ja stark daran. Leider kenne ich mich (noch) nicht mit CUDA und deren Besonderheiten aus. Das grobe System kenne ich, aber programmiert habe ich damit noch nichts. Von nVidia gibt es extra C++-Kompiler, die mit ihren Grafikkarten und spezielle CUDA zusammenarbeiten und optimiert dafür kompilieren.