Sketch-Shading von 3D-Objekten

Werbung
Sketch-Shading von 3D-Objekten
Sebastian Greif
Erhan Gürbüz
Fachbereich Informatik
Hochschule Darmstadt
ABSTRACT
In diesem Paper wird ein Non-Photorealistic Rendering
Verfahren zum skizzenhaften Darstellen von 3D-Objekten
beschrieben. Das Hauptaugenmerk liegt hierbei auf der
Extraktion der relevanten Objektkanten. Hierzu arbeitet
das vorgestellte Verfahren im 2D-Bildraum auf der
Tiefen- und Normal-Map des Objektes.
Verfahren angewandt, um die grafischen Informationen
möglichst anschaulich zu präsentieren, ohne dabei auf
Photorealismus abzuzielen.
Das vermehrte Aufkommen von Shader-Technologien auf
Grafikkarten und den dazugehörigen Hochsprachen wie
HLSL oder GLSL hat ebenfalls dazu beigetragen, dass
solche Non-Photorealistic Rendering Effekte oftmals mit
verhältnismäßig einfachen Mitteln zu realisieren sind.
1. Einleitung
Der Gegenstand der heutigen Forschungen in der
Computergrafik ist häufig eine möglichst realitätsnahe
Darstellung computergenerierter Objekte. Durch die
ständige Weiterentwicklung, sowohl der Grafikhardware
als auch der Renderingverfahren, ist die Visualisierung
immer realistischerer Szenen in Echtzeit möglich.
Jedoch ist Photorealismus nicht immer die beste Methode
um grafische Informationen darzustellen. In der
Geschichte der Kunst kann man beobachten, dass neben
realistischen Darstellungen auch viele andere Stile ihre
große Bedeutung hatten und weiterhin haben. Auch im
Bereich der Computergrafik spielt das Non-Photorealistic
Rendering, oder kurz NPR, eine sehr wichtige Rolle.
Beim NPR liegt der Schwerpunkt nicht auf der
realistischen Darstellung, sondern vielmehr auf der
Nachahrmung bestimmter künstlerischer Stilmittel. So
kommen in heutigen Computerspielen oder Filmen
oftmals “künstlerische” Effekte, wie zum Bespiel das
Cartoon-Rendering, zum Einsatz. Auch bei der
Darstellung von technischen Illustrationen werden oft
Im Folgenden soll nun Sketch-Shading als ein Vetreter
der NPR-Verfahren vorgestellt werden. Eine mögliche
Anwendung dieses Verfahrens, ist beispielsweise die
künstlerische Darstellung von Exponaten in einem
Museum. Dieses Szenario wurde gewählt, um die
Ergebnisse des Sketch-Shaders in einer Anwendung zu
demonstrieren. Sowohl die Ergebnisbilder des SketchShaders, als auch die Screenshots der Anwendung, sind in
Kapitel 3 zu finden.
Die dargestellten Modelle sind frei zugänglich unter [7]
und [8].
2. Sketch-Shading
Sketch-Shading ist ein Verfahren, zur skizzenhaften
Darstellung einer Szene. Die Objekte der Szene sollen
den Eindruck vermitteln, als wären sie per Hand
skizzenhaft mit einem Bleistift gezeichnet wurden.
Hierbei findet meist keine Schattierung der Objekte statt,
sondern die Darstellung erfolgt ausschließlich über die für
die Form des Objektes relevanten Kanten. Eine typische
Bleistiftskizze ist in Abbildung 1 dargestellt.
2.1 Extraktion der Kanten
Eine einfache Möglichkeit zum Erkennen von Kanten ist
die Kantendetektion im 2D-Bildraum. Der Vorteil dieses
Verfahrens gegenüber einer Detektion der Kanten im 3DObjektraum ist es, dass es unabhängig von der Geometrie
und Topologie des zugrunde liegenden Polygonnetzes
arbeitet. Weiterhin lässt diese Art der Kantendetektion
einen
Einsatz
von
konventionellen
Bildbearbeitungsverfahren zu. Einige Verfahren zur
Extraktion von Silhouetten im 3D-Objektraum sind in [3]
beschrieben und werden hier nicht näher erläutert.
Abbildung 1: Typische Bleistiftskizze
Bei den relevanten Kanten handelt es sich nicht nur um
die Kontur, also die Silhouette des Objektes. Vielmehr
müssen auch die inneren Kanten erkannt und dargestellt
werden, um bei dem sonst nicht schattiertem Objekt einen
räumlichen Eindruck der Form und Gestalt zu bekommen.
Bei den inneren Kanten handelt es sich um Knickkanten
und Unstetigkeiten in der Oberfläche.
Für die Extraktion der Kanten im Bildraum wird die
Szene zunächst aus der gewünschten Perspektive
gerendert. Anschließend wird das daraus entstandene Bild
in einer eigenen Textur gespeichert. Auf diesem
zweidimensionalem
Bild
lässt
sich
nun
ein
Kantendetektor anwenden, um dann die gefundenen
Kanten darzustellen oder weiter zu verarbeiten.
Das Problem bei einem auf diese Art gerendertem Bild ist
jedoch, dass die darin gefundenen Kanten nicht unbedingt
den Kanten entsprechen, welche für die Form des
Objektes ausschlaggebend sind. Zum Beispiel kann es bei
einem Objekt mit einer hochfrequenten Textur oder durch
unterschiedliche Schattierungen zu unerwünschten
Kanten kommen. Andererseits lassen sich keine Kanten
zwischen überlappenden Objekten oder Objektteilen mit
der selben Farbe oder Schattierung erkennen. Abbildung 3
aus [6] zeigt auf der linken Seite das Originalbild einer
schattierten und texturierten Szene. Auf der rechten Seite
ist das zugehörige Kantenbild zu sehen.
Abbildung 2: Die relevanten Kanten eines
Objektes. Silhouette (rot), Beispiel einer
Knickkante (gelb) und Beispiel einer
Abbruchkante (grün).
In Abbildung 2 werden die für das Sketch-Shading
wichtigen Kanten visualisiert. Rot dargestellt, ist die
Silhouette des Objektes. Bei der gelben Kante handelt es
sich um eine Knickkante. In dieser Kante treffen zwei
Flächen mit unterschiedlich orientierten Normalvektoren
aufeinander. Die grüne Kante stellt eine Abbruchkante
dar. Hierbei handelt es sich um eine Kante, die
beispielsweise bei einer Unstetigkeit in der Oberfläche
auftritt.
Abbildung 3: Kantendetektion einer schattierten Szene
aus [6].
Im Folgenden werden wir auf ein Verfahren eingehen,
welches teilweise bereits in [4] vorgestellt und ebenfalls
in [5] und [1] näher beschrieben wird. Dieses Verfahren
ist in der Lage, nicht nur die Silhouette des Objektes,
sondern auch die Knickkanten und Unstetigkeiten in der
Oberfläche zu detektieren. Hierbei dienen sowohl die
Normalen als auch die Tiefenwerte der darzustellenden
Polygone als Grundlage der Kantendetektion. Dieses
Verfahren ist auf Basis von Shadern leicht zu
implementieren und liefert sehr gute Ergebnisse in
Echtzeit.
2.1.1. Tiefen-Map
Um die oben erwähnten Probleme bei der Kantenfindung
zu umgehen, kann eine Tiefen-Map eingesetzt werden,
um bestimmte Kanten zu erkennen. Zur Generierung der
Tiefen-Map werden nicht die Farben der Pixel, sondern
die Tiefenwerte, also der Abstand zur Bildebene, der
entsprechenden Punkte im dreidimensionalen Raum in
eine Textur gerendert.
Daraufhin wird dann ein Kantendetektor, wie
beispielsweise der Sobel-Operator (siehe Anhang A), auf
das so entstandene Bild angewendet.
Dieses Verfahren liefert zum einen die Silhouette des
Objekts, da zwischen Objekt und Hintergrund
normalerweise immer ein Sprung in der Tiefe vorliegt.
Zum anderen werden zusätzlich innere Kanten bei
Unstetigkeiten in der Tiefe zwischen sich überlappenden
Objekten oder Objektteilen erkannt.
In Abbildung 4 ist das Verfahren der Tiefen-Map am
Beispiel von zwei verschiedenen Objekten dargestellt.
Auf den Abbildungen 4 a) und c) sind jeweils die TiefenMaps der gerenderten Objekte dargestellt. Die
Abbildungen 4 b) und d) zeigen die vom Kantendetektor
ermittelten Kanten. Wie in den Ergebnisbildern zu
erkennen ist, kann die Silhouette immer vollständig
extrahiert werden. Weiterhin ist zu sehen, dass die Kanten
bei den sich überlappenden Segeln in Abbildung 4 b)
ebenfalls gut detektiert werden, da hier offensichtlich eine
Unstetigkeit in der Tiefe vorliegt.
Auch bei diesem Verfahren, können nicht alle relevanten
Kanten eines Objektes ermittelt werden. So werden weder
Knickkanten, also Kanten zwischen Flächen deren
Normalvektoren stark voneinander abweichen, noch
Außenkanten zwischen Objekten, die annähernd in der
selben Tiefe liegen gefunden. Abbildung 4 d) zeigt, dass
die Knickkanten der Würfel auf Grundlage des TiefenBildes nicht erkannt werden können.
2.1.2. Normal-Map
Um ebenfalls die Kanten bei einer Änderung der
Oberflächenorientierung zu detektieren, müssen die
Normalvektoren, also die Ausrichtung der Flächen,
berücksichtigt werden.
Abbildung 4: Kantendetektion auf Grundlage einer
Tiefen-Map. a) und c) zeigen die Tiefen-Map und b) und
d) das Ergebnis der Kantendetektion
Hierzu ist es möglich eine Normal-Map als Grundlage des
Kantendetektors zu verwenden. Diese Map enthält für
jeden Pixel der Oberfläche eines Objektes den
zugehörigen Normalvektor. Normal-Maps lassen sich sehr
leicht unter Verwendung von Shadern erstellen. Dabei
werden zunächst im Vertexshader die von der
Anwendung übergebenen Normalvektoren jedes Vertices
über die einzelnen Pixel interpoliert. Anschließend
müssen die Komponenten der Normalvektoren im
Pixelshader dann noch auf das Intervall [0, 1]
transformiert werden, um diese in eine Textur speichern
zu können. Danach werden einfach die X-, Y- und ZKoordinaten der Normalvektoren in die RGB-Kanäle der
Textur abgelegt.
Durch Anwendung des Kantendetektors auf die
unterschiedlichen Kanäle der Normal-Map ist es nun
leicht möglich, Sprünge in der Ausrichtung der
Normalvektoren und damit die Knickkanten zwischen
unterschiedlich orientierten Flächen zu erkennen.
In Abbildung 5 a) und c) sind die Normal-Maps zweier
Objekte dargestellt. Die Farbe eines Pixels ergibt sich hier
also aus den Koordinaten des zugehörigen Normalvektors.
Der Farbraum ist hier leicht verschoben, da die
Koordinaten der Normalvektoren ja bereits auf das
Intervall [0, 1] abgebildet wurden.
Das Ergebnisbild des Kantendetektors b) zeigt, dass
sowohl die einzelnen Falten des Rockes, als auch die
Details im Kopfbereich der Statue mit Hilfe dieses
Verfahrens sehr gut extrahiert werden können. Gerade
diese feinen Details spielen eine große Rolle um die
geometrischen Beschaffenheiten eines Objektes gut
erkennen zu können und sind somit sehr wichtig für die
Realisierung des Sketch-Shaders.
Im Gegensatz zu dem Verfahren der Tiefen-Map in
Abbildung 4 d), ist es mit der Normal-Map nun einfach
möglich alle Knickkanten des Würfels, wie in Abbildung
5 d) zu sehen, zu identifizieren.
Jedoch zeigt die Abbildung 5 d) auch eine Schwäche
dieses Verfahrens. Wie man am obersten Würfel sehen
kann, wird die vordere Abbruchkante nicht durchgängig
erkannt. Das liegt offensichtlich daran, dass die beiden
sich überlappenden Flächen die gleiche Ausrichtung
haben, also den gleichen Normalvektor aufweisen.
Beispielsweise würden mit diesem Verfahren auch die
Kanten zwischen den sich überlappenden Segeln in
Abbildung 4 b) nicht vollständig erkannt werden.
2.1.3. Kombination der Tiefen- und Normal-Map
Um die, in den vorherigen beiden Kapiteln beschriebenen,
Nachteile sowohl der Tiefen- als auch der Normal-Map
zum vermeiden, können die beiden Verfahren miteinander
kombiniert werden. Die Kombination dieser Verfahren
ermöglicht eine Detektion aller, für das Sketch-Shading
relevanten, Kanten.
Abbildung 5: Kantendetektion auf Grundlage der
Normal-Map. a) und c) visualisieren die Normal-Map
und b) und d) das Ergebnis des Kantendetektors.
Wie bereits erwähnt wurde, liefert die Tiefen-Map die
Kanten, die bei Unstetigkeiten in der Tiefe entstehen und
durch die Normal-Map findet man die Knickkanten
zwischen unterschiedlich orientierten Flächenelementen.
Die Silhouette der Objekte, also die Abgrenzung gegen
den Hintergrund, kann sowohl aus der Tiefen-, als auch
aus der Normal-Map gewonnen werden. Es gibt natürlich
immer noch Kanten, die auch durch den Einsatz beider
Verfahren nicht erkannt werden können. Dieser Fall tritt
ein, wenn beispielsweise zwei sich überlappende
Objektteile annähernd in der selben Tiefe liegen und
zusätzlich die gleiche Ausrichtung aufweisen. Diese
Kanten sind jedoch meist nicht ausschlaggebend für die
korrekte geometrische Interpretation des Objektes und
können somit beim Sketch-Shading vernachlässigt
werden.
Für die Kombination der beiden Verfahren sind ebenfalls
nur zwei Render-Passes nötig. Hierfür werden im ersten
Render-Pass sowohl die Normalvektoren, als auch die
Tiefenwerte in eine einzige Textur geschrieben. Für den
Tiefenwert kann hierfür der Alpha-Kanal genutzt werden.
Dabei ist jedoch zu beachten, dass man dadurch nur eine
Genauigkeit von 8 Bit für die Tiefenwerten zur
Verfügung hat. Bei größeren Szenen mit mehreren
Objekten in verschiedenen Tiefen ist es ratsam, eine
höhere Auflösung für die Tiefenwerte zu verwenden.
Für das Sketch-Rendering, wird dann im zweiten RenderPass der Kantendetektor auf alle Kanäle der Textur und
damit sowohl auf die Normalvektoren als auch auf die
Tiefenwerte einzeln angewendet. Die Ergebniswerte der
einzelnen Kanäle gehen dann alle in das endgültige
Resultat der Kantendetektion für das aktuelle Pixel ein.
Hierbei wird der Tiefenwert stärker gewichtet, da die
Unterschiede im Tiefen-Kanal meist betragsmäßig sehr
klein sind.
Um den Eindruck einer Strichzeichnung zu erwecken, ist
es notwendig verschiedene Intensitäten bei den Kanten
darzustellen.
Das
heißt,
dass
bezüglich
des
Ergebniswertes der Kantendetektion nicht mit Hilfe eines
Schwellwertes eine binäre Entscheidung getroffen wird,
ob eine Kante gefunden wurde oder nicht. Vielmehr dient
der Ergebniswert des Kantendetektors direkt als
Grundlage für die Intensität der entsprechenden Kante.
Somit können verschieden stark ausgeprägte Kanten
durch unterschiedliche Grauabstufungen repräsentiert
werden.
Durch dieses Vorgehen wird auch erreicht, dass
beispielsweise stark gekrümmte Flächen eine leichte
Schattierung erhalten. Diese gekrümmten Flächen
beinhalten zwar keine Knickkanten, jedoch ist der
Unterschied in den interpolierten Normalvektoren zweier
benachbarter Pixel so groß, dass daraus eine leichte
Schattierung resultiert. Dies vermittelt den Eindruck, als
wären diese Flächen beispielsweise mit einer KohleZeichentechnik hervorgehoben wurden.
Auf Abbildung 6 a) ist die Normal-Map mit den über die
Flächen interpolierten Normalvektoren dargestellt. In der
Abbildung 6 b) ist gut zu erkennen, dass die stärker
gekrümmten Flächen am Griff oder Ausguss der
Teekanne leicht grau schattiert sind.
Abbildung 6: Schattierung von stark gekrümmten
Flächen. a) zeigt die Normal-Map und b) die
Schattierung der stark gekrümmten Flächen
2.2 Verwischen der Kanten
Bei dem Erstellen von Skizzen mit dem Bleistift,
entstehen fast nie scharfe, klar abgegrenzte Linien. Dies
liegt daran, dass die Mine des Bleistiftes abgerundet ist
und dadurch kein einheitlicher Druck auf das Papier
ausgeübt wird. So entstehen Kanten, deren Intensität nach
außen hin abnimmt. Eine ebenfalls häufig genutzte
Technik bei Skizzen ist das, in Kapitel 2.1.3 bereits
beschriebene, Hervorheben von bestimmten Details durch
Schattierung. Hierzu wird beispielsweise mit dem Bleistift
Graphit auf die Fläche aufgetragen und dann mit dem
Finger leicht verwischt.
Dieses Verfahren beruht auf der Kantendetektion im 2DBildraum anhand einer Tiefen- und Normal-Map.
Abbildung 8 zeigt einige Resultate des Sketch-Shaders.
Gerade bei hoch triangulierten 3D-Modellen mit vielen
Details liefert dieses Verfahren sehr schöne Ergebnisse.
Eine mögliche Erweiterung des Verfahrens wäre
beispielsweise eine Methode zur Erstellung von Linien
mit unterschiedlicher Stärken oder Linien die nicht
durchgezogen sind, um ein Absetzen des Bleistiftes zu
simulieren. Ein Verfahren hierfür, welches auf Stochastik
und physikalischen Partikel-Systemen basiert ist in [2]
beschrieben.
Abbildung 7: Blur des Bildes als Post-Effekt. a)
Originalbild der Kantenextraktion. b) Bild nach
Anwendung des Blur-Filters.
Um ein ähnliches Ergebnis bei dem Sketch-Shading zu
erreichen, wird als letzter Schritt ein Blur-Effekt auf das
Ergebnisbild der Kantenextraktion angewendet. Hierzu
werden im Pixel-Shader die Farbwerte des aktuellen und
der umliegenden Pixel aus dem Ergebnisbild gesampled
und mit einem 3x3 Gauss-Filter (siehe Anhang B)
geglättet.
Abbildung 7 zeigt den Vergleich des Originalbildes der
Kantenextraktion mit dem Ergebnis nach Anwendung des
Blur-Filters. Wie zu sehen ist, resultieren die in
Abbildung 7 a) noch sehr pixeligen schwarzen Linien im
linken Bildbereich, in geglätteten und somit weichen
Linien. Diese Linien ähneln eher einem von Hand
gezeichneten Bleistiftstrich und wirken dadurch
wesentlich realistischer. Die Übergänge der grauen
Schattierungen im Augen- und Nasenbereich der Figurine
sind in Abbildung 7 a) noch sehr stufig. Erst nach
Anwendung des Weichzeichners ähneln diese Bereiche
mehr einer Bleistiftschattierung.
3. Resultate
In diesem Paper wurde ein Non-Photorealistic Rendering
Verfahren vorgestellt, welches eine skizzenhafte
Darstellung von dreidimensionalen Modellen ermöglicht.
Abbildung 8: Ergebnisse des Sketch-Shaders bei drei
unterschiedlichen Modellen
Zur Demonstration des Sketch-Shaders wurde eine kleine
Anwendung entwickelt. Diese Anwendung ermöglicht es,
den Sketch-Shader auf ein beliebiges 3D-Model
anzuwenden. Die daraus enstandene Skizze, wird dann
auf einer Staffelei präsentiert (siehe Abbildung 9 und 10).
[4] Takafumi Saito and Tokiichiro Takahashi,
“Comprehensible Rendering of 3-D Shapes.” In Proc. of
SIGGRAPH ’90, pages 197–206, August 1990.
[5] Philippe Decaudin, “Cartoon-looking rendering of 3Dscenes,” Technical Report INRIA 2919, Universite de
Technologie de Compiegne, France, June 1996.
Abbildung 9: Sketch-Shading der Venus von Milo
[6] Thomas Strothotte, Stefan Schlechtweg. NonPhotorealistic Computer Graphics – Modeling, Rendering
and Animation. Morgan Kaufman Publishers, San
Francisco, 2002. ISBN 1-55860-787-0
[7] http://www.3DGurukul.com, zuletzt besucht am:
25.05.2007
[8] http://www.3DKingdom.org, zuletzt besucht am:
25.05.2007
A Sobel Kantendetektor
Bei dem Sobel-Operator handelt es sich um einen
einfachen Operator zur Kantendetektion im Bildraum.
Abbildung 10: Sketch-Shading einer Beethoven-Büste
Gy = S y ∗ I =
Literaturverzeichnis
[1] Aaron Hertzmann, “Introduction to 3D NonPhotorealistic Rendering: Silhouettes and Outlines”. In:
Stuart Green, editor, SIGGRAPH 99 Course Notes, ACM
SIGGRAPH, L.A., 1999
[2] Cassidy Curtis, “Loose and Sketchy Animation”. In
SIGGRAPH ’98: ACM SIGGRAPH 98 Electronic art and
animation catalog, ACM Press, New York, NY, USA,
page 145.
[ ]
[ ]
−1 0 1
G x = S x ∗ I = −2 0 2 ∗ I
−1 0 1
−1 −2 −1
0 0 0 ∗ I
1 2 1
Die Faltungsmatrix Sx angewandt auf das Bild I liefert die
vertikalen Kanten des Bildes und Sy die Horizontalen
Kanten. Eine richtungsunabhängige Kanteninformation
erhält man aus der Länge des Gradienten.
G =
G
2
x
 G 2y
B Gauss-Filter
[3] Bruce Gooch, Ashley Hartner, Mark Hartner, Elaine
Cohen. “Object Space Silhouette Algorithims”. University
of Utah. Unpublished 2003
Der Gauss-Filter ist eine Faltungsmatrix zur Bildglättung.
Im Folgenden ist die 3x3 Faltungsmatrix des Gauss-
Filters dargestellt, welche in diesem Paper Anwendung
fand.
[ ]
1 2 1
Gauss− Filter = 1/16 ∗ 2 4 2
1 2 1
Herunterladen