28.10.2013 Aufrufe

3D-Computergrafik Heute Motivation Wie geht das ? 3D - Szene

3D-Computergrafik Heute Motivation Wie geht das ? 3D - Szene

3D-Computergrafik Heute Motivation Wie geht das ? 3D - Szene

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>3D</strong>-<strong>Computergrafik</strong><br />

Thomas Jung<br />

t.jung@fhtw-berlin.de<br />

<strong>Motivation</strong><br />

Theoretisches Fundament für die <strong>3D</strong>-<br />

<strong>Computergrafik</strong><br />

Voraussetzung für <strong>das</strong> Verständnis<br />

der Vorlesungen zu <strong>3D</strong>-Modellierung<br />

und für die letzte Belegaufgabe<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Repräsentation von<br />

<strong>3D</strong>-Oberflächen<br />

Punktmenge mit jeweils 3 Koordinaten<br />

Zusammenfassung zu Polygonen<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

<strong>Heute</strong><br />

Aufbau von <strong>Szene</strong>n<br />

Geometrische Transformationen<br />

Renderingpipeline<br />

Beleuchtung<br />

Texturierung<br />

Kamera /<br />

Betrachter<br />

Bildschirm<br />

Objekte<br />

Welt<br />

Kamera<br />

Welt<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

<strong>Wie</strong> <strong>geht</strong> <strong>das</strong> ?<br />

Teekanne Teekanne<br />

Tülle Deckel<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

<strong>3D</strong> - <strong>Szene</strong><br />

© Thomas Jung, t.jung@fhtw-berlin.de


Transformationen<br />

Plazieren Objekte im Raum bezüglich<br />

eines Referenzkoordinatensystems<br />

Transformieren Objektkoordinaten in<br />

einheitliche Weltkoordinaten<br />

Bilden Objekte auf den Bildschirm ab<br />

Ermöglichen Objektbewegungen<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Geometrische<br />

Transformationen<br />

Translation<br />

Tx, Ty, Tz<br />

Skalierung<br />

Rotation<br />

s (einheitlich)<br />

Sx, Sy, Sz<br />

(achsenabhängig)<br />

Winkel plus Achse<br />

(w, Rx, Ry, Rz)<br />

Achtung: Bezugspunkt beachten !<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

<strong>3D</strong>-Rotationsmatrizen<br />

Rotation um x-Achse<br />

Rotation um y-Achse<br />

Rotation um z-Achse<br />

Drehsinn gemäß Rechter-/Linker-Hand-Regel<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

β<br />

α<br />

⎡1<br />

⎢<br />

⎢<br />

0<br />

Rotx<br />

( α)<br />

=<br />

⎢0<br />

⎢<br />

⎣0<br />

0 0 0⎤<br />

cosα<br />

− sinα<br />

0<br />

⎥<br />

⎥<br />

sinα<br />

cosα<br />

0⎥<br />

⎥<br />

0 0 1⎦<br />

⎡ cosα<br />

0<br />

⎢<br />

= ⎢<br />

0 1<br />

Rot y ( α)<br />

⎢−<br />

sinα<br />

0<br />

⎢<br />

⎣ 0 0<br />

sinα<br />

0⎤<br />

0 0<br />

⎥<br />

⎥<br />

cosα<br />

0⎥<br />

⎥<br />

0 1⎦<br />

⎡cosα − sinα<br />

0<br />

⎢<br />

= ⎢<br />

sinα<br />

cosα<br />

0<br />

Rotz<br />

( α)<br />

⎢ 0 0 1<br />

⎢<br />

⎣ 0 0 0<br />

0⎤<br />

0<br />

⎥<br />

⎥<br />

0⎥<br />

⎥<br />

1⎦<br />

Transformationsarten<br />

Transformationen im <strong>3D</strong>-Raum<br />

Rotation<br />

Translation<br />

Scherung<br />

Stauchung<br />

Skalierung<br />

Projektionen auf 2D-Fläche<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Homogene Koordinaten<br />

<strong>3D</strong>−<br />

Raum<br />

<strong>3D</strong>−<br />

Raum<br />

Homogen<br />

⎡x<br />

⎤<br />

⎢<br />

y<br />

⎥<br />

⎢ ⎥ ⇒<br />

⎢z<br />

⎥<br />

⎢ ⎥<br />

