Gamasutra David Leon s Blog - Next-Gen Cel Shading in Unity 5

Die folgende Blog-Post, sofern nicht anders angegeben, wurde von einem Mitglied von Gamasutra-Community geschrieben.
Die Gedanken und Meinungen sind diejenigen des Verfassers und nicht Gamasutra oder ihre Muttergesellschaft.

Einführung

Mit der Ankunft von 5 Einheit finden wir, dass es noch nie so einfach hohe Qualität Visuals in unserem Spiel zu bekommen, aber wir wollen nicht immer realistische Grafik für unser Projekt.

Cel Shading ist eine Rendering-Technik verwendet, um die Beleuchtung in Cartoons und Comics zu simulieren. In einer traditionelleren diffusen Schattierung, erzeugt Licht, das eine Steigung auf einer Objektoberfläche unter Verwendung seiner Normalen; Cel Shading polarisiert den Gradienten, so dass ein Pixel beleuchtet werden oder nicht durch Licht beleuchtet, ohne Interpolationen oder interpolierte Werte.

Gamasutra David Leon s Blog - Next-Gen Cel Shading in Unity 5

Im vorigen Bild können wir den Unterschied zwischen einer diffusen Beleuchtung und Cel Shading sehen. Das Skalarprodukt zwischen der Lichtrichtung und der Flächennormalen (die wir als ‚NdotL‘ beziehen werden) definiert die Menge an Licht ein Pixel empfängt. Abgerundet diesen Wert auf 0 oder 1 ist, oder definieren verschiedene ‚Typen‘ oder ‚Teile‘ führt in verschiedenen Cel Shading Stile.

Es gibt viele Möglichkeiten, Cel Shading in einem Spiel zu tun, einige von ihnen mit unglaublichen Ergebnissen. aber heute werden wir eine sehr schnelle Art und Weise lernen, unsere eigenen Cel Shading Licht Modell in der Einheit 5 zu implementieren.

Es gibt verschiedene Arten verwendet, um diesen in Abhängigkeit von der Rendering-Pipeline (der Rendering-Pfad) zu erreichen. Sie können Ihren gewünschten Rendering-Pfad in der Kamera-Komponente oder Ihre Player-Einstellungen festgelegt.

vorwärts-Rendering

Mit Vorwärts Rendering, geht der Motor über jede Ecke, jedes Pixel und jedes Licht in der Szene. Die Rendering-Komplexität ist riesig, wenn Sie mehrere Lichtquellen in der Szene haben, aber wenn man es ist eine sehr leichte Rendering-Pipeline nicht viele Lichter verwenden.

Der beste Weg, Cel Shading mit Vorwärts-Rendering wird mit einem benutzerdefinierten Beleuchtung Modell in einer Oberfläche Shader zu erreichen.

Das gleiche ‚Hack‘ kann mit anderen benutzerdefinierten Shadern, die spiegelnde, Normal Mapping, Felgenbeleuchtung etc. verwenden verwendet werden

Licht Pre-Pass (Legacy-Latente)

Mit einer latenten Pipeline des Motor über jedes Licht auf dem Bildschirm in einem Puffer nur einmal und speichert diese Informationen geht. Licht Pre-Pass speichert nur die Licht Info, während der Einheit 5 der neuen Rechnungsabgrenzungs Pipeline speichert Informationen über die gesamte Geometrie in der Szene. Dieser Ansatz ist viel effizienter, wenn Sie eine große Menge von Lichtquellen in der Szene haben, aber erfordert eine komplexere Hardware-Architektur.

Wir extrahieren Sie die Dateien und suchen Sie nach „Internal-PrePassLighting.shader“ innerhalb des ‚DefaultResourcesExtra‘ -Ordner. Wir kopieren Sie diese Datei in unserem Unity-Projekt, vorzugsweise im Ordner Ressourcen (es erstellen, wenn Sie nicht haben). Wenn wir die Einheit verwenden 5 können wir die Dateinamen ändern.

Nun wollen wir die Datei bearbeiten und suchen Sie die Zeile:

Halb diff = max (0, Punkt (lightDir, normal));

