# Indigo Renderer

Indigo ist eine ehemals kostenlose, physikbasierte Renderengine zur Generierung photorealistischer Bilder. Es handelt sich hierbei um die reine Render-Engine – die Erstellung der Szene muss mit der Hilfe anderer Produkte erfolgen und zu Indigo exportiert werden.
Indigo Version 1 ist sowohl für den privaten als auch für den kommerziellen Gebrauch kostenlos, jedoch keine freie Software. Ab Version 2 wird sie kommerziell vertrieben.
Ein großer Vorteil von Indigo gegenüber vielen anderen Render-Engines besteht darin, dass es möglich ist, einen Rendervorgang zu beenden und später fortzusetzen. Das dafür benötigte Tool nennt sich „Indigo Resumer“. Indigo Resumer wird nicht benötigt, sondern stellt ein GUI für die entsprechenden Kommandozeilenbefehle dar. Neuere Versionen von Indigo erlauben das Anhalten und Wiederaufnehmen von Rendervorgängen, direkt in Indigo.

## Technik

Indigo unterscheidet sich von vielen anderen Rendersystemen vor allem darin, dass es zur Lösung der Rendergleichung ausschließlich Metropolis Light Transport verwendet. Auf diese Art und Weise kommt es ohne die Definition von Radiosity oder Photon-Mapping aus und erzeugt absolut realistische Abbildungen. Der Preis dieses Verfahrens ist die niedrige Geschwindigkeit des Renderns. Das Bild wird nicht zeilenweise berechnet, sondern nach dem Prinzip der Monte-Carlo-Simulation aufgebaut. Zu Beginn entsteht ein extrem grieseliges Bild, welches im weiteren Verlauf stetig verfeinert wird. Bezeichnend für dieses Verfahren ist zudem, dass der eigentliche Rendervorgang nie zu einem vorgesehenen natürlichen Ende gelangt. Der Rendervorgang wird vom Benutzer dann abgebrochen, wenn das Bild seinen qualitativen Ansprüchen genügt.
Durch die Unterstützung von Funktionen wie Spektrallichtberechnung, ein virtuelles Kameramodell, physikalischer Himmel und vielem mehr ist Indigo in der Lage, deutlich realistischere Renderergebnisse zu erzeugen als herkömmliche GI (Global Illumination) Raytracing-Renderer.
Indigo benötigt keine Parameter wie GI-Durchläufe, AO (Ambient Occlusion)-Durchläufe, AA (Antialiasing)-Durchläufe, weiche Schatten oder kompliziertes Lichtsetup, um extrem realistische Ergebnisse zu erzeugen. Für fortgeschrittene Anwender stehen allerdings Optionen zur Feineinstellung des Renderverhaltens zur Verfügung.

## Weiterverarbeitung

Es besteht die Möglichkeit, dass Indigo die beim Rendern entstandenen Rohdaten in eine separate Datei mit der Dateiendung „.igi“ abspeichert, sodass man den Vorgang, wie bereits oben erwähnt, später fortsetzen kann.
Jedoch kann man diese Daten auch dazu verwenden, das Bild mit dem auf der Indigo-Website angebotenen „Violet Tone Mapper“ weiter zu verarbeiten. Hierbei können zum Beispiel realistisch aussehende Blend- und Linseneffekte hinzugefügt oder das Rauschen nachträglich leicht abgeschwächt werden. Auch können die Helligkeitsverteilung und der Weißabgleich verändert werden (siehe Tone Mapping).
In den neueren Versionen ist der Violet Tone Mapper, exklusive Histogramm und Noise Reduction bereits intern vorhanden, was das Tone Mapping vereinfacht. Zudem geben sogenannte „Light Layers“ die Möglichkeit, einzelne Lichtquellen oder Lichtquellengruppen in getrennte Ebenen zu legen und sie während des Rendervorgangs in Farbe und Intensität adjustieren zu können, wobei die Hintergrundbeleuchtung (Sun & Sky, Backgroundlight oder EXR) immer auf Ebene 0 liegt. Allerdings ist zu beachten, dass jede Light Layer den RAM-Verbrauch ziemlich erhöht.

## Materialeinstellungen

