Special Effects

von

Hanna Kraeusel

Seminar Computergrafik II

Dozent: Olaf Müller

WS 02/03

Gehalten am 08.01.2003

 

 

 

 

 

Inhaltsverzeichnis:

 

1.      Partikelsysteme

 

2.      Motion Blur

 

3.      Tiefenschärfe

 

4.      Lens Flares

 

5.      Antialiasing

 

6.      Anhang
6.1  Alpha-Daten
6.2 
Accumulation Buffer
6.3  screen-aligned Billboards

 

 

 

1.      Partikelsysteme/Partikelanimation

 

Die Partikelanimation ist ein beliebtes Werkzeug und eine klassische Technik. Vorreiter auf diesem Gebiet war Reeves. 1983 veröffentlichte er eine Beschreibung zur Verwirklichung von Partikelmengen um  „verschwommene“ Objekte zu modellieren. Partikelsysteme werden genutzt um z.B. Rauch (Abbildugng 1.1), Wassertropfen die von einem Wasserfall sprühen oder ein Feuerwerk (siehe Abbildung 1.2) darzustellen.

Diese Technik ist keine Form der Renderns, sondern eine Art der Animation.

 

Abbildung 1.1

 

In der einfachsten Form besteht ein Partikelsystem aus einzelnen Punkten, deren geometrische Ausdehnung beliebig klein sein kann. Den Punkten können bestimmte feste Eigenschaften zugeordnet werden, z.B. Farbe.

Die dargestellten Wolkengebilde sollen wachsen, schrumpfen, sich bewegen und ihre Form verändern können. Da es aber meist Zehn- oder Hunderttausend von Partikeln in einem System gibt ist natürlich kein individuelles Skript für jedes Partikel möglich. Es wird daher ein allgemeines Skript mit integriertem Zufallsverhalten der Partikel erstellt.

Abbildung 1.2

 

Die Positionen der  Partikel können auf der Basis jedes beliebigen Algorithmus geändert werden. Wenn z.B. Rauch dargestellt werden soll kann man die Partikel zufällig bewegen um Brown’sche Bewegung zu simulieren.

Nach Reeves ist die Bilderzeugung ein Prozess mit fünf Schritten:

1. Neue Partikel erzeugen und einbringen

2. Den Partikeln ihre individuellen Eigenschaften zuweisen

3. Am Ende ihrer Lebensdauer die Partikel löschen

4. Aktuelle Partikel bewegen

5. Aktuelle Partikel rendern.

Die Population der Partikel kann man mit stochastischen Prozessen oder Skripten steuern. Die Anzahl der Partikel, die zum Zeitpunkt t erzeugt werden, kann z.B. sein:

N(t) = M(t) + rand(r)V(t).

Wobei M(t) der Mittelwert der Partikel ist, die durch eine Zufallsvariable der Varianz V gestört werden. Die Zeitabhängigkeit kann genutzt werden, um das Gesamtwachstum zu steuern. Die Anzahl der Partikel muss nicht linear zeitabhängig sein, die Steuerung kann auch quadratische, kubische oder sogar stochastische Variationen einschließen. Die Populationsgröße kann aber auch von der Bildschirmgröße des Objekts abhängen.

Das individuelle Partikelskripting basiert auf folgenden Eigenschaften:

1.      Anfangsposition

2.      Anfangsgeschwindigkeit und Richtung

3.      Anfangsgröße

4.      Anfängliche Transparenz

5.      Form

6.      Lebensdauer.

Mit beiden Skripten, dem für die Population und dem für die Eigenschaften, ist eine bestimmte „Erzeugungsform“ verbunden, ein geometrischer Bereich in dem alle neuen Partikel erscheinen. Bei einem explodierenden Feuerwerk könnte er z.B. kugelförmig sein. Das letztendlich Aussehen des Systems wird vom Gesamteffekt bestimmt.

Partikelsysteme deren Partikel Punkte sind können einen eingeschränkten visuellen Effekt haben. Als Erweiterung der Technik ist es möglich die Partikel als kurze Linien darzustellen, deren Endpunkten Vertex Farben zugeordnet sind. Sinnvoll wäre das bei unserem Feuerwerk-Beispiel. Die Funken werden als Linien dargestellt. An einem Ende ist die Linie heller rot als am anderen und die Farben verändern sich während der Funke verglüht.

