2018.3 Terrain-Update: Erste Schritte

Wir haben jetzt ein Team, das sich dem Terrain widmet, und unsere ersten Arbeiten werden bald öffentlich zugänglich sein! Unity 2018.3 wird mit einem Update für das Terrain-System ausgeliefert. Dieses Update bietet verbesserte Tools und eine höhere Leistung durch eine bessere Ausnutzung des Grafikprozessors. Außerdem wird die Unterstützung für die HD- und LW-Render-Pipelines hinzugefügt, wobei die Abwärtskompatibilität mit der eingebauten Render-Pipeline und dem bestehenden Unity Terrain-System erhalten bleibt.
Holen Sie sich jetzt die Beta von Unity 2018.3, um frühzeitigen Zugriff auf die Updates zu erhalten! Bitte beachten Sie, dass sowohl die Benutzeroberfläche als auch die API noch geändert werden können, da die Beta-Version noch in der Entwicklung ist.
Auf der Leistungsseite haben wir einen GPU-instabilisierten Rendering-Pfad für Terrain hinzugefügt. In den meisten Fällen führt die Instanzierung zu einer drastischen Verringerung der Anzahl der Auslosungsaufrufe. In vielen unserer Tests wurden die CPU-Kosten um mehr als 50 % gesenkt (wobei die tatsächlichen Zahlen natürlich von Ihrer Plattform und Ihrem Anwendungsfall abhängen). Sie können diesen neuen Renderpfad wählen, indem Sie in den Terrain-Einstellungen die Option "Instanced zeichnen" aktivieren:

Wenn diese Funktion aktiviert ist, wandelt Unity alle schweren Geländedaten, wie Height Maps und Splat Maps, in Texturen auf dem Grafikprozessor um. Anstatt ein eigenes Mesh für jeden Terrain-Patch auf der CPU zu konstruieren, können wir GPU-Instanzierung verwenden, um ein einzelnes Mesh zu replizieren und die Heightmap-Textur zu sampeln, um die richtige Geometrie zu erzeugen. Dies reduziert die CPU-Belastung des Terrains um Größenordnungen, da einige wenige instanzierte Zeichenaufrufe potenziell Tausende von benutzerdefinierten Netzzeichnungen ersetzen.
Als netter Nebeneffekt verbessert es auch unsere Ladezeiten! Wir können nicht nur die Erstellung all dieser benutzerdefinierten Meshes überspringen, sondern auch die GPU für die Erstellung der Basismap (vorgemischte LOD-Textur) verwenden; die GPU ist bei dieser Art von Aufgaben viel schneller. Das bedeutet auch, dass Sie, wenn Sie Ihren eigenen Terrain-Shader haben, jetzt den "build basemap"-Shader außer Kraft setzen und passende basemap LOD-Texturen erzeugen können.
Die Instanzierung verbessert auch das Erscheinungsbild der Geländenormalen; wir entkoppeln die Geländenetznormalen von der Geometrie, indem wir sie in einer Normal Map Textur speichern, die aus der Heightmap generiert und im Pixel Shader abgetastet wird. Das bedeutet, dass die Normalen unabhängig von der LOD-Stufe des Netzes sind. Folglich können Sie die "Pixelfehlerrate" erhöhen, um die Scheitelpunktkosten zu senken, wobei weniger Artefakte entstehen.

Wir haben auch Terrain-Shader für die HD- und LW-Rendering-Pipelines entwickelt, die in den Paketversionen 4.0.0 oder später verfügbar sind und Instanz-Rendering und Normalen pro Pixel unterstützen. Der HD-Shader wurde weiter verbessert, um neue Funktionen wie Überblendungsmodi für Höhe und Dichte, Normalen-Skalierung, texturgesteuerte Metallisierung und Glättung von Oberflächen zu unterstützen. Der HD-Geländeshader ist auf einen einzigen Durchgang beschränkt, unterstützt aber das Überblenden von bis zu 8 Geländeschichten in einem Durchgang.
Auf der Editorseite haben wir eine Skript-API für die Erstellung eigener Terrain-Tools sowie eine Reihe von Hilfsfunktionen bereitgestellt, mit denen Sie nahtlose kachelübergreifende Sculpting- und Maloperationen auf der GPU einfach implementieren können. Die neue TerrainAPI enthält TerrainPaintTool<T0>, eine Basisklasse für Geländewerkzeuge, und TerrainPaintUtility, das Utility-Funktionen zur Veränderung von Geländedaten enthält.
Mit diesen Änderungen haben wir alle vorhandenen Geländewerkzeuge auf GPU-Betrieb umgestellt. Dadurch wurden diese Werkzeuge nicht nur viel schneller, sondern wir erhielten auch größere Pinselgrößen, eine verbesserte Pinselvorschau und die Möglichkeit, über die Grenzen von Geländekacheln zu malen, wobei die Nähte automatisch zusammengefügt werden.

