+ All Categories
Home > Documents > 2010-JOGL-12-Projection-Shadows

2010-JOGL-12-Projection-Shadows

Date post: 26-Jun-2015
Category:
Upload: johannes-diemke
View: 285 times
Download: 0 times
Share this document with a friend
28
C A R L V ON O SS I ET Z KY Projection Shadows Johannes Diemke ¨ Ubung im Modul OpenGL mit Java Wintersemester 2010/2011
Transcript
Page 1: 2010-JOGL-12-Projection-Shadows

C A R LV O N

O S S I E T Z K Y

Projection Shadows

Johannes Diemke

Ubung im Modul OpenGL mit JavaWintersemester 2010/2011

Page 2: 2010-JOGL-12-Projection-Shadows

Projection Shadows

Motivation

I Schatten sind ein wichtiger Grundbestandteil beim Erzeugenrealistischer Bilder

I Geben dem Betrachter Hinweise uber die Platzierung undAusdehnung von Objekten

I Die wichtigsten Verfahren fur Echtzeit sind:

Projection ShadowsShadow VolumesShadow Map

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 2/28

Page 3: 2010-JOGL-12-Projection-Shadows

Projection Shadows

FIFA International Soccer (1994)

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 3/28

Page 4: 2010-JOGL-12-Projection-Shadows

Projection Shadows

Nascar Racing (1995)

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 4/28

Page 5: 2010-JOGL-12-Projection-Shadows

Projection Shadows

Tomb Raider (1996)

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 5/28

Page 6: 2010-JOGL-12-Projection-Shadows

Projection Shadows

Doom 3 (2004)

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 6/28

Page 7: 2010-JOGL-12-Projection-Shadows

Projection Shadows

Planare Schatten

I Einfacher Spezialfall bei dem Schatten auf eine planare Flachegeworfen wird

I Im Folgenden ausschließlich Betrachtung dieses Spezialfalls

I Verwendete Terminologie:

Occluder sind Objekte die Schatten auf Receiver werfenPunktlichtquellen erzeugen nur Hard Shadows (scharfe Konturen)Flachenlichtquellen dagegen Soft ShadowsEs wird zwischen Kernschatten und Halbschatten unterschieden

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 7/28

Page 8: 2010-JOGL-12-Projection-Shadows

Projection Shadows

Terminologie

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 8/28

Page 9: 2010-JOGL-12-Projection-Shadows

Projection Shadows

Projection Shadows

I Verfahren zur Darstellung von planaren Schatten

I Berechnet Schatten automatisch aus den schattenwerfendenOccludern

Um den Schatten zu erzeugen wird das dreidimensionale Objekt einzweites Mal gerendertEine Matrix wird hergeleitet um die Raumkoordinaten eines Objektesauf eine Ebene zu projizieren

I Zunachst die Herleitung fur planare Schatten auf der Ebene y = 0

Idee: Zwei ahnliche Dreiecke haben gleiche SeitenverhaltnisseProjektion fur die x- und y-Koordinate findenFur y gilt immer y = 0

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 9/28

Page 10: 2010-JOGL-12-Projection-Shadows

Projection Shadows

Herleitung der Projektion fur die x-Koordinate

px − lxvx − lx

=ly

ly − vy⇐⇒ px =

lyvx − lxvy

ly − vy

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 10/28

Page 11: 2010-JOGL-12-Projection-Shadows

Projection Shadows

Herleitung fur die Projektion auf die Ebene y = 0

I Analog zu px ergibt sich pz , so dass wir insgesamt die folgendenGleichungen erhalten:

px =lyvx − lxvy

ly − vy

py = 0

pz =lyvz − lzvy

ly − vy

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 11/28

Page 12: 2010-JOGL-12-Projection-Shadows

Projection Shadows

Herleitung fur die Projektion auf die Ebene y = 0

I Die Gleichungen konnen jetzt in eine Projektions-Matrix Muberfuhrt werden:

M =

ly −lx 0 00 0 0 00 −lz ly 00 −1 0 ly

I Es lasst sich einfach zeigen, dass Mv = p tatsachlich gilt

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 12/28

Page 13: 2010-JOGL-12-Projection-Shadows

Projection Shadows

Verallgemeinerung fur beliebige Ebenen

I Im Allgemeinen soll Schatten auf eine beliebige Ebeneπ : n · x + d = 0 geworfen werden

I Ebene liegt hier in Normalform vor

