Vorbemerkung / NPR

Nicht-fotorealistisches Rendering oder Non-Photorealistic Rendering ( NPR) ermöglicht alles, was nicht unbedingt realitätsnah oder fotorealistisch aussehen soll. Durch Cartoon-Shader, Plugins oder eigene Vektor-Renderer lassen sich unendlich viele unterschiedliche Stile rendern. Saubere technische Zeichnungen, handgezeichnete Skizzen, Zeichnungen mit Filzstift, Edding oder Kohle, abstrakte Maleffekte oder div. Comic-Stile können gerendert werden. Durch Kombinationen, auch mit fotorealistischen Renderings, ist die Anzahl an kreativen Lösungen für Standbilder, Animation oder Echtzeitanwendungen unendlich groß.

Verschiedene Renderergebinsse:
Gerendert wurde mit dem Maya Software Renderer in Kombination mit dem Plugin Tomcat. Dieses Plugin verwendet Paint Effects Brushes für die Konturlinien. Effekte wie Ölfarben, Pastelkreide, Aibrush oder Buntstifte sind dadurch möglich.

Generell besteht ein nicht-fotorealistischer Shader bzw. Comic-Shader aus zwei Komponenten:

  • Outline bzw. Konturzeichnung: Durch eine Umrisslinie wird das Objekt definiert.
  • Color-Shading bzw. Farbfüllung: Füllt die Flächen des Objekts.
(a) Konturlinie im Vektor-Renderer gerendert (Ravix von electricrain)
(b) Konturlinie mit einem Cartoon-Shader; es entsteht eine geschwungene Linie
(c) Konturlinie und Farbfüllung mit einem Cartoon-Shader
(d) Fotorealistisches Rendering

Vergleich: Photorealistisches Rendering / Nicht-fotorealistisches Rendering

Farbfüllung

Anstatt mit einer Standardmethode wie der Phong-Beleuchtung einen Eckpunkt zu Beleuchten und glatte Farbverläufe zu erzeugen, kann auch in Stufen interploiert werden. Der Farbverlauf kann so verfremdet werden, dass die beleuchteten Objekte im Comic-Stil erscheinen. Meist wird für die Farb-Schattierung ein Lambert-Beleuchtungsmodell zur diffusen Beleuchtung verwendet. Der Winkel zwischen Flächennormale n und dem Lichtvektor L wird als Maß für die Abschwächung herangezogen. In den meisten Fällen wird die Abschwächung durch einen Farbverlauf eingestellt.

Die Beleuchtung wird nach dem Beleuchtungsmodell von Lambert berechnet. Der Winkel zwischen Flächennormale und Lichtvektor bestimmt nach dem Beleuchtungsmodell von Lambert die Intensität des darzustellenden Punktes. Das Color-Shading der Kugel wird durch einen Farbverlauf gesteuert. Der abgebildete Farbverlauf definiert ein Color-Shading nach folgenden Regeln:
90°-80° = RGB (102/102/102)
79°-60° = RGB (153/153/153)
59°-30° = RGB (204/204/204)
29°-0° = RGB (255/255/255)
Ein Cartoon-Shader mit unterschiedlichen Verläufen:
Der Farbverlauf des linken Schaders verläuft linear, der rechte Shader erzeugt harte Schattierungen. Die für den Comic-Look so typische Umrisslinie wird ähnlich berechnet.

Konturlinie

Für Konturlinien gibt es verschiedene Ansätze, die jeweils ihre eigenen Vor- und Nachteile haben. Einige generelle Varianten für Umrisslinien sind:

  • Vektor-Renderer eignen sich besonders für exakte Linienzeichnungen, jedoch nicht für handgezeichnete geschwungene Linien. Es lassen sich die Stichbreite sowie die Detailzeichnung innerhalb des Objektes beeinflussen. Eine konstante Winkeleinstellung zwischen den Flächennormalen entscheidet,ob eine Linie gezeichnet wird oder nicht.
  • Plugins wie z. B. Tomcat verknüpfen Werkzeugspitzen (Paint Brushes) mit den berechneten Konturlinien. Effekte wie Ölfarben, Pastelkreide, Aibrush oder Buntstifte sind dadurch auch für Umrisslinien möglich.
  • Cartoon-Shader, der abhängig vom Winkel zwischen Kamera und Flächennormale über einen Farbverlauf Konturlinien berechnet. Diese Lösung eignet sich eher für organische bzw. runde Formen.