⎣w⎦<br />

⎡ x ⎤<br />

⎢w<br />

⎥<br />

⎢ ⎥<br />

⎢ y ⎥<br />

⎢w<br />

⎥<br />

⎢ ⎥<br />

⎢<br />

z<br />

⎥<br />

⎢⎣<br />

w⎥⎦<br />

Homogen<br />

⎡x<br />

⎤<br />

⎢<br />

y<br />

⎥<br />

⎢ ⎥<br />

⎢⎣<br />

z ⎥⎦<br />

⇒<br />

⎡x<br />

⎤<br />

⎢<br />

y<br />

⎥<br />

⎢ ⎥<br />

⎢z<br />

⎥<br />

⎢ ⎥<br />

⎣1<br />

⎦<br />

Zur Vereinheitlichung aller<br />

Transformationen<br />

Matrix-Vektor-Multiplikation<br />

w = 0 bedeutet Richtung<br />

Z. B. Beleuchtungsrichtung<br />

x = y = z = w = 0 verboten!<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Weitere Transformationen<br />

Translation<br />

Skalierung<br />

Scherung<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

⎡1<br />

⎢<br />

⎢<br />

0<br />

Tran(<br />

Tx,<br />

Ty<br />

, Tz<br />

) =<br />

⎢0<br />

⎢<br />

⎣0<br />

0<br />

1<br />

0<br />

0<br />

0<br />

0<br />

1<br />

0<br />

Tx<br />

⎤<br />

T<br />

⎥<br />

y ⎥<br />

T ⎥ z<br />

⎥<br />

1 ⎦<br />

⎡S<br />

x<br />

⎢<br />

= ⎢<br />

0<br />

Skal(<br />

Sx<br />

, S y , Sz<br />

)<br />

⎢ 0<br />

⎢<br />

⎣ 0<br />

0<br />

S y<br />

0<br />

0<br />

0<br />

0<br />

S z<br />

0<br />

0⎤<br />

0<br />

⎥<br />

⎥<br />

0⎥<br />

⎥<br />

1⎦<br />

⎡1<br />

⎢<br />

= ⎢<br />

0<br />

Shear(<br />

Shz,<br />

Shy<br />

)<br />

⎢0<br />

⎢<br />

⎣0<br />

0<br />

1<br />

0<br />

0<br />

Shz<br />

Shy<br />

1<br />

0<br />

0⎤<br />

0<br />

⎥<br />

⎥<br />

0⎥<br />

⎥<br />

1⎦


Transformation von Objekten<br />

Beispiel<br />

( x1<br />

/ y1)<br />

α<br />

( x 3 / y3)<br />

( x2<br />

/ y2)<br />

d x<br />

⎡x′<br />

′ ′<br />

1 x2<br />

x3<br />

⎤ ⎡cosα − sinα<br />

0 d x ⎤ ⎡x1<br />

x2<br />

⎢<br />

′ ′ ′<br />

⎥ ⎢<br />

⎥ ⎢<br />

⎢<br />

y1<br />

y2<br />

y3⎥<br />

= ⎢<br />

sinα<br />

cosα<br />

0 0<br />

⎥ * ⎢<br />

y1<br />

y2<br />

⎢ 0 0 0 ⎥ ⎢ 0 0 1 0 ⎥ ⎢ 0 0<br />

⎢ ⎥ ⎢<br />

⎥ ⎢<br />

⎣ 1 1 1 ⎦ ⎣ 0 0 0 1 ⎦ ⎣ 1 1<br />

Tran ( d ) * Rot<br />

x<br />

( α )<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

x<br />

( 3 / 3)<br />

y x ′ ′<br />

( x ′ 2 / y′<br />

2)<br />

Projektionen<br />

x3<br />

⎤<br />

y<br />

⎥<br />

3⎥<br />

0 ⎥<br />

⎥<br />

1 ⎦<br />

Bilden <strong>3D</strong>-Raum auf Bildebene ab<br />

( x ′ 1 / y′<br />

1)<br />

Orthogonale Projektion Perspektivische Projektion<br />

Perspektivische<br />

Transformation<br />

Berücksichtigung des Abstands<br />

zwischen Objekt und Betrachter<br />

Kameramodell<br />

0 d z<br />

Betrachter im Ursprung<br />

schaut in Richtung der z-Achse<br />