Außerdem haben wir begonnen, mit Pinselfunktionen wie Pinselrotation und Randomisierung sowie mit fortgeschrittenen Malwerkzeugen wie Heightmap- und Mesh-Stamping, Klonpinseln und mehr zu experimentieren. Diese Funktionen der Malwerkzeuge sind derzeit nicht in 2018.3 enthalten, aber wir stellen sie über unser GitHub Terrain Tools Projekt zur Verfügung.

Wir haben es einfacher gemacht, mit mehreren Geländekacheln zu arbeiten. Neben dem nahtlosen Malen zwischen Terrains können Sie nun auch die Verbindungen zwischen benachbarten Terrains automatisch verwalten. Bisher musste dazu ein Skript geschrieben werden, um die Nachbarn manuell zu verbinden.
Aktivieren Sie in den Geländeeinstellungen die Option "Automatische Verbindung", dann verbindet sich das Gelände automatisch mit seinen Nachbarn mit der gleichen Gruppierungs-ID.
Wenn Sie Ihr bestehendes Gelände erweitern, können Sie unser neues Werkzeug "Nachbargelände erstellen" verwenden, um schnell passende Geländeplatten entlang leerer Grenzen hinzuzufügen.

Wir arbeiten auch daran, dass Größenänderungen und Auflösungsänderungen weniger destruktiv sind. In 2018.3 werden die Heightmap- und Splat-Maps neu gesampelt, wenn Sie ihre Auflösung ändern, anstatt wie bisher die Daten zu löschen und Ihre gesamte Arbeit zu verlieren. Wir arbeiten daran, in naher Zukunft alle Größenänderungsvorgänge zu verbessern.
Um die Arbeitsabläufe zu vereinfachen, haben wir außerdem zwei neue geländebezogene Asset-Typen erstellt: das TerrainLayer-Asset und das Brush-Asset.

Mit TerrainLayer können wir Terrain-Materialien unabhängig vom Terrain-Objekt definieren, so dass wir dasselbe Material problemlos über mehrere Terrains hinweg verfolgen können. Dies hilft bei der nahtlosen Bemalung und Materialänderung. Außerdem erweitern wir das TerrainLayer-Asset um die Unterstützung von "Mask Map"-Texturen, die für beliebige Schattierungszwecke verwendet werden können, sowie um eine Skriptschnittstelle zur Bereitstellung einer Shader-abhängigen benutzerdefinierten GUI für das TerrainLayer-Asset.

Der Pinsel stellt die GPU-Pinselformen dar, die von Mal- und Bildhauerwerkzeugen verwendet werden. Sie werden nun durch eine Textur und eine radiale Falloff-Kurve definiert. Das macht es viel einfacher, Pinselformen zu erstellen und zu verändern (was vorher nur möglich war, indem man kunstvoll gestaltete Bilddateien in einen speziell benannten Ordner legte).
Wir haben außerdem Unterstützung für das R16-Texturformat (ein 16-Bit-Einzelkanalformat) zu Unity hinzugefügt. Auf diese Weise können wir die 8-Bit-Quantisierung unserer Pinselformen vermeiden, die bei der Verwendung als Heightmap-Stempel unerwünschte "Terrassierungs"-Effekte verursachen kann.

Unser Geländeteam hat gerade erst begonnen und die Entwicklung geht weiter. Bitte senden Sie uns Ihr Feedback im World Building Forum!