(a) Outline Shading mit einem Cartoon-Shader (Ramp-Shader mit Sampler-Info)
(b) Vektor-Renderer: Konturlinie= 4.0 pt |Kantendetail= 90°
(c) Vektor-Renderer: Konturlinie= 4.0 pt | Kantendetail= 45°
(d) Vektor-Renderer: Konturlinie= 4.0 pt | Kantendetail= 90° | verdekte Linien werden berücksichtigt

(a) Outline Shading mit einem Cartoon-Shader (Sampler-Info)
(b) Outline im Vektor-Renderer Ravix von electricrain gerendert

Konturlinie durch Geometrie

Eine weitere Möglichkeit für Konturlinien ist eine zusätzliche invertierte und skalierte Geometrie: Zuerst wird das Originalobjekt dupliziert. Dieses Duplikat wird in Richtung der Flächennormalen skaliert, quasi aufgeblasen und umschließt somit das gesamte Originalobjekt. Die Flächennormalen des Duplikats werden invertiert und das Objekt bzw. das neue Material (je nach Software abhängig) wird auf einseitig oder single sided eingestellt. Somit erscheint das Original und das Duplikat bildet die Konturlinie. Die Farbe der Umrisslinie wird durch ein neues Material definiert, die Dicke ist vom Skalierungswert des Duplikats abhängig.
Diese Methode eignet sich für einfache und runden/organische Objekte und ist in der Regel nicht besonders rechenintensiv. Dadurch ist diese Methode auch für Echtzeitanwendungen sinnvoll. Bei eckigen Objekten wie z.B. bei technischen Visualisierungen eignet sich der Vektor-Renderer, der jedoch wesentlich länger rendert.

Beispiel für Konturlinie durch Geometrie in Echtzeitanwendung: XIII

(a) skaliertes Duplikat mit einem Lambert-Shader
(b) skaliertes Duplikat mit invertierten Normalen (das Material bzw. Objekt ist auf einseitig bzw. single sided eingestellt)
(c) skaliertes Duplikat mit lichtunabhängigem Material
(d) originales Objekt
(e) originales Objekt mit skaliertem Duplicat mit invertierten Normalen

Konturlinie durch Geometrie

Vektor-Renderer

Vektor-Renderer wie Swift 3D oder Illustrate sind eigenständige Renderer. Diese können eine 3d-Szene wie ein Standard-Renderer rastern bzw. als Pixel-Grafik berechen. Zusätzlich kann die Szene auch in 2d-Vektoren zu Kurven und Flächen berechnet werden. 2d-Vektorformaten wie Adobe Illustrator, EPS-Daten oder Macromedia SWF sind mögliche Exportformate. Vektor-Renderer reduzieren den Farbraum der 3d-Szene auf ein, zwei oder mehrere Farben. Umrisslinien, Schatten, Glanzlichter und Reflexionen werden bei Bedarf berücksichtigt. Vektor-Renderer basieren auf dem Erkennen von Geometriekanten und eignen sich nicht für Rasterkanten, wie bei prozeduralen Texturen oder Bitmaps. Fällt die Wahl auf einen Vektor-Renderer, sollten keine Maps verwendet werden. Generell verursachen Rasterkanten besonders in Animationen unerwünschte Flackereffekte.

Vektor-Animation

(a) Vektor-Renderer: Konturlinie der Geometrie, ohne Füllfarbe, als 2d-Vektordatei (Adobe Illustrator) gerendert.
(b) Vektor-Renderer: Konturlinie der Geometrie mit Füllfarbe (Full Color)
(c) Vektor-Renderer: Konturlinie der Geometrie mit Füllfarbe und Verlauf (Area Gradient), zusätzliche Glanzlichter und Reflexionen
(d) Standard-Renderer: Ein Cartoon-Shader mit prozeduraler Textur
(e) Vektor-Renderer: Konturlinie der Geometrie mit Füllfarbe (Full Color) in Kombination mit prozduraler Textur

Vektor-Renderer Link
Illustrate - Cell and illustration renderer
http://www.davidgoul.com
Swift 3D - Cell and illustration renderer electric rain
Ravix - Cell and illustration renderer electric rain

Module, die für die Durchführung vorausgesetzt werden