SlideShare a Scribd company logo
1 of 12
Download to read offline
CARL
      VON
OSSIETZKY
            Toon Shading

            Johannes Diemke

            ¨
            Ubung im Modul OpenGL mit Java
            Wintersemester 2010/2011
Toon Shading


Grundlagen
   Gelegentlich auch Cel Shading genannt
   Verfahren zum nicht-fotorealistischen Rendern
   Imitiert Zeichenstil von Comics
   Charakteristika
         Fette Außenlinien
         Wenige Schattierungsstufen
   Verwendung in Zeichentrickfilmen und Computerspielen




   Johannes Diemke             OpenGL mit Java     WiSe 2010 / 2011   2/12
Toon Shading


The Legend of Zelda: The Wind Waker




   Johannes Diemke     OpenGL mit Java   WiSe 2010 / 2011   3/12
Toon Shading


Team Fortress 2 (Toon Shading Mod)




   Johannes Diemke     OpenGL mit Java   WiSe 2010 / 2011   4/12
Toon Shading


Umsetzung
   Mehrere alternative Vorgehensweisen
         Von trivial bis anspruchsvoll
         Trade-off zwischen Komplexit¨t und visueller Qualit¨t
                                       a                   a
   Ein m¨gliches Vorgehen
        o
     1   Zeichnen der Back-Faces mit fetten Linien
     2   Berechnung des Shading




   Johannes Diemke              OpenGL mit Java           WiSe 2010 / 2011   5/12
Toon Shading


Schritt 1: Zeichnen der Back-Faces
      Zeichnen der Back-Faces
      Verwendung von fetten schwarzen Linien
// setup
gl.glEnable(GL2.GL_CULL_FACE);

...

// first renderpass
gl.glLineWidth(3.0f);
gl.glColor3f(0.0f, 0.0f, 0.0f);

// render back faces using lines
gl.glFrontFace(GL2.GL_CW);
gl.glPolygonMode(GL2.GL_FRONT, GL2.GL_LINE);

// render object
deathstar.draw(gl);

      Johannes Diemke             OpenGL mit Java   WiSe 2010 / 2011   6/12
Toon Shading


Schritt 2: Berechnung des Shading
     Beleuchtungsberechnung wie bei diffuser Komponente
     Danach Abbildung auf wenige Schattierungsstufen
     Umsetzung mittels eines Shader-Programms
// second renderpass

// render front faces using a shader
gl.glFrontFace(GL2.GL_CCW);
gl.glPolygonMode(GL2.GL_FRONT, GL2.GL_FILL);

shader.activate(gl);

// render object
deathstar.draw(gl);

shader.deactivate(gl);


     Johannes Diemke             OpenGL mit Java       WiSe 2010 / 2011   7/12
Toon Shading


Schritt 2: Berechnung des Shading (Forts.)
     Vertex-Shader
           Transformiert Vertex in den Clipspace
           Berechnet Eyespace-Normale
           ¨
           Ubergibt Eyespace-Normale an den Fragment-Shader



varying vec3 eyeSpaceNormal;

void main() {

    eyeSpaceNormal = gl_NormalMatrix * gl_Normal;
    gl_Position = ftransform();
}




     Johannes Diemke             OpenGL mit Java         WiSe 2010 / 2011   8/12
Toon Shading


Schritt 2: Berechnung des Shading (Forts.)
     Fragment-Shader
           Pro-Fragment-Berechnung des Shading
           Beleuchtungsberechnung wie bei diffuser Komponente
           Berechnet Kosinus des Winkels zwischen Normale und Lichtvektor
           (Directional Light)


varying vec3 eyeSpaceNormal;

void main() {

    vec3 normal = normalize(eyeSpaceNormal);

    float intensity = dot(normalize(gl_LightSource[0].position.xyz), normal);
    gl_FragColor = toonify(intensity);
}



     Johannes Diemke             OpenGL mit Java            WiSe 2010 / 2011    9/12
Toon Shading


Schritt 2: Berechnung des Shading (Forts.)
     Fragment-Shader (Forts.)
           Abbildung auf wenige Schattierungsstufen uber toonify()
                                                    ¨


vec4 toonify(in float intensity) {

    if(intensity > 0.95)
        return vec4(0.5, 1.0,   0.5, 1.0);
    else if(intensity > 0.5)
        return vec4(0.3, 0.6,   0.3, 1.0);
    else if(intensity > 0.25)
        return vec4(0.2, 0.4,   0.2, 1.0);
    else
        return vec4(0.1, 0.2,   0.1, 1.0);
}




     Johannes Diemke               OpenGL mit Java        WiSe 2010 / 2011   10/12
