(Echtzeit-)Raytracing-Engine

Anwendungen, Tools, Userlibs und anderes nützliches.
ShadowTurtle
Beiträge: 114
Registriert: 11.09.2004 07:58
Wohnort: Mannheim
Kontaktdaten:

Beitrag von ShadowTurtle »

Hab jetzt eben nur mal das erste Posting gelesen und da kam mir soeben gleich eine frage auf. Benutzt du unter anderem auch 2D Octree um die Geschwindigkeit (mit ~5% Qualität Verlust) um das 50 fache zu steigern?
Benutzeravatar
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

Beitrag von NicTheQuick »

Nein, hab ich noch nicht eingebaut, wäre aber meine nächste
Optimierungsstufe. Wenn ich wieder Zeit und Lust auf RayTracing habe, dann
gehts damit wohl auch weiter. :wink:

Ich schwanke immer gerne zwischen den unterschiedlichsten Projekten. <)
Benutzeravatar
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

Beitrag von NicTheQuick »

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.
Bild
Bild
Bild
Bild

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.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

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

:roll:
Kinder an die Macht http://scratch.mit.edu/
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Beitrag von c4s »

NicTheQuick hat geschrieben:Ich hab mich die Woche mal wieder hingesetzt..
Habe voller erstaunen deine Bilder betrachtet. Scheint ja echt eine leistungs-
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
Benutzeravatar
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

Beitrag von NicTheQuick »

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. :)
THEEX
Beiträge: 804
Registriert: 07.09.2004 03:13

Re: (Echtzeit-)Raytracing-Engine

Beitrag von THEEX »

Hört sich gut an, mach nur... ^^
Eine Art Query-Planner soll die Ausführung von Map/Reduce-Funktionen in Hadoop stark beschleunigen.
Benutzeravatar
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

Beitrag von NicTheQuick »

Wen's interessiert: Das war die Rendering-Competition von letztem Jahr: Rendering Competition 2008/2009

Unter anderem gab es da diese netten Bilder:

Bild

Bild

Bild

Das gefällt mir auch ganz gut:

Bild
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Re: (Echtzeit-)Raytracing-Engine

Beitrag von Blackskyliner »

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.
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
Benutzeravatar
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

Beitrag von NicTheQuick »

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.
Antworten