n ist ein beliebiger Normalenvektor der Ebened ist ein Skalar, das den negativen Abstand entlang desNormalenvektors ausgehende vom Ursprung n zur Ebene angibtIst ein beliebiger Punkt p der Ebene sowie ein beliebigerNormalenvektor n der Ebene gegeben, so ergibt sich d durch:

d = −n · p

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 13/28

Page 14: 2010-JOGL-12-Projection-Shadows

Projection Shadows

Projektion auf eine beliebige Ebene

π : n · x + d = 0

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 14/28

Page 15: 2010-JOGL-12-Projection-Shadows

Projection Shadows

Herleitung der Projektion auf eine Ebene π : n · x + d = 0

I Die Gerade r ausgehend von der Lichtquelle l durch den Punkt v istgegeben durch:

r : l + γ(v− l)

I Weiterhin ist die Ebene π auf die der Schatten projiziert werden sollgegeben durch:

π : n · x + d = 0

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 15/28

Page 16: 2010-JOGL-12-Projection-Shadows

Projection Shadows

Herleitung der Projektion auf eine Ebene π : n · x + d = 0

I Durch Einsetzen der Geradengleichung r in die Ebenengleichunglasst sich ein γ finden fur das die Gerade die Ebene schneidet:

n · (l + γ(v− l)) + d = 0

n · l + γn(v− l) + d = 0

γn · (v− l) = −d − n · l

γ =−d − n · ln · (v− l)

I Durch Einsetzen von γ in die Geradengleichung r ergibt sich derSchnittpunkt p:

p = l +−d − n · ln · (v− l)

(v− l)

= l− d + n · ln · (v− l)

(v− l)

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 16/28

Page 17: 2010-JOGL-12-Projection-Shadows

Projection Shadows

Projektion auf eine Ebene π : n · x + d = 0

I Der Strahl ausgehend von l durch den Punkt v schneidet die Ebene π

I Dies fuhrt zu dem projizierten Punkt p:

p = l− d + n · ln · (v− l)

(v− l)

I Die Gleichung kann jetzt wieder in eine Projektions-Matrix Muberfuhrt werden:

M =

n · l + d − lxnx −lxny −lxnz −lxd−lynx n · l + d − lyny −lynz −lyd−lznx −lzny n · l + d − lznz −lzd−nx −ny −nz n · l

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 17/28

Page 18: 2010-JOGL-12-Projection-Shadows

Projection Shadows

Umsetzung des Verfahrens

I Um Schatten darzustellen, muss die Matrix M auf die Objekte, dieSchatten werfen sollen, angewendet werden

I Die projizierten Objekte sollten mit einer dunklen Farbe gerendertwerden

I Z-Fighting Probleme, die durch die Projektion auf die Ebeneenstehen, mussen berucksichtigt werden:

Versatz der Projektions-Ebene zur Flache, so dass der Schattenimmer vor der Flache gerendert wirdAlternativ: projizierte Objekte mit ausgeschaltetem Z-Buffer zeichnen

I Der Stencil-Buffer wird benotigt um den Schattenwurf auf dieFlache zu beschranken

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 18/28

Page 19: 2010-JOGL-12-Projection-Shadows

Projection Shadows

Umsetzung in OpenGL

I Im Folgenden wird zunachst d und n · l berechnet um dann Mt zukonstruieren:

public PhotekProjectionShadows(PhotekVector3D lightPosition, PhotekPlane plane) {

shadowMatrix_ = new float[16];

lightPosition_ = lightPosition;

plane_ = plane;

}

public void constructShadowMatrix() {

float NdotL, d;

d = -plane_.point_.dot(plane_.normal_);

NdotL = plane_.normal_.x * lightPosition_.x +

plane_.normal_.y * lightPosition_.y +

plane_.normal_.z * lightPosition_.z;

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 19/28

Page 20: 2010-JOGL-12-Projection-Shadows

Projection Shadows

Umsetzung in OpenGLshadowMatrix_[0 ] = NdotL + d - lightPosition_.x * plane_.normal_.x;

shadowMatrix_[1 ] = - lightPosition_.x * plane_.normal_.y;

shadowMatrix_[2 ] = - lightPosition_.x * plane_.normal_.z;

shadowMatrix_[3 ] = - lightPosition_.x * d ;

shadowMatrix_[4 ] = - lightPosition_.y * plane_.normal_.x;

shadowMatrix_[5 ] = NdotL + d - lightPosition_.y * plane_.normal_.y;

shadowMatrix_[6 ] = - lightPosition_.y * plane_.normal_.z;

shadowMatrix_[7 ] = - lightPosition_.y * d ;

shadowMatrix_[8 ] = - lightPosition_.z * plane_.normal_.x;

shadowMatrix_[9 ] = - lightPosition_.z * plane_.normal_.y;

shadowMatrix_[10] = NdotL + d - lightPosition_.z * plane_.normal_.z;

shadowMatrix_[11] = - lightPosition_.z * d ;

shadowMatrix_[12] = - plane_.normal_.x;

shadowMatrix_[13] = - plane_.normal_.y;

shadowMatrix_[14] = - plane_.normal_.z;

shadowMatrix_[15] = NdotL;

}

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 20/28

