C++ [MFC]Schnelle Darstellungsmethode für Bilder

Der Raytracer ist um ehrlich zu sein auch keine Freizeitbeschäftigung, sonder mache den für meinem HiWi-Job, weswegen auch eher vermeiden möchte, hier Code zu posten;).
Ich hatte auch mal einen Raytracer mit mehreren Threads geschrieben, der Kugeln, Ebenen benutzt hat um eine Szene zu berechnen. Der konnte Spiegelungen und etwas Beleuchtung berechnen. Die Optimierung war faktisch nicht vorhanden, da ich für jeden Strahl erst einmal alle Objekte getestet habe, was sehr rechenintensiv ist.
In meiner Szene befanden sich: 4 Ebenen, 2 große, 40 kleinere und 200 kleine Kugeln, sowie 2 Lichtquellen. Bei einer Auflösung von 1920*1200 brauchte der über eine Minute, um die Szene zu berechnen, je nachdem wie oft der Strahl maximal reflektiert werden darf:p.

Aber bei Volumenraytracing gibt es ein paar Vorteile, die man gegenüber normalem Raytracing ausnutzen kann. z.B. sind alle Objekte (= Voxel = Volumen-Pixel) schon schön sortiert :cool_alt:.
 
Zum Prefetching:

Location closer to the processor heißt kurz gesagt in die Cache, welche kann man mit dem Parameter angeben, wobei das nur ein Hinweis ist.

Den Performancevorteil bekommt man dadurch, dass man grob so 100 Takte/Befehle vor dem eigentlichen Zugriff auf einen Speicherbereich den Prefetch absetzt, dadurch kann der Prozessor die Daten schon in die Cache laden und hat dann statt 100 Takte (Cache Miss) nur 1-2 Takte Zugriffszeit.

Wenn man das Prefetching übertreibt, fliegt allerdings was aus der Cache, was man noch braucht.
 
@Hancock:
Ok so ganz hab ich jetzt trotzdem noch nicht. Das Einzige, was ich mir darunter jetzt vorstellen könnte, wäre etwas, das in Richtung latency-hiding geht. Ansonsten wäre es ja egal, wann ich auf den langsameren Speicher warte.
Ist das tatsächlich so, dass ich dann einfach weiter auf der CPU rechnen kann, während die restliche Hardware ihre 100 Takte beschäftigt ist? Wenn ja, dann wäre das tatsächlich ein mächtiges Tool. Aber eins, was man nicht einfach mal so eben einsetzen kann. Da muss man sich doch schon Gedanken machen (*stöhn* :D).

@fhnx
Irgendwie habe ich ja schon geahnt, dass es sich nicht nur um eine Freizeitbeschäftigung handelt :)
Über das genaue Vorgehen beim Raytracing werde ich mich mal informieren müssen, damit ich da auch die Unterschiede zwischen den Spielarten verstehe. Aber könnte man nicht auch bei einem Standard-Raytracing-Verfahren schon im Vorraus die Daten in einem Baum (Octree oder kd-Tree) organisieren?
 
Theoretisch schon. Es gibt aber 2 Probleme: Zum einen sollte das Volumen nicht größer werden, da man sonst schnell die RAM-Reserven aufbraucht. Zum anderen soll das Projekt in ein größeres Programm eingebunden werden. Dementsprechend ist es schwer die Daten anders zu sortieren, da man ggf. dieses Programm komplett umkrempeln müsste. :/
 
Zurück
Oben