Bildschirm bei (0 0 d)<br />

Strahlensatz:<br />

x’ = x*d/z<br />

y’ = y*d/z<br />

⎡1<br />

0<br />

⎢<br />

⎢<br />

0<br />

⎢0<br />

⎢<br />

⎣0<br />

1<br />

0<br />

0<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

0<br />

0<br />

1<br />

1<br />

d<br />

0⎤<br />

⎡x<br />

⎤ ⎡x<br />

xd ⎤ ⎡ z ⎤<br />

⎥ ⎢ ⎥ ⎢ ⎥ ⎢ yd<br />

0<br />

⎥<br />

⎥ ⎢<br />

y<br />

⎥ = ⎢<br />

y z<br />

* ⎥ = ⎢ ⎥<br />

0⎥<br />

⎢z<br />

⎥ ⎢z<br />

⎥ ⎢ d ⎥<br />

⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥<br />

0⎦<br />

⎣1<br />

z<br />

⎦ ⎣ d⎦<br />

⎣ 1 ⎦<br />

0<br />

y’<br />

y<br />

Verkettungen<br />

Kombination mehrerer Transformationen in<br />

einer homogenen Transformationsmatrix<br />

Multiplikationen sind assoziativ<br />

'<br />

''<br />

' ''<br />

= T * P,<br />

P = T * P ⇒ P = ( T * T ) * P<br />

Pi 1 i i 2 i i 2 1 i<br />

( T * T ) * T = T * ( T * T )<br />

1<br />

2<br />

3<br />

1<br />

… aber nicht kommutativ !<br />

∋ T , T : T * T ≠ T * T<br />

1<br />

2<br />

1<br />

2<br />

2<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Parallele Projektion<br />

Keine perspektivischen Effekte<br />

Erhalt der x- und y-Koordinate<br />

z wird auf die Bildebene abgebildet<br />

Größenvergleich am Bildschirm (CAD)<br />

3<br />

2<br />

⎡1<br />

0 0 0⎤<br />

⎡x⎤<br />

⎡x⎤<br />

⎢ ⎥ ⎢ ⎥ ⎢ ⎥<br />

⎢<br />

0 1 0 0<br />

⎥ ⎢<br />

y<br />

⎥ = ⎢<br />

y<br />

* ⎥<br />

⎢0<br />

0 0 0⎥<br />

⎢z<br />

⎥ ⎢0⎥<br />

⎢ ⎥ ⎢ ⎥ ⎢ ⎥<br />

⎣0<br />

0 0 1⎦<br />

⎣1⎦<br />

⎣1⎦<br />

1<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Sichtvolumen<br />

Sichtbarer Bereich zwischen Frontplane<br />

und Backplane<br />

Objekte werden an den sechs Flächen des<br />

Sichtvolumens abgeschnitten (Klipping)<br />

Abbildung der Projektionsebene auf den<br />

Bildschirm<br />

Perspektivisches Sichtvolumen<br />

© Thomas Jung, t.jung@fhtw-berlin.de


<strong>Wie</strong> bekommen die Objekte<br />

ihre Farben ?<br />

Beleuchtung<br />

Lichtquellen<br />

Materialien<br />

Rasterisierung<br />

Polygon wird „ausgemalt“<br />

Texturierung<br />

Oberfläche wird mit Bildern „beklebt“<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Beleuchtungsmodelle<br />

Globales Beleuchtungsmodell<br />

Für Fotorealistische Darstellungen<br />

Emission und Reflexion von Licht in <strong>Szene</strong>n<br />

Raytracing: Spiegelnde Inter-Objekt-Reflexion<br />

Radiosity: Diffuse Inter-Objekt-Reflexionen<br />

Lokales Beleuchtungsmodell<br />

Für Realzeitanforderungen „Virtual Reality“<br />

Verwendung in OpenGL, VRML, ...<br />

Vernachlässigung von Inter-Objekt-Reflexionen<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Reflexionen<br />

Ambiente Beleuchtung<br />

Sorgt für generelle <strong>Szene</strong>naufhellung<br />

Diffuse Beleuchtung<br />

Hebt Profil eines Objektes hervor<br />

Spiegelnde Beleuchtung<br />

Sorgt für Glanzlichter<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Beleuchtung<br />

Lichtquelle<br />

Gerichtetes Licht<br />

