raytracing beschleunigungsverfahren - uni-frankfurt.de...raytracing nur mit den objekten, die im...
TRANSCRIPT
Raytracing
Beschleunigungsverfahren
Naives/brute forceRaytracing
Universität Frankfurt
Komplexität:
mxn Auflösung des Bildesp Anzahl der Primitives
O (mxnxp)
nur für die Primärstrahlen
RaytracingBeschleunigungsverfahren
Universität Frankfurt
• Bild-Kohärenz (image coherence)
•Objekt-Kohärenz (object coherence)
•Strahlkohärenz (ray coherence)
Bildkohärenznach Bronsvoort et al. I
Universität Frankfurt
• Aufteilung des Bildes in Quadrate mit Kantenlänge 2n
• Exakte Berechnung des Pixels in linken unteren Ecke
• Zuweisung dieses Farbwert an alle Pixel des Quadrats
• Aufteilung in 4 Subquadrate
• Berechnung der Pixelwerte nach angegebenem Verfahren
Bildkohärenznach Bronsvoort et al. II
Universität Frankfurt
AB
A
B
B
AC
C
C
x3 x2
x1 x4
Bildkohärenznach Bronsvoort et al. III
Universität Frankfurt
- die Werte von X1 bleiben unverändert,
- falls die Werte eines der mit A bezeichneten Quadrate um mehr als eineneinstellbaren Schwellwert von den Werten von X1 abweicht, wird die linkeuntere Ecke von X2 neu berechnet und dieser Wert allen Pixeln von X2 zugewiesen,
- falls die Werte eines der mit B bezeichneten Quadrate um mehr als eineneinstellbaren Schwellwert von den Werten von X1 abweicht, wird die linke untereEcke von X3 neu berechnet und dieser Wert allen Pixeln von X3 zugewiesen,
- falls die Werte eines der mit C bezeichneten Quadrate um mehr als eineneinstellbaren Schwellwert von den Werten von X1 abweicht, wird die linke untereEcke von X4 neu berechnet und dieser Wert allen Pixeln von X4 zugewiesen.
Bildkohärenznach Bronsvoort et al. IV
Universität Frankfurt
- Verfahren schreitet von links nach rechts und von unten nach oben fort.
- Verfahren endet, wenn vorgegebene Pixelquadratgröße erreicht ist.
- Bei Anfangsgröße von 8x8 Pixeln ist eine Einsparung von bis zu 80 %erreichbar.
- Feine Details werden ignoriert.
- Wegen Bildqualität, Einsatz nur im Previewing angebracht.
Bildkohärenzitem buffer I
Universität Frankfurt
1.) Szene wird in die Rendering-Pipeline des Polygon-Renderings eingespeist.Berechnung nur bis zu einer “groben Auflösung”.
2.) Aufstellung der Liste (item buffer) von Objekten, die im “Pixel” sichtbar sind.
3.) Raytracing nur mit den Objekten, die im item buffer aufgezählt sind.
Bildkohärenzitem buffer II
Universität Frankfurt
• polygon-basiertes Verfahren.
• in der Mehrzahl der Fälle besteht der item buffer nur aus sehr wenigenObjekten.
• Beschleunigung abhängig vom Verhältnis Primär- zu Sekundärstrahlen.
• Es wird von Beschleunigungen von 10% bis zu 30% berichtet [WEG84].
Objekt-Kohärenz
Universität Frankfurt
Verfahren:
• Hüll-Körper (bounding volumes) und Hüll-Körper-Hierarchien
• Unterteilung des Objektraums (spatial subdivision)
Hüllkörper I
Universität Frankfurt
Älteste Beschleunigungsmethode
Idee:
• Schneide Strahl mit Hülle.• Wenn Test positiv, schneide gegen komplexen Inhalt.
Hüllkörper II
Universität Frankfurt
Forderung:
• Hüllkörper muss Objekt vollständig umschließen.
• Hüllkörper muss Objekt möglichst eng umschließen.
• Schnittberechnung für die Hülle muss weniger aufwendig sein als fürihren Inhalt.
Einfache Hüllkörper
Universität Frankfurt
Komplexe Hüllkörper
Universität Frankfurt
HüllkörperKostenabschätzung
Universität Frankfurt
T gesamter Aufwand für Schnittberechnung
B Berechnungsaufwand für Schnitt mit Hüllkörper
I Berechnungsaufwand Schnitt gegen Inneres
b Anzahl Strahlen für Test mit Hüllkörper
i Anzahl Strahlen, die gegen Inneres getestet werden (i≤b)
T=b*B + i*I
Hüllkörper-Hierarchien I
Universität Frankfurt
Idee:
- Fasse zusammliegende Körper bzw. ihre Hüllenzusammen und umschließe sie mit einem Hüllkörper.
- Fasse díe resultierenden Hüllkörper wieder zusammen.
- Baumstruktur
Hüllkörper-Hierarchien II
Universität Frankfurt
Forderungen:
- Nur Objekte, die nah beieinanderliegen, sollen zusammengefaßt werden.
- Die Oberfläche der Hülle eines jeden Knotens der Hierarchie soll minimal sein. Denn die Oberfläche eines Hüllkörpers ist ein Maß für Wahrscheinlichkeit, daß ervon einem Strahl getroffen wird.
- Die Summe der Oberflächen aller Knoten soll minimal sein.
- Je näher die Knoten an der Wurzel liegen, um so sorgfältiger müssen siekonstruiert werden. Wird ein Knoten, der weit oben in der Hierarchie liegt, nichtvom Strahl getroffen, kann ein tiefer Teilbaum vom weiteren Test ausgeschlossenwerden.
- Die Zeit, die zum Aufbau der Hierarchie benötigt, muß geringer sein, als die Zeit, die man beim späteren Rendering-Prozeß wieder einspart.
Hüllkörper-Hierarchien III
Universität Frankfurt
Wahl der Hierarchie:
• Modellierungs-Hierarchie
• CSG-Baum
• Median-Cut-Verfahren
Priority-Queue I
Universität Frankfurt
procedure p_queue_traversal(Strahl, P-Queue)begin
while heap nicht leer do beginEntnimm Kandidaten aus der P-Queue
if Kandidat ein Primitive-Objekt then break;
else for jeden Sohn des Kandidaten do begin
Berechne Schnittpunkt mit Strahl;Ordne Objekt gemäß Distanz vom Strahlursprungzum Schnittpunkt in die P-Queue ein;
end for;end while;
end
Priority-Queue II
Universität Frankfurt
Achtung:
Priority-Queue III Ergebnisse
Universität Frankfurt
Raumteilungs-Verfahren
Universität Frankfurt
Idee der Hüllkörper-Hierarchie:
• schnelle Aussortierung aller Objekte, die nicht getroffenwerden.
Idee der Raum-Teilungsverfahren:
• Berechne Schnittpunkt nur noch mit nächstem Objekt.
• Durchsuche dazu Teilraum, der den Strahl möglichsteng umschließt.
• Zerlege dazu in Raum der Szene in disjunkte Voxel(volume elements).
Nicht-reguläre Raumteilung
Universität Frankfurt
Bearbeitete Voxel
Getestete Objekte
Octree-Verfahren Inach Glassner
Universität Frankfurt
441 42
43 44
45
46
48
1 2
3 4
56
8
Octree-Verfahren II
Universität Frankfurt
Information im Knoten:
• Ausmaß des Quader
• Koordinaten des Mittelpunktes
• Flag, ob Knoten Blatt ist.
• Zeiger auf 1. Kind (Kinder werden in verketteter Liste abgespeichert)oder auf Liste von Objekten.
Speicherung der Knoten mittels Hash-Funktion:
h=(Knoten-Nummer div 10) mod Hash-Tabellen-Länge
Octree-Verfahren III
Universität Frankfurt
P P`
P`
P P
P`
Octree-Verfahren IV
Universität Frankfurt
procedure findnode ( x, y, z)begin
node := 1;while node_subdivided do
if x > node_center_x thenif y > node_center_y then
if z > node_center_z thennode := node * 10 + 6;
elsenode := node * 10 + 2;
elseif z > node_center_z then
node := node * 10 + 8;else
node := node * 10 + 4;else
if y > node_center_y thenif z > node_center_z then
node := node * 10 + 5;else
node := node * 10 + 1;else
if z > node_center_z thennode := node * 10 + 7;
elsenode := node * 10 + 3;
end whileend
Octree-Verfahren VErgebnis
Universität Frankfurt
1. Zeit zur Generierung der Octree-Struktur ist gering im Vergleich zur Renderingzeit.
2. Beschleunigungsfaktoren zwischen 4 bis 30 im Vergleich zur brute-force-Methode
Reguläre Raumaufteilung
Universität Frankfurt
Bearbeitete Voxel
Getestete Objekte
Reguläre Raumaufteilungnach Fujimoto et al.
Universität Frankfurt
1. Die Aufteilung der Voxel ist völlig unabhängig von der Struktur der Szene.
2. Die Voxel, die ein Strahl durchläuft können durch einfache, inkrementelle Verfahren sehr effizient aufgezählt werden.
Voxel-Traversierung I
Universität Frankfurt
Voxel (i,j)
tx i
txi+1 (i,j)
= te
Voxel (i+1,j)
(i+1,j)
tyj
ty j+1
= ta
= te(i,j)
Voxel-Traversierung II
Universität Frankfurt
txi+1 - txi = ∆tx = const.tyj+1 - tyj = ∆ty = const.tzk+1 - tzk = ∆tz = const.
[te, ta] = [txi, txi + ∆ tx] ∩[tyj, tyj + ∆ ty] ∩ [tzk, tzk + ∆ tz]
te = max (txi, tyj, tzk) < min (txi + ∆ tx, tyj + ∆ ty, tzk + ∆ tz) = ta
Voxel-Traversierung III
Universität Frankfurt
beginif tx < ty then
if tx < tz thenbegintx := tx + ∆tx;vx := vx + sign (ux);end
elsebegintz := tz + ∆ tz;vz := vz + sign (uz);end
elseif ty < tz then
beginty := ty + ∆ ty;vy := vy + sign (uy);
endelse
begintz := tz + ∆ tz;vz := vz + sign (uz);end
end;
Raumaufteilung2 Caveat
Universität Frankfurt
AB
C
1 2 3 4 5
�Mailbox-Verfahren
Voxel-TraversierungErgebnisse I
Universität Frankfurt
Turm bestehend aus 12 CSG-Primitiven,Well bestehend aus 78 CSG-Primitiven,Pinwheel bestehend aus 26 CSG-Primitiven,64 Türme bestehend aus 768 CSG-Primitiven
126,1597,6565,5651,1534,3326,18<0,0164 Türme
156,9895,6350,0523,098,481,71<0,01Turm
106,6865,6138,1720,388,583,01<0,01Well
37,9124,2812,977,523,261,13<0,01Pinwheel
44,8925,8913,665,831,840,25<0,01Kugel
302520151051
Anzahl der Voxel pro AchseSzene
Initialisierungszeiten (in sec.)
Voxel-TraversierungErgebnisse II
Universität Frankfurt
Turm bestehend aus 12 CSG-Primitiven,Well bestehend aus 78 CSG-Primitiven,Pinwheel bestehend aus 26 CSG-Primitiven,64 Türme bestehend aus 768 CSG-Primitiven
Rendering-Zeiten (in sec.)
418,81435,48462,48516,57600,52908,207200-10800
64 Türme
517,39531,06551,58555,33579,76694,51Turm
515,83497,49495,25548,76587,89712,00Well
391,44385,15378,23373,82376,54430,23Pinwheel
427,56419,11416,08409,96418,60417,85384,17Kugel
302520151051
Anzahl der Voxel pro AchseSzene
Ray Coherence
Universität Frankfurt
Idee:
Benachbarte Strahlen treffen mit großer Wahrscheinlichkeit dieselben Objekte.
Identifiziere die Orte (Objekte), an denen Strahlen ausgesandt werden.
Dann sortiere Kandidaten für den Schnitt mit Bezug auf die auftretenden Strahl-Richtungen.
Direction Cube
Universität Frankfurt
z
y
x