Page 21: 2010-JOGL-12-Projection-Shadows

Projection Shadows

Umsetzung in OpenGL

I Mit der Methode applyShadowMatrix(GL gl) wird die Projektions-Matrixangewendet:

public void applyShadowMatrix(GL gl) {

gl.glMultTransposeMatrixf(shadowMatrix_, 0);

}

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 21/28

Page 22: 2010-JOGL-12-Projection-Shadows

Projection Shadows

Umsetzung in OpenGL

I Zunachst das Objekt und daraufhin den Schatten rendern:

model.draw(gl);

shadows.applyShadowMatrix(gl);

// Den Schatten nicht mehrfach transparent uebereinander rendern

gl.glEnable(GL.GL_STENCIL_TEST);

gl.glStencilFunc(GL.GL_EQUAL, 0, 0xFFFFFFFF);

gl.glStencilOp(GL.GL_KEEP,GL.GL_KEEP,GL.GL_INCR);

gl.glDisable(GL.GL_LIGHTING);

gl.glEnable(GL.GL_BLEND);

gl.glColor4f(0,0,0,0.7f);

model.draw(gl);

gl.glDisable(GL.GL_STENCIL_TEST);

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 22/28

Page 23: 2010-JOGL-12-Projection-Shadows

Projection Shadows

Umsetzung in OpenGL

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 23/28

Page 24: 2010-JOGL-12-Projection-Shadows

Projection Shadows

Auftretende ProblemeI Die beiden genannten Projektions-Matrizen fuhren nicht in jedem

Fall zum gewunschten VerhaltenIst die Lichtquelle unter der obersten Raumkoordinate eines Objektes,werden Anti-Shadows generiert

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 24/28

Page 25: 2010-JOGL-12-Projection-Shadows

Projection Shadows

Nachteile

I Schatten nur auf planaren Flachen moglich

I Soft Shadows sollten Hard Shadows vorgezogen werden

Schatten mit scharfen Konturen konnen teilweise als geometrischeBeschaffenheit fehlintepretiert werden (bspw. als Falten inOberflachen)Hard Shadows sehen in vielen Szenarien unnaturlich ausExistieren ideale Punktlichtquellen in der Realitat?

I Aufwand des Verfahrens hangt von der Komplexitat der Szene ab

Objekte, die Schatten werfen sollen, mussen ein zweites Malgerendert werden

I Anti-Shadows und False-Shadows moglich

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/28

Page 26: 2010-JOGL-12-Projection-Shadows

Projection Shadows

Vorteile

I Verfahren ist sehr einfach zu implementieren

I Wichtiger als schoner und naturgetreuer Schatten ist es uberhauptSchatten zu haben (Bsp. Blob Shadows)

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 26/28

Page 27: 2010-JOGL-12-Projection-Shadows

Literatur und Links

� Mason Woo, Jackie Neider, Tom Davis and Dave ShreinerOpenGL Programming Guidehttp://www.opengl.org/documentation/red book/

� Randi J. RostOpenGL Shading Languagehttp://www.3dshaders.com/

� Richard S. Wright and Michael SweetOpenGL SuperBiblehttp://www.starstonesoftware.com/OpenGL/

� Tomas Moller and Eric HainesReal-Time Renderinghttp://www.realtimerendering.com/

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 27/28

Page 28: 2010-JOGL-12-Projection-Shadows

Literatur und Links

� Fletcher Dunn and Ian Parberry3D Math Primer For Graphics and Game Developmenthttp://www.gamemath.com/

� Khronos GroupOpenGL Homepagehttp://www.opengl.org/

� Game Technology Group at Sun MicrosystemsJOGL API Projecthttps://jogl.dev.java.net/

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 28/28


Recommended