Punktlicht<br />

Spotlicht<br />

Materialeigenschaften<br />

Oberflächenausrichtung<br />

(Normale)<br />

Betrachterstandpunkt<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Flächennormale<br />

Eckpunktnormale<br />

Lokales<br />

Beleuchtungsmodell<br />

Augvektor A<br />

Reflektanzvektor<br />

R<br />

Normale N<br />

θ<br />

θ<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Halbvektor H<br />

Lichtvektor<br />

L<br />

Diffuse Beleuchtung<br />

Abhängig vom Winkel zwischen<br />

Lichtvektor und Oberflächennormale<br />

Unabhängig vom Betrachterstandpunkt<br />

Gemäß Lambertschem Gesetz<br />

„Je spitzer der Winkel der Fläche zur Lichtquelle desto<br />

weniger Lichtenergie gelangt auf die Oberfläche“<br />

kd = 0.4 0.55 0.7 0.85 1.0


Ambiente Beleuchtung<br />

Konstant pro Oberfläche<br />

Um zu garantieren, daß Objekt sichtbar ist<br />

Repräsentiert diffuse Inter-Objekt-Reflexion<br />

Genauere Betrachtung im Radiosity-Verfahren<br />

ka = 0.0 0.15 0.3 0.45 0.6<br />

(Diffuse Beleuchtung kd = 0.4)<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Winkel im Modell<br />

Diffuse Reflexion<br />

Zwischen Lichtvektor und Oberflächennormale<br />

Spiegelnde Reflexion<br />

Zwischen Augvektor und Reflektanzvektor<br />

bzw. Halbvektor und Oberflächennormale<br />

α<br />

A B<br />

A*<br />

B<br />

cosα = len(<br />

A)*<br />

len(<br />

B)<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

2<br />

8<br />

64<br />

cosα<br />

cos α cos α cos α<br />

Beleuchtete Teekanne<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Spiegelnde Beleuchtung<br />

Abhängig vom Betrachterstandpunkt<br />

Sorgt nur für Glanzlicht<br />

ks bestimmt Intensität (Helligkeit)<br />

„Shininess“ kn bestimmt Fokussierung (Größe)<br />

kn<br />

= 3<br />

5<br />

10<br />

27<br />

200<br />

ks<br />

= 0.<br />

1<br />

0.<br />

25<br />

0.<br />

5<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

(Ambiente<br />

Beleuchtung ka=0.1<br />

Diffuse Beleuchtung<br />

kd=0.45)<br />

Beleuchtung nach Phong<br />

a<br />

Augvektor A<br />

Reflektanzvektor<br />

R<br />

d<br />

Normale N<br />

θ<br />

θ<br />

Halbvektor H<br />

Lichtvektor<br />

L<br />

I = k + k * ( L*<br />

N)<br />

+ k ( H * N)<br />

I, ka, kd und ks sind Intensitäten<br />

Bei farbiger Reflexion für R, G und B<br />

Grafikpipeline<br />

CPU<br />

Grafikkarte<br />

<strong>Szene</strong>nmanagement<br />

Geometrie<br />

Setup<br />

Rasterung<br />

Monitor<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

s<br />

k<br />

n


Schattierungsverfahren<br />

Konstante Schattierung<br />

Beleuchtung anhand der Flächennormalen<br />

Alle Pixel erhalten diesen Farbwert<br />

Facettenstruktur wird betont<br />

Gouraud-Schattierung<br />

Beleuchtung anhand der Eckpunktnormalen<br />

Farbwerte der Eckpunkte werden interpoliert<br />

Phong-Schattierung<br />

Nicht zu verwechseln mit Beleuchtungsmodell !<br />

Interpolation der Normalen<br />

Beleuchtung anhand der interpolierten<br />

Normalen pro Pixel<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Schattierung einer Kugel<br />

Ohne Textur<br />

Konstant Gouraud Phong<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Texturierung<br />

Echtzeittexturierung<br />

(Farbtexturen, Bumpmapping)<br />

Fotorealistische Darstellung<br />

(Displacementmapping<br />

Reflectionmapping)<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Schattierung eines Dreiecks<br />

Konstantschattierung<br />

anhand der<br />

Flächennormalen<br />

Gouraudschattierung:<br />

Normale pro Eckpunkt<br />

Interpolation der<br />