Die Darstellung durch Linien kann den Effekt verbessern, aber diese Verbesserung kann in manchen Fällen noch nicht ausreichen. Eine andere Lösung ist die Partikel als Quadrate mit aufgelegter Textur darzustellen. Die Quadrate werden parallel zum Bildschirm ausgerichtet. Die Eigenschaften der Partikel sind die Farbe, der Normalenvektor und die Textur. Sie werden als 2 Dreiecke gerendert.

Die Textur hat fast immer einen Alpha-Kanal, der die Transparenz bestimmt. Ein rundes Partikel kann z.B. eine Textur haben mit einem Kreis in der Mitte und der Rest der Textur ist durchsichtig.

1985 haben Reeves und Blau das Partikelsystem weiterentwickelt um feste Grundkörper mit konstanten Formen zu modellieren, wie z.B. Grashalme.

Abbildung 1.3 Feuerwall im Film „Star Trek II: Der Zorn des Kahn“ aus Partikeln

 

zurück

 

2.     Motion Blur

 

Im Film kommt Motion Blur zustande, wenn sich ein Objekt während eines Frames sehr schnell über den Bildschirm bewegt. Es verschwimmt, da die Kamera die schnelle Bewegung nicht aufnehmen kann. Dies ist bei fast jedem Film oder im Fernsehen der Fall. Meist so gering, dass es gar nicht bewusst wahrgenommen wird. Es fällt nur die Abwesenheit dieser Verschwimmung auf. Deswegen wird dieser Effekt auch in der Computergrafik angewandt. Die Szene wirkt realistischer, wenn z.B. ein Objekt, dass sich von links nach rechts bewegt horizontal verschwimmt (siehe Abbildung 2.2).

Abbildung 2.1                                                 Abbildung 2.2

 

Man kann Motion Blur auf verschiedene Art und Weise realisieren. Es kann direkt modelliert und gerendert werden. Man stelle sich z.B. ein Schwert vor, das vor dem Betrachter geschwungen wird. Vor und hinter der Klinge werden zwei Polygone an die Kanten gelegt. Diese Polygonge haben einen Alpha-Kanal pro Vertex. An der Stelle an der sich die Polygone und die Klinge treffen sind die Vertices völlig opak, bis außen werden sie immer transparenter bis sie ganz außen völlig transparent sind. Dies ist eine Vereinfachung. Die Idee ist, dass ein Modell eine bestimmt Transparenz besitzt um die Verschwimmung in Bewegungsrichtung darzustellen.

Eine andere Möglichkeit Motion Blur darzustellen ist mit Hilfe des Accumulation Buffer. Er wird wie folgt genutzt. Ein Objekt wird zu verschiedenen Positionen bewegt, die es während einer Szene annimmt und im Accumulation Buffer gerendert. Dies ergibt ein verschwommenes Bild, da die verschiedenen Positionen des Objekts vermischt werden.

Bei real-time Rendering ist diese Methode nicht sonderlich geeignet, außer wenn extra Prozessorleistung vorhanden ist.  Der Accumulation Buffer kann aber auch billiger genutzt werden. Acht Frames eines bewegten Objekts werden erstellt und in den Buffer geschrieben. Beim neunten Frame wird alles noch einmal gerendert und akkumuliert. Das erste Bild wird aber gleichzeitig auch noch einmal gerendert und aus dem Buffer entfernt. Jetzt sind Frame zwei bis neun im Accumulation Buffer, also wieder acht Frames. Danach sind Frame drei bis zehn im Buffer und so weiter. Dies bedeutet, dass für das Motion Blur jeder Frame nur zwei Mal gerendert wird.

Auch Partikelsysteme mit Motion Blur können einfach gerendert werden. Dabei werden nicht Color Buffer und z-Buffer, sondern nur der z-Buffer geleert.

Mit Hilfe eines Rechtecks, das über das ganze Fenster gelegt wird und mit RGBA Werten (=(0, 0, 0, alpha)) gefüllt wird, kann man durch den Alpha-Wert kontrollieren wie schnell der Verschwimmungspfad verschwindet.

Man kann Motion Blur auch simulieren, um die Performanz zu verbessern, indem man den derzeitigen Frame mit seinem Vorgänger vermischt. Dies ergibt aber keine „richtiges“ Motion Blur und das kann man auch sehen (siehe Abbildung 2.3).

„richtiges“ Motion Blur               Abbildung 2.3              „falsches“ Motion Blur

 

Man kann auch ein „bisschen“ Motion Blur zu einer Szene hinzufügen, indem man z.B. Funken, Wasser in einem Wasserfall, oder Schüsse als Linien rendert oder für Autoräder je nach Geschwindigkeit verschiedene Texturen nutzt, bei hoher Geschwindigkeit stark verschwommene und bei niedriger Geschwindigkeit Texturen mit mehr Details.

 