Literatur


 Dave Shreiner
 OpenGL Programming Guide
 http://www.opengl-redbook.com/
 Richard S. Wright, Benjamin Lipchak und Nicholas Haemel
 OpenGL SuperBibel
 http://www.starstonesoftware.com/OpenGL/
 Randi J. Rost
 OpenGL Shading Language
 http://www.3dshaders.com/
 Tomas Akenine-M¨ller, Eric Haines und Naty Hoffman
                o
 Real-Time Rendering
 http://www.realtimerendering.com/

   Johannes Diemke           OpenGL mit Java      WiSe 2010 / 2011   11/12
Literatur


 Edward Angel
 Interactive Computer Graphics
 http://www.cs.unm.edu/˜angel/
 Gerald Farin und Dianne Hansford
 Practical Linear Algebra
 http://www.farinhansford.com/books/pla/
 Fletcher Dunn und Ian Parberry
 3D Math Primer for Graphics and Game Development
 www.gamemath.com/




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

More Related Content

Similar to 2010-JOGL-11-Toon-Shading

2010-JOGL-07-Hinweise-Uebungsblatt05
2010-JOGL-07-Hinweise-Uebungsblatt052010-JOGL-07-Hinweise-Uebungsblatt05
2010-JOGL-07-Hinweise-Uebungsblatt05Johannes Diemke
 
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-RemovalJohannes Diemke
 
Rich Graphics & OpenGL mit Android
Rich Graphics & OpenGL mit AndroidRich Graphics & OpenGL mit Android
Rich Graphics & OpenGL mit AndroidDominik Helleberg
 
2010-JOGL-02-Einfuehrung
2010-JOGL-02-Einfuehrung2010-JOGL-02-Einfuehrung
2010-JOGL-02-EinfuehrungJohannes Diemke
 
2010-JOGL-12-Projection-Shadows
2010-JOGL-12-Projection-Shadows2010-JOGL-12-Projection-Shadows
2010-JOGL-12-Projection-ShadowsJohannes Diemke
 

Similar to 2010-JOGL-11-Toon-Shading (6)

2010-JOGL-07-Hinweise-Uebungsblatt05
2010-JOGL-07-Hinweise-Uebungsblatt052010-JOGL-07-Hinweise-Uebungsblatt05
2010-JOGL-07-Hinweise-Uebungsblatt05
 
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal
 
Rich Graphics & OpenGL mit Android
Rich Graphics & OpenGL mit AndroidRich Graphics & OpenGL mit Android
Rich Graphics & OpenGL mit Android
 
2010-JOGL-02-Einfuehrung
2010-JOGL-02-Einfuehrung2010-JOGL-02-Einfuehrung
2010-JOGL-02-Einfuehrung
 
2010-JOGL-12-Projection-Shadows
2010-JOGL-12-Projection-Shadows2010-JOGL-12-Projection-Shadows
2010-JOGL-12-Projection-Shadows
 
WPF 3D Programmierung
WPF 3D ProgrammierungWPF 3D Programmierung
WPF 3D Programmierung
 

More from Johannes Diemke

Pfadplanung mit harmonischen Potentialfeldern
Pfadplanung mit harmonischen PotentialfeldernPfadplanung mit harmonischen Potentialfeldern
Pfadplanung mit harmonischen PotentialfeldernJohannes Diemke
 
2010-JOGL-08-Torus-Knoten
2010-JOGL-08-Torus-Knoten2010-JOGL-08-Torus-Knoten
2010-JOGL-08-Torus-KnotenJohannes Diemke
 
2010-JOGL-05-Transformationen
2010-JOGL-05-Transformationen2010-JOGL-05-Transformationen
2010-JOGL-05-TransformationenJohannes Diemke
 
2010-JOGL-01-Organisation
2010-JOGL-01-Organisation2010-JOGL-01-Organisation
2010-JOGL-01-OrganisationJohannes Diemke
 
Einführung in minimale Spannbäume und deren Berechnung (Vortrag)
Einführung in minimale Spannbäume und deren Berechnung (Vortrag)Einführung in minimale Spannbäume und deren Berechnung (Vortrag)
Einführung in minimale Spannbäume und deren Berechnung (Vortrag)Johannes Diemke
 
Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)
Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)
Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)Johannes Diemke
 
Software Produktlinien: Einführung und Überblick (Vortrag)
Software Produktlinien: Einführung und Überblick (Vortrag)Software Produktlinien: Einführung und Überblick (Vortrag)
Software Produktlinien: Einführung und Überblick (Vortrag)Johannes Diemke
 
