Computergrafik

Verdeckung
Motivation: Warum Verdeckung?
- Zentraler Tiefenhinweis für die menschliche Wahrnehmung
- Objekte im Vordergrund verdecken Hintergründe
- Verletzung dieses Prinzips führt zu unrealistischen 3D-Szenen
- Render-Reihenfolge allein genügt nicht
Motivation
Bild: Vierge Marie
Maler-Algorithmus (Painter's Algorithm)
Grundidee: Zeichnen von hinten nach vorne.
- Sortiere Objekte nach Kameraentfernung.
- Zeichne entferntestes Objekt zuerst.
- Zeichne nähere Objekte darüber.
Bild: Zapyon
Grenzen: Maler-Algorithmus
Problem:
- A liegt teilweise vor B.
- B liegt teilweise vor C.
- C liegt teilweise vor A.
Bild: Zapyon
- Maler-Algorithmus setzt voraus, dass man Polygone nach ihrer Tiefe sortieren kann
- Bei zyklischer Überdeckung funktioniert das nicht:
- Zeichnest du A zuerst, verdeckt C später einen Teil von A korrekt, aber B wird falsch dargestellt
- Zeichnest du B zuerst, entsteht ein anderer Fehler.
- Egal welche Reihenfolge gewählt wird, mindestens ein Bereich wird falsch übermalt
Z-Buffer-Algorithmus (Prinzip)
- Tiefenspeicherung pro Pixel statt Sortierung
- Zusätzlicher Depth Buffer speichert z-Werte (=Tiefenwerte)
- Sichtbar bleibt immer das Fragment mit der geringsten Tiefe
Bild: Zeus
Z-Buffer-Algorithmus (Pseudocode)
- Initialisiere den z-Buffer auf Maximalwert für jedes Pixel
- Für alle Objekte (Polygone*)
- Für alle Pixel eines Objekts
- Berechne Abstand vom Augenpunkt zum Pixel (Objekt)
- Vergleiche berechneten Abstand mit Wert im z-Buffer
- Falls ( Abstand < gespeicherter Wert):
- trage die neuen Farbwerte in Farbspeicher und den neuen z-Wert in den z-Buffer für dieses Pixel
→ Objekt ist näher
- trage die neuen Farbwerte in Farbspeicher und den neuen z-Wert in den z-Buffer für dieses Pixel
- Andernfalls:
- ändere nichts → Objekt ist verdeckt
- Falls ( Abstand < gespeicherter Wert):
- Für alle Pixel eines Objekts
* Der Z-Buffer-Algorithmus kann auch andere Objekte verarbeiten
Z-Buffer-Algorithmus (Beispiel)
Bild: Gemeinfrei
Maler- vs. Z-Buffer-Algorithmus
Bild: A. Nischwitz

Maler
Maler
z-Buffer
Z-Buffer-Algorithmus (Grenzen)
Z-Fighting: Begrenzte Auflösung führt zu Flimmern bei nah beieinander liegenden Flächen
→ Lösung: Subpixel-Antialiasing
Transparente Objekte: Reiner Tiefentest versagt, da Beiträge mehrerer Ebenen kombiniert werden müssen
→ hier brauchen wir noch andere Algorithmen
Weitere Verfahren
Backface Culling
Verwirft Flächen, die von der Kamera weg zeigen.
BSP-Bäume
Rekursive Raumzerlegung für statische Szenen.
Scanline
Zeilenweise Berechnung der Sichtbarkeit.
Dieses werden wir hier nicht weiter betrachten.
Scanline
Zeilenweise Berechnung der Sichtbarkeit.
Raytracing
Raytracing (Grundprinzip)
Anstatt Polygone auf den Bildschirm zu projizieren (Rasterisierung), verfolgt Raytracing den Weg des Lichts umgekehrt:
- Aussendung: Strahlen werden von der Kamera durch jedes Pixel gesendet
- Schnittprüfung: Der Strahl wird mit allen Objekten in der Szene geschnitten
- Sichtbarkeit: Der am nächsten liegende Schnittpunkt bestimmt sichtbares Objekt
Raytracing-Algorithmus (Pseudocode)
Für jedes Pixel (x, y) der Bildebene:
Generiere einen Primärstrahl vom Augpunkt durch (x, y)
Setze t_min = Unendlich
Setze Treffer_Objekt = Null
Für jedes Objekt in der Szene:
Berechne Schnittpunkt t mit dem Strahl
Wenn (t > 0) UND (t < t_min):
t_min = t
Treffer_Objekt = Aktuelles_Objekt
Wenn Treffer_Objekt != Null:
Farbe(x, y) = BerechneBeleuchtung(Treffer_Objekt, t_min)
Sonst:
Farbe(x, y) = Hintergrundfarbez-Buffer vs. Raytracing
| Eigenschaft | Z-Buffer | Raytracing |
|---|---|---|
| Komplexität | O(P) - skaliert mit Pixeln | O(P * log n) - skaliert mit Strahlen & Objekten |
| Verdeckung | Pixelweise via Tiefentest | Implizit via Schnittprüfung |
| Schatten | Zusatzverfahren (Shadow Maps) |
Natürlich via Schattenstrahlen |
| Hardware | Optimiert für GPUs (Standard) |
Rechenintensiv (Echtzeit erst kürzlich) |
P - Anzahl Pixel (Bildschirm)
n - Anzahl Objekte
✅ Zusammenfassung
- Herausforderungen:
- Überlappende & sich schneidende Objekte
- Dynamische Szenen (Kamerabewegung)
- Maler-Algorithmus scheitert bei zyklischer
(gegenseitiger Überdeckung) - z-Buffer-Algorithmus sehr effektiv → Tiefentest
- Ray-Tracing ist teuer, aber sehr genau → Schnittprüfung
Nicht die Zeichenreihenfolge entscheidet über die Sichtbarkeit, sondern die geringste Tiefe pro Pixel.
CG7 Verdeckung
By blackbill
CG7 Verdeckung
- 15