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
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