Theory Exploration (Ausarbeitung)
Theory Exploration (Ausarbeitung)Theory Exploration (Ausarbeitung)
Theory Exploration (Ausarbeitung)Johannes Diemke
 
Theory Exploration (Vortrag)
Theory Exploration (Vortrag)Theory Exploration (Vortrag)
Theory Exploration (Vortrag)Johannes Diemke
 
Domainvergabe durch die DENIC (Vortrag)
Domainvergabe durch die DENIC (Vortrag)Domainvergabe durch die DENIC (Vortrag)
Domainvergabe durch die DENIC (Vortrag)Johannes Diemke
 
Team Oldenburger Robo-Fußball – Abschlussbericht der Projektgruppe 2010
Team Oldenburger Robo-Fußball – Abschlussbericht  der Projektgruppe  2010Team Oldenburger Robo-Fußball – Abschlussbericht  der Projektgruppe  2010
Team Oldenburger Robo-Fußball – Abschlussbericht der Projektgruppe 2010Johannes Diemke
 
Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)
Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)
Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)Johannes Diemke
 
Agile Vorgehensmodelle in der Softwareentwicklung: Scrum
Agile Vorgehensmodelle in der Softwareentwicklung: ScrumAgile Vorgehensmodelle in der Softwareentwicklung: Scrum
Agile Vorgehensmodelle in der Softwareentwicklung: ScrumJohannes Diemke
 
Vorstellung des Roboterfußball-Teams TORF (Vortrag)
Vorstellung des Roboterfußball-Teams TORF (Vortrag)Vorstellung des Roboterfußball-Teams TORF (Vortrag)
Vorstellung des Roboterfußball-Teams TORF (Vortrag)Johannes Diemke
 

More from Johannes Diemke (16)

Polymorphie
PolymorphiePolymorphie
Polymorphie
 
Pfadplanung mit harmonischen Potentialfeldern
Pfadplanung mit harmonischen PotentialfeldernPfadplanung mit harmonischen Potentialfeldern
Pfadplanung mit harmonischen Potentialfeldern
 
2010-JOGL-08-Torus-Knoten
2010-JOGL-08-Torus-Knoten2010-JOGL-08-Torus-Knoten
2010-JOGL-08-Torus-Knoten
 
2010-JOGL-05-Transformationen
2010-JOGL-05-Transformationen2010-JOGL-05-Transformationen
2010-JOGL-05-Transformationen
 
2010-JOGL-01-Organisation
2010-JOGL-01-Organisation2010-JOGL-01-Organisation
2010-JOGL-01-Organisation
 
Boost C++ Libraries
Boost C++ LibrariesBoost C++ Libraries
Boost C++ Libraries
 
Einführung in minimale Spannbäume und deren Berechnung (Vortrag)
Einführung in minimale Spannbäume und deren Berechnung (Vortrag)Einführung in minimale Spannbäume und deren Berechnung (Vortrag)
Einführung in minimale Spannbäume und deren Berechnung (Vortrag)
 
Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)
Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)
Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)
 
Software Produktlinien: Einführung und Überblick (Vortrag)
Software Produktlinien: Einführung und Überblick (Vortrag)Software Produktlinien: Einführung und Überblick (Vortrag)
Software Produktlinien: Einführung und Überblick (Vortrag)
 
Theory Exploration (Ausarbeitung)
Theory Exploration (Ausarbeitung)Theory Exploration (Ausarbeitung)
Theory Exploration (Ausarbeitung)
 
Theory Exploration (Vortrag)
Theory Exploration (Vortrag)Theory Exploration (Vortrag)
Theory Exploration (Vortrag)
 
Domainvergabe durch die DENIC (Vortrag)
Domainvergabe durch die DENIC (Vortrag)Domainvergabe durch die DENIC (Vortrag)
Domainvergabe durch die DENIC (Vortrag)
 
Team Oldenburger Robo-Fußball – Abschlussbericht der Projektgruppe 2010
Team Oldenburger Robo-Fußball – Abschlussbericht  der Projektgruppe  2010Team Oldenburger Robo-Fußball – Abschlussbericht  der Projektgruppe  2010
Team Oldenburger Robo-Fußball – Abschlussbericht der Projektgruppe 2010
 
Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)
Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)
Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)
 
Agile Vorgehensmodelle in der Softwareentwicklung: Scrum
Agile Vorgehensmodelle in der Softwareentwicklung: ScrumAgile Vorgehensmodelle in der Softwareentwicklung: Scrum
Agile Vorgehensmodelle in der Softwareentwicklung: Scrum
 
Vorstellung des Roboterfußball-Teams TORF (Vortrag)
Vorstellung des Roboterfußball-Teams TORF (Vortrag)Vorstellung des Roboterfußball-Teams TORF (Vortrag)
Vorstellung des Roboterfußball-Teams TORF (Vortrag)
 