zurück

 

3.     Tiefenschärfe (Depth of Field)

 

Der Tiefenschärfe Effekt wird oft bei der Fotografie und im Film als Stil-Element genutzt. Das bedeutet, dass die Objekte im Fokusbereich scharf sind und je  weiter Objekte von diesem Bereich entfernt sind, desto unschärfer werden sie (siehe Abbildung 3.1).

Auch für diesen Effekt kann man den Accumulation Buffer nutzen. Man akkumuliert verschiedene Bilder mit leicht veränderter Sicht und gleichem Fokus. Der Betrachter ändert seine Position immer ein kleines bisschen.

In Abbildung 3.1 wurde die Szene ohne Tiefenschärfe 24-mal gerendert, immer mit einem leicht veränderten Point of View und leicht veränderter Viewing Direction. Dann wurden die Bilder mit dem Accumulation Buffer gemischt.

Bei Rendering-Systemen mit Layern kann der Effekt durch bestimmte verschwommene Layer mit Hilfe von Image Processing Techniken herbeigeführt werden.

            Ohne Tiefenschärfe                   Abbildung 3.1                    Mit Tiefenschärfe

 

zurück

 

4.     Lens Flares

 

Lens Flares bestehen aus ringförmigen Bereichen hellen Lichts, die ungefähr auf einer Linie liegen, und aus einem sternförmigen Gebilde (der ciliary corona). Diese Korona besteht aus langen Strahlen, die von der Lichtquelle ausgehen, mit einem Ring darum.

Sie treten auf, wenn die Linse einer Kamera in die Nähe eines hellen Lichts gerichtet wird (siehe Abbildung 4.1, „echte“ Lens Flares).

 

Abbildung 4.1

 

Die Ringe entstehen, weil das Linsenmaterial Lichtstrahlen unterschiedlicher Wellenlänge unterschiedlich bricht (wie ein Prisma). Der Ring um das Licht ist außen rot und innen violett getönt (siehe Abbildung 4.3). Die Korona entsteht durch Dichte-Fluktuationen in der Linse.

Man dachte erst dieser Effekt würde nicht häufig eingesetzt werden, heute wird er sogar zu echten Fotos hinzugefügt (früher wurde er vermieden), um den Effekt der Fotos zu verbessern. Lens Flares sind schon fast zu einer Art Klischee geworden, so häufig werden sie genutzt. Wenn sie aber korrekt genutzt werden, kann man eine Szene für den Betrachter wirklich verbessern.

Um Lens Flares zu einer Szene hinzuzufügen, werden Texturen (siehe Abbildung 4.2) für die einzelnen Komponenten gemacht bzw. besorgt.

 

Abbildung 4.2

 

Jede Textur wird auf ein Quadrat gelegt. Die Textur wird als eine Alpha-Map behandelt. Den Quadraten werden Farben hinzugefügt (rot, grün, blau), um den Prisma-Effekt darzustellen. Die Quadrate werden verschmolzen, dabei werden die Farben additiv gemischt und es entstehen neue Farben.

Einen noch besseren Effekt kann man erreichen indem die Korona animiert wird, dadurch bekommt man den Eindruck sie funkelt und es wirkt realer. Die Quadrate mit den Texturen werden als so genannte screen-aligned Billboards platziert.

 

Abbildung 4.3

 

zurück

 

5.     Antialiasing

 

In der Computergrafik will man Pixelwerte finden, die den zugrunde liegenden Repräsentationen am nächsten kommen. Ein erster Ansatz ist, die Szene durch ein Gitternetz (grid) darzustellen. (Es besteht ein Unterschied zwischen einem Pixel und einer Gitterzelle, die Gitterzelle ist ein geometrischer Bereich um ein Pixel.) Finde  das, was in der Mitte jeder Zelle gilt, und berechne die Farbe für die Zelle.

Die Polygone erscheinen in den Pixeln entweder als da oder nicht da. Wenn sie bewegt sind, sind die Pixel entweder an oder aus. Dadurch sehen die Kanten gezackt aus. Dies wird Aliasing genannt. Antialiasing ist eine Technik mit der man dem entgegenwirkt. Die Problemfelder sind Polygonkanten Aliasing, Textur Aliasing und Linien Aliasing. Linien Aliasing ist eigentlich am einfachsten zu beheben. Manche Hardware Systeme unterstützen das direkt. Eine Möglichkeit ist die Linien als ein Pixel große Vierecke zu behandeln, die mit dem Hintergrund verschwimmen. Eine andere ist die Linien als unendlich dünn, durchscheinend und glühend zu betrachten und eine dritte Möglichkeit ist sie als Textur zu rendern.