Eckpunktfarben<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Phong- Schattierung:<br />

Normale pro Pixel<br />

Rasterung für Gouraud-Schattierung<br />

xstart = xende = x1<br />

dl = (xl – x1) / (yende – ystart)<br />

dr = (xr – x1) / (yende – ystart)<br />

fl = f1<br />

dfl = (fl – fs) / (yende – ystart)<br />

df = (fr – fl) / (xr – xl)<br />

für y von ystart bis yende<br />

f = fl<br />

für x = xstart bis xende<br />

f = f + df<br />

generierePixel(x,y,f)<br />

xstart = xstart + dl<br />

xende = xende + dr<br />

fl = fl + dfl<br />

x<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

x1<br />

Farbtexturen<br />

Digitale Rasterbilder<br />

RGBA-Texturen enthalten Transparenzwert<br />

Unterstützung z. B. durch Png-, und Gif-Format<br />

y<br />

yende<br />

ystart<br />

R G B A R G B A R G B A R G B A<br />

R G B A R G B A R G B A R G B A<br />

R G B A<br />

R G B A R G B A R G B A<br />

OpenGL unterstützt Farbtexturen<br />

Breiten und Höhen müssen 2er-Potenzen sein: 2,4,8,16,...<br />

Bildformat nicht Bestandteil von OpenGL<br />

Einlesefunktion muß selbst definiert werden<br />

Texturen belegen Texturspeicher<br />

Auflösung (nicht Kompressionsfaktor) entscheidend !


Texturkoordinaten<br />

Verankerung der Textur<br />

an den Polygonecken<br />

p1, p2, p3<br />

Adressierung der Textur<br />

mit u,v von [0...1]<br />

Bildgröße egal<br />

Interpolation während<br />

der Rasterung<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Abbildung<br />

Polygon Textur<br />

Texturwiederholung<br />

Spart Texturspeicher<br />

Textur<br />

Beschreibung durch<br />

Texturkoordinaten größer eins<br />

0 bis n bedeutet n-malige<br />

<strong>Wie</strong>derholung<br />

Modulo 1 während der Rasterung<br />

3<br />

t<br />

0<br />

0 s 3<br />

Weitere Texturarten<br />

Farbtexturen<br />

Von OpenGL unterstützt<br />

Bumpmaps<br />

Zunehmend in Renderengines unterstützt<br />

Displacementmaps<br />

Nicht in Echtzeit<br />

Lightmaps<br />

Häufig in <strong>3D</strong>-Spielen eingesetzt<br />

Reflektionmapping<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Bumpmapping<br />

Displacement<br />

mapping<br />

Texturierung von Objekten<br />

Explizite Festlegung von Texturkoordinaten<br />

Für alle Polygoneckpunkte<br />

Z. B. durch Modellierwerkzeug<br />

Automatische Generierung<br />

Geometrie bestimmt die Texturkoordinaten<br />

Z. B Spline-Funktionen, glutSolidTeapot();<br />

Mapping-Funktion<br />

Lineares Mapping (OpenGL)<br />

Spherisches Mapping<br />

Zylindrisches Mapping<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Texturtransformationen<br />

Texturtransformationen vor Verwendung der<br />

Koordinaten<br />

(0 4) (4 4)<br />

(0 0) (4 0)<br />

⎡cos<br />

45°<br />

− sin 45°<br />

0 0⎤<br />

⎢<br />

⎥<br />

⎢<br />

sin 45°<br />

cos 45°<br />

0 0<br />

⎥<br />

⎢ 0 0 1 0⎥<br />

⎢<br />

⎥<br />

⎣ 0 0 0 1⎦<br />

Interaktive Manipulation<br />

im Modellierwerkzeug<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Zusammenfassung<br />

Geometrische Transformationen manipulieren<br />

<strong>3D</strong>-Objekte<br />

Projektionen bilden sie auf Bildschirm ab<br />

Objektfarben über lokales Beleuchtungsmodell<br />

Konstante, Gouraud- oder Phong-Schattierung<br />

um Pixel einzufärben<br />

Gouraud-Schattierung beleuchtet an<br />

Polygonecken<br />

Texturkoordinaten verankern die Bilder<br />

Texturtransformationen ändern die Abbildung der<br />

Textur auf dem Objekt<br />

© Thomas Jung, t.jung@fhtw-berlin.de

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!