Hidden-Line-Removal mit Polygon Offset - cg

Transcription

Hidden-Line-Removal mit Polygon Offset - cg
Solid Wireframes
Dr.-Ing. Simon Adler
Wireframes
Einführung
 Visualisierung der Geometrietopologie
 Beurteilung der Geometriegüte
 Qualität von Primitiven
 Homogenität
 Geometrieschäden
 Relevant für
 Simulationen: FEM, CFD
 Visualisierung: Bleeding Edges
 Primitive Rendern als Linienzüge
 Verdeckung der Linien im Viewport
 erfordert Hidden-Line-Removal
 Probleme beim Tiefeneindruck
 Liniendicke tiefenunabhängig
 Zulaufen der Darstellung in der Tiefe
Multi-Pass Wireframes
Hidden-Line-Removal
Einfaches Hidden-Line-Removal
 2-Pass Rendering
 Pass 1: Oberfläche (Color-, Depth-Buffer)
 Pass 2: Gitternetz (Depth-Test)
 Gut: Oberfläche verdeckt rückseitige Linien
 Aber:




kein Antialiasing
doppeltes Rendern der Geometrie
Konstante Liniendicke in der Entfernung
Z-Fighting aufgrund ähnlicher Tiefenwerte
Multi Pass
Multi-Pass Wireframes
Hidden-Line-Removal mit Polygon Offset
Hidden-Line-Removal mit Polygon Offset
 Variante 2: Polygon Offset
 Offset in Tiefenwerten
 distanzabhängiger + konstanter Tiefenwert
void glPolygonOffset(GLfloat factor, GLfloat units)
 Offset Faktoren
 units: konstanter Offset (=1)
 factor: tiefenabhängig (=1)
 Fragmente mit unterschiedlichen Tiefenwerten
(Lineare- vs. Trilineare Interpolation)
 Erforderlicher Offset abhängig vom Primitiv
Multi Pass
Solid Wireframes
bisher: Wireframe zusätzlich rendern als Liniengeometrie
Solid Wireframes
 Wireframe mit dem Surface (Solid) rendern
 Manipulieren von Fragmenten an Primitivkanten
 Verallgemeinert: NPR zur Hervorhebung markanter Linien
Hajagos 2012: Fast silhouette and crease edge
synthesis with geometry shaders
 Silhouette Rendering
 Iso-Linien Darstellung
 Vorteile




keine Tiefenprobleme
Antialiasing möglich
tiefenabhängige Liniendicke
Gestalltungsmöglichkeit der Linien
Celes 2010, Texture-based wireframe rendering
Solid Wireframes
Relevante Shader in der Render Pipeline
 Vertex Shader
 Zugriff auf Eigenschaften einzelner Vertices
 Model- und Perspektiven Transformation
 Output: Clip-Koordinaten
 Geometry Shader
 Zugriff auf Eigenschaften der Primitive (Dreiecke, Linien, …)
 Änderungen der Vertex-Attribute
 Generieren zusätzlicher Primitive
 Fragment Shader
 Zugriff auf Farbinformationen von Pixelkandidaten
 z.B. Bumpmapping, Textureffekte
Vertex Specification
Vertex Shader
Geometry Shader
Post-Processing
Primitive Assembly
Rasterization
Fragment Shader
Solid Wireframes
Grundprinzip
 Herkömmliches Rendern des Dreieckes
 Erforderlich:
 kürzester Abstand des Fragments zu den Primitivkanten
 Jedes Kante hälfte der Wireframe-Linie
 Unterschiedliche Zielstellungen
 Performance
 Einfluss auf die Darstellung des Wireframes
(Grundlage für NPR-Verfahren)
 Primitivart: Dreieck, Quad, N-GON
 Art der Liniendicke (Pixel / Units)
 Technologische Randbedingungen
 Nur Verwendung bestimmter Shader
Bsp.: WebGL – keine Unterstützung von Geometry Shaders
Solid Wireframes – Prozedural
Höhen-Ansatz
 Ziele
 Performante antialiased Wireframes
 Liniendicke: Pixel
 Fokus: Dreiecke (Quads)
 Geometry Shader
 Projektion der Vertices in Viewport Space
 Berechnen: Abstand Vertex mit
gegenüberliegender Kante (ℎ𝑖 )
 Kantenabstände als zusätzliche Vertex-Attribute
 Fragment Shader
 Mittels trilinearer Interpolation Abstände zu allen
Kanten
 Distanzabhängige Kantenglättung