Eine Methode um Antialiasing zu einer Szene hinzuzufügen ist Supersampling. Sampling bedeutet Abtastung. Der Ansatz ist wie der oben beschriebene naive. Nur eine Abtastung pro Gitterzelle ist aber zu wenig, deshalb werden mehrere Proben pro Zelle genommen und deren Farbwerte gemittelt. Es gibt drei Wege um höhere Samplingraten zu implementieren:

1. Das einfachste Konzept ist die Szene in einem separaten Buffer mit höherer Auflösung zu rendern (siehe Abbildung 5.1). Wenn der Buffer in jeder Dimension zwei Mal größer ist, dann erreicht man 2x2 oder 4x Antialiasing. Wir stellen uns vor das Bild wird in kleine Quadrate unterteilt. Vier benachbarte Samples (bei 2x Antialiasing zwei benachbarte) werden gemittelt und die entstehende Farbe wird den entsprechenden Pixeln im Frame Buffer zugeordnet. Dies ist natürlich langsamer als das pro Pixel sampling.

 

 

Abbildung 5.1

 

Diese Methode kann verfeinert werden, indem man innerhalb eines Polygons den Zellen nur eine bestimmt Farbe zuweist, damit die Texturen nicht verschwimmen (siehe Abbildung 5.1 unten, das „F“ hat keine verschwommene Kanten).

2. Eine andere Möglichkeit ist den Accumulation Buffer zur Hilfe zu nehmen. Um 2x2 Sampling zu bekommen werden vier Bilder generiert. Die Sicht ist dabei von Bild zu Bild um ein halbes Pixel in x- oder y-Richtung geändert, je nachdem was gebraucht wird. Jedes Bild steht also für eine andere Sample Position. Die Bilder werden nun gemittelt und auf dem Bildschirm ausgegeben. Dies ist eine für real-time Rendering Systeme teure Methode, weil eine Szene mehrmals gerendert werden muss.

3. Die dritte Methode ist Carpenter´s A-Buffer zu verwenden. Dies wird auch Multisampling genannt. Diese Methode wird für high-qualtity Renderings genutzt.  Jedes Polygon, das gerendert wird macht eine Coverage Mask für jede Gitterzelle, die es ganz oder nur teilweise bedeckt (Beispiel für ein Coverage Mask in Abbildung 5.2). Als Schattierung des Polygons, das der Maske zugeordnet ist, wird die Schattierung in der Mitte der Zelle genommen. Auch die z-Tiefe wird in der Mitte der Zelle ermittelt. Die Maske, die Schattierung und die z-Tiefe bilden ein Fragment. Eine Gitterzelle kann beliebig viele Fragmente haben.

 

 

 

Abbildung 5.2. Die Ecke eines Polygons bedeckt teilweise eine Gitterzelle. Die Gitterzelle ist in ein 4x4 Gitter unterteilt und die Zellen, die größtenteils bedeckt sind, sind mit einer eins markiert.

 

 

Die Fragmente werden beim Aufsammeln aussortiert. Das bedeutet sie werden nach der z-Tiefe sortiert und alle die von undurchsichtigen Fragmenten derselben Gitterzelle ganz verdeckt werden, werden entfernt.

Wenn alle Polygone in den A-Buffer geschickt wurden, wird die Farbe berechnet: zu wie viel Prozent das Fragment sichtbar ist wird mit der Farbe des Fragments multipliziert und die Ergebnisse der Zelle werden anschließend summiert.

Diese Methode benötigt weniger Speicher, als die erste und weniger Durchläufe als die Methode mit dem Accumulation Buffer. Es wird weniger Prozessorleistung gebraucht. Aber die Coverage Mask ist zu groß, selbst bei 8x8 (64 Bits) kann das Aliasing bei fast horizontalen oder vertikalen Kanten noch beobachtet werden.

Eine andere Einschränkung ist das Box Filter System, das hier genutzt wird (beim kombinieren der Samples). Die Samples haben keinen Effekt auf die benachbarten Pixel, was sie aber um das Gesamtbild zu verbessern eigentlich haben sollten. Dieses System wird der Einfachheit halber genutzt.

