CARL      VONOSSIETZKY            Projection Shadows            Johannes Diemke            ¨            Ubung im Modul Ope...
Projection ShadowsMotivation   Schatten sind ein wichtiger Grundbestandteil beim Erzeugen   realistischer Bilder   Geben d...
Projection ShadowsFIFA International Soccer (1994)    Johannes Diemke      OpenGL mit Java   WiSe 2010 / 2011   3/28
Projection ShadowsNascar Racing (1995)   Johannes Diemke     OpenGL mit Java   WiSe 2010 / 2011   4/28
Projection ShadowsTomb Raider (1996)   Johannes Diemke   OpenGL mit Java   WiSe 2010 / 2011   5/28
Projection ShadowsDoom 3 (2004)   Johannes Diemke   OpenGL mit Java   WiSe 2010 / 2011   6/28
Projection ShadowsPlanare Schatten   Einfacher Spezialfall bei dem Schatten auf eine planare Fl¨che                       ...
Projection ShadowsTerminologie   Johannes Diemke   OpenGL mit Java   WiSe 2010 / 2011   8/28
Projection ShadowsProjection Shadows   Verfahren zur Darstellung von planaren Schatten   Berechnet Schatten automatisch au...
Projection ShadowsHerleitung der Projektion f¨r die x-Koordinate                           u    px − lx      ly           ...
Projection ShadowsHerleitung f¨r die Projektion auf die Ebene y = 0            u   Analog zu px ergibt sich pz , so dass w...
Projection ShadowsHerleitung f¨r die Projektion auf die Ebene y = 0            u   Die Gleichungen k¨nnen jetzt in eine Pr...
Projection ShadowsVerallgemeinerung f¨r beliebige Ebenen                   u   Im Allgemeinen soll Schatten auf eine belie...
Projection ShadowsProjektion auf eine beliebige Ebene   π :n·x+d =0    Johannes Diemke      OpenGL mit Java   WiSe 2010 / ...
Projection ShadowsHerleitung der Projektion auf eine Ebene π : n · x + d = 0    Die Gerade r ausgehend von der Lichtquelle...
Projection ShadowsHerleitung der Projektion auf eine Ebene π : n · x + d = 0    Durch Einsetzen der Geradengleichung r in ...
Projection ShadowsProjektion auf eine Ebene π : n · x + d = 0    Der Strahl ausgehend von l durch den Punkt v schneidet di...
Projection ShadowsUmsetzung des Verfahrens   Um Schatten darzustellen, muss die Matrix M auf die Objekte, die   Schatten w...
Projection ShadowsUmsetzung in OpenGL     Im Folgenden wird zun¨chst d und n · l berechnet um dann M t zu                 ...
Projection ShadowsUmsetzung in OpenGL    shadowMatrix_[0    ]   = NdotL + d - lightPosition_.x *       plane_.normal_.x;  ...
Projection ShadowsUmsetzung in OpenGL   Mit der Methode    applyShadowMatrix(GL gl)   wird die Projektions-Matrix   angewe...
Projection ShadowsUmsetzung in OpenGL   Zun¨chst das Objekt und daraufhin den Schatten rendern:      a   model.draw(gl);  ...
Projection ShadowsUmsetzung in OpenGL   Johannes Diemke    OpenGL mit Java   WiSe 2010 / 2011   23/28
Projection ShadowsAuftretende Probleme   Die beiden genannten Projektions-Matrizen f¨hren nicht in jedem                  ...
Projection ShadowsNachteile   Schatten nur auf planaren Fl¨chen m¨glich                               a      o   Soft Shad...
Projection ShadowsVorteile    Verfahren ist sehr einfach zu implementieren    Wichtiger als sch¨ner und naturgetreuer Scha...
Literatur und Links Mason Woo, Jackie Neider, Tom Davis and Dave Shreiner OpenGL Programming Guide http://www.opengl.org/d...
Literatur und Links Fletcher Dunn and Ian Parberry 3D Math Primer For Graphics and Game Development http://www.gamemath.co...
Nächste SlideShare
Wird geladen in …5
×

2010-JOGL-12-Projection-Shadows

496 Aufrufe

Veröffentlicht am

0 Kommentare
1 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
496
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
2
Aktionen
Geteilt
0
Downloads
1
Kommentare
0
Gefällt mir
1
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