und ändern Sie es an:

Halb diff = max (0, Punkt (lightDir, normal));
if (diff> 0.0f) diff = 1.0f;
sonst diff = 0.0f;

Wir speichern Sie die Datei und fertig. Wir müssen jetzt die Einheit sagen, diese Datei zu verwenden anstelle der Standard-Pre-Pass Lighting Pipeline.

Gehen Sie auf Bearbeiten -> Projekteinstellungen -> Grafik und in Legacy-Latente. Ändern Sie den Built-in-Shader und wählen Sie unsere Datei. Wenn Sie 4 Unity verwenden, sollte Unity erkennen bereits die Datei (wenn Sie nicht die Dateinamen geändert haben) und es verwenden, ohne Benutzereingriff. Bitte überprüfen Sie, ob Ihre Kamera der Player-Einstellungen verwendet oder wird mit Legacy-Deferred (Light Pre-Pass), und dass unsere Materialien verwenden, um einen Legacy-Shader. Wenn Sie alles richtig gemacht haben, sollten Sie Cel Shading erhalten in Ihrem Spiel arbeiten.

Latente Rendering

Aber was ist der Sinn von 5 Einheit zu haben, wenn wir nicht die Vorteile der neuen Funktionen und der leistungsfähigen Standard-Shader nehmen?

Die Lösung ist die Einheit der neue latente Rendering-Pipeline, die speichert alle Szenengeometrie entlang Beleuchtung in Puffern zu verwenden, um die endgültige Schattierung des Objekts zu berechnen.

Im Anschluss an die gleichen Schritte wie Licht Pre-Pass, laden wir die Built-In Shaders, aber dieses Mal werden wir in unserem Projekt kopieren Sie die Datei „Internal-DeferredShading.shader“ genannt. Wir bearbeiten diese Datei für die Funktion ‚CalculateLight‘ suchen und ändern Sie die nächste Zeile:

light.ndotl = LambertTerm (normalWorld, light.dir);

Und fügen Sie die folgenden Zeilen:

if (light.ndotl <= 0.0) light.ndotl = 0;
sonst light.ndotl = 1;

Wie das letzte Mal, gehen wir bearbeiten -> Projekteinstellungen -> Grafik und die latent wir unsere geänderte Datei wählen. Überprüfen Sie, ob die Kamera-Komponente Rendering-Pfad hat = Latente, und dass Sie ein Modell mit einem Standard-Shader in seinem Material verwenden. Sie sollten nun feststellen, dass Ihr Modell alle Vorteile der Standard-Shader, aber mit Cel Shading angewandt.

Toon Kontur und andere Effekte

Sie haben sich Cel Shading in Unity 5, aber wir sind fertig noch nicht unsere Next-Gen-Toon-Look zu bekommen. Wir brauchen einen Toon Umriss.

Lassen Sie uns die Kamera Bildeffekte importieren, indem Sie auf Assets gehen -> Import Package -> Effekte.

Wir gehen nun zu unserer Kamera und die Kantenerkennung Komponente hinzuzufügen. Wir konfigurieren es bei unserem Geschmack (ich verwende in der Regel Robert Cross Tiefe Normals). Wir können jetzt andere Bildeffekte wie Anti-Aliasing fügen Sie die Linien zu erweichen, oder einige erweiterte Effekte wie Ambient Occlusion, Bloom oder Depth of Field, dass AAA-Look bekommen wir wollten.

Gamasutra David Leon s Blog - Next-Gen Cel Shading in Unity 5

Schlussfolgerungen

Wie Sie, in einer kleinen Menge Zeit sehen wir die neue Einheit Latente Pipeline vollständig zu unserem Spiel visuellen Stil ändern ‚gehackt‘.

In Twin Souls: Der Pfad der Schatten (das Spiel arbeite ich an) wir diesen Ansatz mit einigen anderen Ergänzungen nutzen unsere einzigartigen Look zu bekommen:

Gamasutra David Leon s Blog - Next-Gen Cel Shading in Unity 5

Passende Jobs

In Verbindung stehende Artikel