In Indigo gibt es acht frei einstellbare Materialtypen, die wiederum durch eine Vielzahl von Parametern beeinflusst werden können. {Update benötigt: durch die "ISL" (=Indigo Shader Language) wurden die Materialien und Emitter (= Lichtquellen) generalisiert und können nun fließend verwendet werden. Nur "Exit Portal" ist immer noch ein eigenständiges Material. Die ISL ist allerdings noch am Anfang ihrer Entwicklung und die meisten Exporter haben sie noch nicht in ihr Funktionsrepertoire übernommen.}
Die Typen sind:
* Diffuse – ein Objekt mit diesem Material hat eine matte Oberfläche.
* Oren-Nayar – ein Objekt mit diesem Material hat eine raue Oberfläche.
* Phong – ein Objekt mit diesem Material reflektiert das Licht unterschiedlich stark gerichtet, also entweder wie ein Spiegel oder auch wie eher mattes Metall. Beispiel: Die Basisfläche des rechten Bildes hat ein sehr diffuses Phong-Material, vermischt mit einem Diffuse-Material.
* Specular – ein Objekt mit diesem Material kann transparent sein. Ist es transparent, besteht die Wahl zwischen Transparenz mit oder ohne Subsurface Scattering.
* Glossy Transparent – dieses Material ist transparent und hat eine raue Oberfläche, wobei die Wahl zwischen Transparenz mit oder ohne Subsurface Scattering besteht.
* Diffuse Transmitter – ein Objekt mit diesem Material hat eine matte Oberfläche und ist lichtdurchlässig.
* Blended – hier können zwei Materialien kombiniert werden. Beispielsweise kann man einem matten Material noch 30 % Glanzmaterial zumischen, wie das beim grünen Objekt im rechten Bild geschehen ist.
* NULL – ein Objekt mit diesem Material ist absolut unsichtbar. Alleine hat es eigentlich keine Bedeutung, aber zusammen mit einem anderen Material (via Blend) hat es einige Anwendungen, wie zum Beispiel Clip Mapping.
Zusätzlich dazu gibt es noch zwei weitere Typen, die jedoch (noch) nicht zu den Materialien gehören:
* Emitter – ein Objekt dieses Typs strahlt Licht ab, verhält sich also wie ein leuchtender Körper. Beispiel: Die rote Kugel im rechten Bild ist ein Emitter.
* Exit Portal – ein Objekt dieses Typs, meist wird es eine Plane sein, lässt Sonne vergleichbar mit einem Fenster in die Szene hineinscheinen, wenn Licht jedoch aus der Szene auf dieses Objekt trifft, wird es behandelt, als habe es die Szene für immer verlassen, wird also nicht weiter berechnet. Dies hat den Vorteil, dass es im Vergleich zu einem einfachen Loch in der Wand, bei dem das Licht noch lange nach dem Durchtreten durch das Loch weiter berechnet werden muss, den Rendervorgang beschleunigt. In der Regel wird man dieses Objekt jedoch nur verwenden, wenn sich die Öffnung nach außen nicht im Blickfeld der Kamera befindet.
Außerdem besteht die Möglichkeit, auf eine Reihe von voreingestellten Stoffen als Materialien zurückzugreifen. Diese Materialien sind als „.nk“-Dateien im \nkdata\-Ordner der Indigo-Installation enthalten (Beispiel: Ag.nk für Silber).
Mit ihnen werden alle Eigenschaften des Materials wie Farbe oder Brechung definiert, jedoch nicht die „exponent“-Einstellung, also die Variable, die zwischen mattem oder spiegelndem Material unterscheidet. Diese Variable muss also zusätzlich angegeben werden. Link zur Auflistung aller NK-Materials ↓
Transparente NK-Materialien (zum Beispiel H2O.nk = Wasser oder DIAM.nk = Diamant) können nicht korrekt dargestellt werden. Nur die Reflexionen haben die richtige Farbe. Ein Objekt mit diesen Materialien erscheint schwarz. Zur absolut physikalisch korrekten Darstellung von transparenten Materialien oder zur exakteren Farbdefinition, z. B. von Diffusen Stoffen, kann man das sogenannte „Tabulated Spectrum“ als Alternative zum Standard RGB-input verwenden. Hier werden in Metern, die höchste und tiefste Wellenlänge und die Zahl der Werte dazwischen angegeben. Ausgegangen wird von linear verteilten Messungen. Danach werden Amplitudenspitzen eingetragen. Für alle RGB-Angaben kann man das Tabulated Spectrum verwenden, sodass zum Beispiel auch exaktere Angaben für SSS gemacht werden können.

## Exportmodule (Auszug)

Für mehrere 3D-Grafikprogramme gibt es Exportmodule nach Indigo bzw. in das von Indigo verwendete Dateiformat „.igs“:
* Blender:
   * „Blender Exporter Script“ für Indigo 0.6
   * „Blendigo“ für Indigo 0.9 und Indigo 1.0 im Forum
       (Beides sind Python-Scripte für den Export von Blender nach Indigo)
* Max nach Indigo
* Sketchup nach Indigo
* Cinema 4D nach Indigo
* XSI nach Indigo
* Maya nach Indigo
$_{(SortierungnachDownloadanzahlderExporter)}$
Die „.igs“-Dateien verwenden die Auszeichnungssprache XML und sind daher prinzipiell auch leicht von Hand zu schreiben oder zu bearbeiten.