Seite 10 von 10

Verfasst: 14.02.2007 12:52
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?

Verfasst: 14.02.2007 14:39
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. <)

Verfasst: 28.11.2007 00:04
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.

Verfasst: 12.02.2008 19:03
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:

Verfasst: 05.01.2009 21:35
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?

Re: (Echtzeit-)Raytracing-Engine

Verfasst: 19.10.2009 09:43
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. :)

Re: (Echtzeit-)Raytracing-Engine

Verfasst: 21.10.2009 20:25
von THEEX
Hört sich gut an, mach nur... ^^

Re: (Echtzeit-)Raytracing-Engine

Verfasst: 29.10.2009 12:53
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

Re: (Echtzeit-)Raytracing-Engine

Verfasst: 14.11.2009 16:52
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.

Re: (Echtzeit-)Raytracing-Engine

Verfasst: 30.04.2010 20:20
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.