2010-JOGL-11-Toon-Shading

  • 1. CARL VON OSSIETZKY Toon Shading Johannes Diemke ¨ Ubung im Modul OpenGL mit Java Wintersemester 2010/2011
  • 2. Toon Shading Grundlagen Gelegentlich auch Cel Shading genannt Verfahren zum nicht-fotorealistischen Rendern Imitiert Zeichenstil von Comics Charakteristika Fette Außenlinien Wenige Schattierungsstufen Verwendung in Zeichentrickfilmen und Computerspielen Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 2/12
  • 3. Toon Shading The Legend of Zelda: The Wind Waker Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 3/12
  • 4. Toon Shading Team Fortress 2 (Toon Shading Mod) Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 4/12
  • 5. Toon Shading Umsetzung Mehrere alternative Vorgehensweisen Von trivial bis anspruchsvoll Trade-off zwischen Komplexit¨t und visueller Qualit¨t a a Ein m¨gliches Vorgehen o 1 Zeichnen der Back-Faces mit fetten Linien 2 Berechnung des Shading Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 5/12
  • 6. Toon Shading Schritt 1: Zeichnen der Back-Faces Zeichnen der Back-Faces Verwendung von fetten schwarzen Linien // setup gl.glEnable(GL2.GL_CULL_FACE); ... // first renderpass gl.glLineWidth(3.0f); gl.glColor3f(0.0f, 0.0f, 0.0f); // render back faces using lines gl.glFrontFace(GL2.GL_CW); gl.glPolygonMode(GL2.GL_FRONT, GL2.GL_LINE); // render object deathstar.draw(gl); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 6/12
  • 7. Toon Shading Schritt 2: Berechnung des Shading Beleuchtungsberechnung wie bei diffuser Komponente Danach Abbildung auf wenige Schattierungsstufen Umsetzung mittels eines Shader-Programms // second renderpass // render front faces using a shader gl.glFrontFace(GL2.GL_CCW); gl.glPolygonMode(GL2.GL_FRONT, GL2.GL_FILL); shader.activate(gl); // render object deathstar.draw(gl); shader.deactivate(gl); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 7/12
  • 8. Toon Shading Schritt 2: Berechnung des Shading (Forts.) Vertex-Shader Transformiert Vertex in den Clipspace Berechnet Eyespace-Normale ¨ Ubergibt Eyespace-Normale an den Fragment-Shader varying vec3 eyeSpaceNormal; void main() { eyeSpaceNormal = gl_NormalMatrix * gl_Normal; gl_Position = ftransform(); } Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 8/12
  • 9. Toon Shading Schritt 2: Berechnung des Shading (Forts.) Fragment-Shader Pro-Fragment-Berechnung des Shading Beleuchtungsberechnung wie bei diffuser Komponente Berechnet Kosinus des Winkels zwischen Normale und Lichtvektor (Directional Light) varying vec3 eyeSpaceNormal; void main() { vec3 normal = normalize(eyeSpaceNormal); float intensity = dot(normalize(gl_LightSource[0].position.xyz), normal); gl_FragColor = toonify(intensity); } Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 9/12
  • 10. Toon Shading Schritt 2: Berechnung des Shading (Forts.) Fragment-Shader (Forts.) Abbildung auf wenige Schattierungsstufen uber toonify() ¨ vec4 toonify(in float intensity) { if(intensity > 0.95) return vec4(0.5, 1.0, 0.5, 1.0); else if(intensity > 0.5) return vec4(0.3, 0.6, 0.3, 1.0); else if(intensity > 0.25) return vec4(0.2, 0.4, 0.2, 1.0); else return vec4(0.1, 0.2, 0.1, 1.0); } Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 10/12
  • 11. Literatur Dave Shreiner OpenGL Programming Guide http://www.opengl-redbook.com/ Richard S. Wright, Benjamin Lipchak und Nicholas Haemel OpenGL SuperBibel http://www.starstonesoftware.com/OpenGL/ Randi J. Rost OpenGL Shading Language http://www.3dshaders.com/ Tomas Akenine-M¨ller, Eric Haines und Naty Hoffman o Real-Time Rendering http://www.realtimerendering.com/ Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 11/12
  • 12. Literatur Edward Angel Interactive Computer Graphics http://www.cs.unm.edu/˜angel/ Gerald Farin und Dianne Hansford Practical Linear Algebra http://www.farinhansford.com/books/pla/ Fletcher Dunn und Ian Parberry 3D Math Primer for Graphics and Game Development www.gamemath.com/ Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 12/12