2010-JOGL-12-Projection-Shadows

  1. 1. CARL VONOSSIETZKY Projection Shadows Johannes Diemke ¨ Ubung im Modul OpenGL mit Java Wintersemester 2010/2011
  2. 2. Projection ShadowsMotivation Schatten sind ein wichtiger Grundbestandteil beim Erzeugen realistischer Bilder Geben dem Betrachter Hinweise uber die Platzierung und ¨ Ausdehnung von Objekten Die wichtigsten Verfahren f¨r Echtzeit sind: u Projection Shadows Shadow Volumes Shadow Map Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 2/28
  3. 3. Projection ShadowsFIFA International Soccer (1994) Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 3/28
  4. 4. Projection ShadowsNascar Racing (1995) Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 4/28
  5. 5. Projection ShadowsTomb Raider (1996) Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 5/28
  6. 6. Projection ShadowsDoom 3 (2004) Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 6/28
  7. 7. Projection ShadowsPlanare Schatten Einfacher Spezialfall bei dem Schatten auf eine planare Fl¨che a geworfen wird Im Folgenden ausschließlich Betrachtung dieses Spezialfalls Verwendete Terminologie: Occluder sind Objekte die Schatten auf Receiver werfen Punktlichtquellen erzeugen nur Hard Shadows (scharfe Konturen) Fl¨chenlichtquellen dagegen Soft Shadows a Es wird zwischen Kernschatten und Halbschatten unterschieden Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 7/28
  8. 8. Projection ShadowsTerminologie Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 8/28
  9. 9. Projection ShadowsProjection Shadows Verfahren zur Darstellung von planaren Schatten Berechnet Schatten automatisch aus den schattenwerfenden Occludern Um den Schatten zu erzeugen wird das dreidimensionale Objekt ein zweites Mal gerendert Eine Matrix wird hergeleitet um die Raumkoordinaten eines Objektes auf eine Ebene zu projizieren Zun¨chst die Herleitung f¨r planare Schatten auf der Ebene y = 0 a u Idee: Zwei ¨hnliche Dreiecke haben gleiche Seitenverh¨ltnisse a a Projektion f¨r die x- und y-Koordinate finden u F¨r y gilt immer y = 0 u Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 9/28
  10. 10. Projection ShadowsHerleitung der Projektion f¨r die x-Koordinate u px − lx ly ly vx − lx vy = ⇐⇒ px = vx − lx ly − vy ly − vy Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 10/28
  11. 11. Projection ShadowsHerleitung f¨r die Projektion auf die Ebene y = 0 u Analog zu px ergibt sich pz , so dass wir insgesamt die folgenden Gleichungen erhalten: ly vx − lx vy px = ly − vy py = 0 ly vz − lz vy pz = ly − vy Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 11/28
  12. 12. Projection ShadowsHerleitung f¨r die Projektion auf die Ebene y = 0 u Die Gleichungen k¨nnen jetzt in eine Projektions-Matrix M o uberf¨hrt werden: ¨ u   ly −lx 0 0 0 0 0 0 M=  0 −lz ly 0 0 −1 0 ly Es l¨sst sich einfach zeigen, dass Mv = p tats¨chlich gilt a a Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 12/28
  13. 13. Projection ShadowsVerallgemeinerung f¨r beliebige Ebenen u Im Allgemeinen soll Schatten auf eine beliebige Ebene π : n · x + d = 0 geworfen werden Ebene liegt hier in Normalform vor n ist ein beliebiger Normalenvektor der Ebene d ist ein Skalar, das den negativen Abstand entlang des Normalenvektors ausgehende vom Ursprung n zur Ebene angibt Ist ein beliebiger Punkt p der Ebene sowie ein beliebiger Normalenvektor n der Ebene gegeben, so ergibt sich d durch: d = −n · p Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 13/28
  14. 14. Projection ShadowsProjektion auf eine beliebige Ebene π :n·x+d =0 Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 14/28
  15. 15. Projection ShadowsHerleitung der Projektion auf eine Ebene π : n · x + d = 0 Die Gerade r ausgehend von der Lichtquelle l durch den Punkt v ist gegeben durch: r : l + γ(v − l) Weiterhin ist die Ebene π auf die der Schatten projiziert werden soll gegeben durch: π :n·x+d =0 Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 15/28
  16. 16. Projection ShadowsHerleitung der Projektion auf eine Ebene π : n · x + d = 0 Durch Einsetzen der Geradengleichung r in die Ebenengleichung l¨sst sich ein γ finden f¨r das die Gerade die Ebene schneidet: a u n · (l + γ(v − l)) + d = 0 ˙ n · l + γn(v − l) + d = 0 γn · (v − l) = −d − n · l −d − n · l γ = n · (v − l) Durch Einsetzen von γ in die Geradengleichung r ergibt sich der Schnittpunkt p: −d − n · l p = l+ (v − l) n · (v − l) d +n·l = l− (v − l) n · (v − l) Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 16/28
  17. 17. Projection ShadowsProjektion auf eine Ebene π : n · x + d = 0 Der Strahl ausgehend von l durch den Punkt v schneidet die Ebene π Dies f¨hrt zu dem projizierten Punkt p: u d +n·l p=l− (v − l) n · (v − l) Die Gleichung kann jetzt wieder in eine Projektions-Matrix M uberf¨hrt werden: ¨ u   n · l + d − lx nx −lx ny −lx nz −lx d  −ly nx n · l + d − ly ny −ly nz −ly d  M=   −lz nx −lz ny n · l + d − lz nz −lz d  −nx −ny −nz n·l Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 17/28
  18. 18. Projection ShadowsUmsetzung des Verfahrens Um Schatten darzustellen, muss die Matrix M auf die Objekte, die Schatten werfen sollen, angewendet werden Die projizierten Objekte sollten mit einer dunklen Farbe gerendert werden Z-Fighting Probleme, die durch die Projektion auf die Ebene enstehen, m¨ssen ber¨cksichtigt werden: u u Versatz der Projektions-Ebene zur Fl¨che, so dass der Schatten a immer vor der Fl¨che gerendert wird a Alternativ: projizierte Objekte mit ausgeschaltetem Z-Buffer zeichnen Der Stencil-Buffer wird ben¨tigt um den Schattenwurf auf die o Fl¨che zu beschr¨nken a a Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 18/28
  19. 19. Projection ShadowsUmsetzung in OpenGL Im Folgenden wird zun¨chst d und n · l berechnet um dann M t zu a konstruieren: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
  20. 20. Projection ShadowsUmsetzung in OpenGL shadowMatrix_[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
  21. 21. Projection ShadowsUmsetzung in OpenGL Mit der Methode applyShadowMatrix(GL gl) wird die Projektions-Matrix angewendet: public void applyShadowMatrix(GL gl) { gl.glMultTransposeMatrixf(shadowMatrix_, 0); } Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 21/28
  22. 22. Projection ShadowsUmsetzung in OpenGL Zun¨chst das Objekt und daraufhin den Schatten rendern: a 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
  23. 23. Projection ShadowsUmsetzung in OpenGL Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 23/28
  24. 24. Projection ShadowsAuftretende Probleme Die beiden genannten Projektions-Matrizen f¨hren nicht in jedem u Fall zum gew¨nschten Verhalten u Ist die Lichtquelle unter der obersten Raumkoordinate eines Objektes, werden Anti-Shadows generiert Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 24/28
  25. 25. Projection ShadowsNachteile Schatten nur auf planaren Fl¨chen m¨glich a o Soft Shadows sollten Hard Shadows vorgezogen werden Schatten mit scharfen Konturen k¨nnen teilweise als geometrische o Beschaffenheit fehlintepretiert werden (bspw. als Falten in Oberfl¨chen) a Hard Shadows sehen in vielen Szenarien unnat¨rlich aus u Existieren ideale Punktlichtquellen in der Realit¨t? a Aufwand des Verfahrens h¨ngt von der Komplexit¨t der Szene ab a a Objekte, die Schatten werfen sollen, m¨ssen ein zweites Mal u gerendert werden Anti-Shadows und False-Shadows m¨glich o Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/28
  26. 26. Projection ShadowsVorteile Verfahren ist sehr einfach zu implementieren Wichtiger als sch¨ner und naturgetreuer Schatten ist es uberhaupt o ¨ Schatten zu haben (Bsp. Blob Shadows) Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 26/28
  27. 27. Literatur und Links Mason Woo, Jackie Neider, Tom Davis and Dave Shreiner OpenGL Programming Guide http://www.opengl.org/documentation/red book/ Randi J. Rost OpenGL Shading Language http://www.3dshaders.com/ Richard S. Wright and Michael Sweet OpenGL SuperBible http://www.starstonesoftware.com/OpenGL/ Tomas M¨ller and Eric Haines o Real-Time Rendering http://www.realtimerendering.com/ Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 27/28
  28. 28. Literatur und Links Fletcher Dunn and Ian Parberry 3D Math Primer For Graphics and Game Development http://www.gamemath.com/ Khronos Group OpenGL Homepage http://www.opengl.org/ Game Technology Group at Sun Microsystems JOGL API Project https://jogl.dev.java.net/ Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 28/28

×