Eine andere verwandte Antialiasing Methode ist das Stochastic Sampling, bei dem die Samples zufällig über ein Pixel verteilt sind (nicht machbar in real-time).              Möglichtkeiten auf der Applikations-Ebene Antialiasing zu gewähren sind Edge und Full-Scene Antialiasing. Beim Edge Antialiasing gibt es zwei Durchläufe. Erst werden die Kanten normal gezeichnet und danach werden geeignete Kanten (also die an den Übergängen zu verschiedenen Gebieten) als verschwommenen Linien gezeichnet. Das Problem dabei ist, dass die Applikation die geeigneten Kanten finden muss, was sehr aufwändig ist.

Beim Full-Scene Antialiasing ist nur ein Daten-Durchlauf nötig, aber vorher müssen die Polygone von hinten nach vorne sortiert werden. Das Aliasing an den Kanten wird dann „on the fly“ durch die Hardware behoben.

 

No Antialiasing                                  GeForce3 2x AntiAliasing               GeForce3 4x AntiAliasing

 

Abbildung 5.3

 

 

zurück

 

6.     Anhang

 

6.1             Alpha-Daten

Jedes Pixel eines Renderings mit Alpha-Daten hat neben dem RGB-Wert für die Farbe auch einen Wert, der etwas über die Durchsichtigkeit des Pixel aussagt. Dieser ist der Alpha-Wert. Diese Werte summieren sich zu Alpha-Daten. Ist im Rendering ein durchsichtiges Modell, werden die Pixel, die das Modell abbilden, hohe Alpha-Werte haben. Je höher der Alpha-Wert, desto transparenter ist diese Stelle. Will man das Bild zum Überlagern eines anderen Bildes verwenden, wird das überlagerte Bild an der Stelle durchscheinen, wo das durchsichtige Modell steht. Ein Truecolor-Bild (24-Bit) mit einem Alpha-Kanal wird in einem 32-Bit-Format gespeichert. Der Alpha-Kanal ist Voraussetzung für Überblendeffekte. Das Alpha-Blending erlaubt, Bilder über den Alpha-Kanal mit Transparenz zu versehen, um Überblendeffekte zu erzeugen.

 

 

6.2            Accumulation Buffer

Der Accumulation Buffer wird gebraucht um eine Reihe von Bildern zu mitteln bzw. zu vermischen. Er hat wie der Color-Buffer RGBA Farbwerte. Man schreibt nicht direkt in den Accumulation Buffer. Eine Reihe von Bildern wird im Color Buffer erzeugt und sie werden dann im Accumulation Buffer „angehäuft“ (accumulated). Wenn dies abgeschlossen ist wird das Ergebnis zurück in den Color Buffer geschrieben und ausgegeben. Um Rundungsfehler zu vermeiden hat der Accumulation Buffer meist eine höhere Präzision als der Color Buffer. Typischerweise hat er doppelt so viele Bits und dieselbe Auflösung.

 

 

6.3            Screen-aligned Billboards

Billboarding ist das orientieren der Polygone basierend auf der View Direction (siehe Abbildung 6.3.1). Screen-aligned bedeutet, dass das Billboard dem Betrachter zugewandt ist, also die Oberflächen-Normale die Negation der View Direction ist. Wenn sich die Sicht ändert, ändert sich die Ausrichtung der Polygone. Der negative View Direction Vektor -vdir und die Normale des Billboards n werden angeglichen. Dies wird bewerkstelligt, indem man das Billboard so rotiert, dass n in die Richtung des Betrachters zeigt. Das Billboard wird dabei um die Achse gedreht, die aus dem Kreuzprodukt von vdir und n entsteht, bis die Position erreicht ist. Billboards, die nicht für Lens Flares gedacht sind, müssen dann noch „richtig rum“ gedreht werden, d.h. so gedreht werden dass oben wirklich oben ist, aber bei Lens Flares gibt es kein oben und unten.

 

 

Billboard node figure

Abbildung 6.3.1

 

Dieselbe Rotation kann für alle Billboards von demselben Typ in einer Szene angewandt werden. Jedes Quadrat wird typischerweise mit dem Mittelpunkt am Ursprung starten, es wird rotiert und dann werden alle zu ihrer endgültigen 3-D-Position verschoben.

Billboards in Verbindung mit Alpha-Texturing und Animation können viele Objekte ohne feste Oberfläche darstellen, z.B. Rauch, Feuer, Explosionen, Dunstschwaden, Wolken, Bäume, …. Auch Effekte wie beamen und elektrische Schilde können dargestellt werden. Außerdem kann man mit Billboards auch dafür sorgen, dass Text immer aufrecht stehend angezeigt wird. Daher kommt auch der Name, „Billboard“ bedeuetet so etwas wie Anschlagbrett oder Reklamefläche.

 

 

  

zurück