𝑓 𝑥, 𝑑 =
𝑥 2
−8 𝑑
2
White Paper: Solid Wireframe, Februar 2007, NVIDIA Cooperation
Prozedural
Prozedural
Solid Wireframes - Prozedural
Sonderfälle
 Geometry Shader: „Projektion von Vertices in
Viewport Koordinaten“  nicht immer möglich!
 Lösung 1: Durchschnittliche Größe der Vertices <
near Plane Abstand
 Vektoren ausgehend von Validen zu invaliden
Nachbarn  Abstandsberechnung zu Vektoren
 Erfordert Fallunterscheidung im Fragment-Shader
 Ergebnisse





Performantes Rendering geglätteter Linien
Liniendicke in px gegeben  notwendig?
Sonderfälle ungünstig
Visuelle Effekte möglich
Geometry Shader erforderlich
Bildquelle Quelle: Paper und Präsentation: Baerentzen et. al, Single-Pass Wireframe Rendering, SIGGRAPH, 2006
Solid Wireframes – Geometrie basierend
ID-Buffer Methode
ID-Buffer Methode
 Zielstellung: Wireframes für N-Gons
 Linien des Wireframes als Rechtecke rendern
 Renderpass 1 – Erstellen ID-Buffer
 Rendern der Geometrie (Farbpuffer  Textur)
 Jedes Primitiv in eigener Farbe
 Tiefenpuffer: schreiben und Test
 Renderpass 2 – Rendern der Linienpolygone
 Tiefenpuffer: nur Test
 Nur Fragmente erzeugen, wenn ID Buffer übereinstimmt
(erfordert projektives Texturemapping)
 Renderpass 3 – Render der Oberfläche
 Depth Test = Equal, Blend Color
Baerentzen et. al , Two Methods for Antialiased Wireframe Drawing with Hidden Line Removal, In: Proceedings of the 24th Spring Conference on Computer Graphics (SCCG), 2008
Solid Wireframes – Geometrie basierend
ID-Buffer Methode - Linienpolygone
 Geometry Shader: Linienpolygone generieren
 Input: Linien des Wireframes (Bsp. Kante e2 )
 Kante 𝑒2 aus Vertices 𝑣0 , 𝑣1
 Höhe von 𝑒2 zum Gegenvertex 𝑣2
 Fläche entsprechend der Liniendicke
 Textur für die Linienfläche
 Ergebnisse





Wireframes in Modelleinheiten
Über Textur freie Gestaltung
Prinzip übertragbar für NPR Darstellungen
Drei Render Passes  Performance
Erfordert Render-To-Texture!
Texture
Solid Wireframes – Texture based
Textur basierte Methode
s=0
s=1
 Wireframes mittels 1D Texturen:
 Primitive rendern (wieder) halbe Wireframe Linien
 Definition von Texturkoordinaten je Primitiv
 Dreieck: 0.0 für i-te Texturkomponente des i-ten Vertex, sonst 1.0
 Quad: -1 und 1 für gegenüberliegende Kanten (2D Koordinaten)
 Texturkoordinate [0, abs(min(tex.xyz))]
Celes et. al , 2010: Texture-Based Wireframe Rendering, Proceedings of the 23rd Conference on Graphics, Patterns and Images (SIBGRAPI)
Solid Wireframe – Texture based
Texture-Based
 Ergebnisse
 KEIN Shader erforderlich
 Fragment-Shader ermöglicht Verzicht auf Textur
(Glättungsfunktion des ersten Ansatzes)
 Wegen Textur: Antialiased
 Liniendicke weder Pixel- noch Unitbasierend
(weitestgehend Units)
 Alternativ: MapMapping für konstante Pixeldichte
 Attenuation: Mit 2D Texturen denkbar
 Mapping Prinzip auch für Isolinien
(tex.s abhängig von Höhenwerten)
Texture MipMap
Solid Wireframes
Wireframes zusammengefasst
 Unterschiedliche Methoden der Wireframe-Visualisierung




Multi-Pass Wireframes
Prozedurale Wireframes
Geometrische Wireframes
Texture-bases Wireframes
Multi-Pass Rendering (mit / ohne Polygon Offset)
Höhen Berechnung für Dreiecksvertices
ID-Buffer + Generierung texturierter Quads
Vorberechnung von Texturkoordinaten
 Hohe Relevanz in Modellierung und Konstruktion
 Ausgangsbasis für Illustrative NPR-Darstellungen
 Unterschiede der Verfahren
 Art der unterstützten Primitive
 Einfluss auf die Darstellungsart der Linien
 Einheit und Verhalten der Liniendicke
Solid Wireframes
Fragen?