Bei der Entwicklung von Anwendungen in Unity gibt es eine Komponente, die oft übersehen wird. Sie ist aber dennoch von entscheidender Bedeutung für den Realismus. Es geht um die Unity Skybox. Sie bildet den Hintergrund und die Umgebung, die den Nutzer in eine virtuelle Welt eintauchen lässt. Egal, ob du Einsteiger oder bereits Erfahrung gesammelt hast, dieses Tutorial wird dir das nötige Wissen zur Unity Skybox vermitteln.
Diese Komponente ist mehr als nur ein einfaches Hintergrundbild. Daher zeige ich dir in diesem Tutorial das nötige Wissen zu dieser Komponente. Was ist eine Skybox, warum ist sie wichtig und wie kannst du sie in deinen Projekten nutzen? Du erfährst sowohl die Verwendung vorgefertigter, aber auch die Erstellung von benutzerdefinierten Skyboxen. Lass uns gleich eintauchen und die Grundlagen betrachten.
Was ist eine Unity Skybox?
Eine Skybox in Unity ist ein essentielles Element für die Entwicklung von Spielen und immersiven Anwendungen. Du kannst dir diese Komponente wie einen 6-seitigen Würfel vorstellen, der die Szene umgibt. Dem Nutzer wird so das Gefühl vermittelt, sich in einer realen Umgebung zu befinden.
Darstellung als 6-seitiger Würfel (Quelle: https://www.cleanpng.com/png-skybox-shader-rain-cloud-skybox-3732758/)
Illusion der Weite und Tiefe
In 3D-Welten sind räumliche Dimensionen entscheidend, um Realismus und Immersion zu erreichen. Eine Skybox kann eine weitläufige Umgebung darstellen, ohne tatsächlich eine detaillierte Welt erstellen zu müssen. Sie erzeugt den Eindruck von Weite und Tiefe, sodass sich der Nutzer in einer umfangreichen Landschaft befindet. Und das, obwohl die tatsächlich begehbare Umgebung begrenzt ist.
Kontext und Atmosphäre
Die Skybox trägt maßgeblich zur Schaffung der Atmosphäre und des Kontexts einer Szene bei. Sie kann den Himmel, die Landschaft oder sogar den Weltraum darstellen. Je nach Anwendung lässt sich eine Tageslandschaft, ein nächtlicher Sternenhimmel oder jede erdenkliche Kulisse erstellen. So kann die Stimmung der Szene festgelegt werden.
Nahtlose Integration
Die Kunst bei der Verwendung dieser Komponente liegt in der nahtlosen Integration in die 3D-Welt. Ist sie richtig implementiert, gibt es keine erkennbare Grenze. Das verstärkt das Gefühl der Immersion, da der Nutzer nicht durch offensichtliche Kanten oder Übergänge aus der Erfahrung gerissen wird.
Effiziente Ressourcennutzung
Eine wichtige Funktion ist die optimierte Ressourcennutzung. Anstatt eine detaillierte 3D-Umgebung zu erstellen, kann sie mit vergleichsweise geringem Aufwand erzeugt werden. Das spart Rechenleistung und ermöglicht es, die Kreativität auf andere Aspekte der Szene zu legen.
Verschiedene Anwendungsbeispiele in Unity
Die Anwendungsmöglichkeiten in 3D-Welten sind sehr vielfältig. Sie reichen von der Schaffung eines realistischen Naturambientes bis hin zu spannenden Welten. Lass uns einen Blick auf einige Anwendungsbeispiele werfen.
Natur- und Landschaftsszenen
Ein häufiges Anwendungsgebiet sind Natur- und Landschaftsszenen. Hier können vorgefertigte oder benutzerdefinierte Skyboxen verwendet werden, um den Hintergrund einer Anwendung in eine atemberaubende Umgebung zu verwandeln. Egal, ob du eine weite Wüste, einen Dschungel oder eine schneebedeckte Berglandschaft darstellen möchtest. Damit kann die Illusion eines ausgedehnten Terrains erzeugt werden.
Berglandschaft (Quelle: https://polyhaven.com/a/cannon)
Stimmung und Atmosphäre
Die Skybox spielt eine entscheidende Rolle bei der Schaffung der gewünschten Stimmung und Atmosphäre einer Szene. In einer Abenteuerszene kann beispielsweise ein strahlend blauer Himmel ein Gefühl der Freiheit vermitteln. Durch geschickte Auswahl oder Anpassung sind die Emotionen der Nutzer gezielt steuerbar.
Sonnenaufgang (Quelle: https://polyhaven.com/a/pink_sunrise)
Sci-Fi und Fantasy Welten
Die Grenzen der Realität können in der Welt der 3D-Grafik überschritten werden. In Science-Fiction- oder Fantasy-Welten können Sterne, Planeten oder magische Himmel dargestellt werden, die in der realen Welt nicht existieren. Das trägt zur Erschaffung einer einzigartigen Atmosphäre bei.
Unity Skybox Typen
Unity bietet eine Vielzahl von Typen, um die perfekte visuelle Atmosphäre für deine Anwendungen zu schaffen. Diese Typen variieren in der Darstellungsweise und ihren Effekten. Lass uns einen kurzen Blick auf die wichtigsten Arten werfen.
Hinweis: Mit dem ultimativen Unity Cheat Sheet erhältst du einen detaillierten Überblick über Tipps & Tricks mit dem Umgang von Unity. Sichere dir jetzt das Cheat Sheet, um deine Anwendungen noch einfacher und effektiver erstellen zu können!
2D vs. 360-Grad
2D-Skyboxen sind flache, eindimensionale Hintergründe, die im Wesentlichen wie Panoramabilder wirken. Sie bieten einen begrenzten Grad an Immersion und eignen sich oft für weniger komplexe Szenen. Wie es der Name schon verrät, findet diese Art in 2D Szenen ihre Anwendung.
360-Grad-Skyboxen hingegen bieten eine immersive Erfahrung, indem sie den Nutzer in eine umfassende Umgebung eintauchen lassen. Dabei kann es sich um 6-seitige Würfeltexturen handeln, die das Gefühl vermitteln, von allen Seiten umgeben zu sein. Diese Art ist ideal für anspruchsvolle Szenen, in denen der Realismus und das Eintauchen in die Umgebung von großer Bedeutung sind.
Vorgefertigt vs. Benutzerdefiniert
Unity bietet eine Bibliothek an vorgefertigten Skyboxen, die die Entwicklung beschleunigen können. Im Unity Asset Store hast du die Möglichkeit solche Assets herunterzuladen. Aber auch andere Anbieter wie beispielsweise Poly Haven stellen Templates zur Verfügung. Die Sammlung ist oft in unterschiedlichen Stilen, Tageszeiten und Wetterbedingungen verfügbar.
Benutzerdefinierte Skyboxen hingegen ermöglichen es, eigene kreative Visionen zum Leben zu erwecken. Durch die Auswahl oder Erstellung von Textur- oder Materialbildern kannst du eigene Hintergründe erschaffen. So passen diese perfekt zur gewünschten Atmosphäre der Anwendung. Allerdings erfordert das mehr Zeit und Aufwand, bietet jedoch eine unverwechselbare visuelle Erfahrung.
HDR- vs. Nicht-HDR
High Dynamic Range (HDR) Skyboxen bieten eine größere Bandbreite an Farben und Helligkeitswerten im Vergleich zu Standard-Typen. Das führt zu einem realistischeren und lebendigeren visuellen Erlebnis. Sie eignen sich besonders, wenn du eine Szene mit starken Licht- und Schattenkontrasten erstellen möchtest. So zum Beispiel bei sonnigen Tageszeiten oder nächtlichen Szenen mit intensiver Beleuchtung.
Nicht-HDR-Skyboxen verwenden den Standardbereich von Farben und Helligkeitswerten. Sie bieten immer noch eine beeindruckende visuelle Qualität, sind jedoch möglicherweise nicht so lebendig. Sie eignen sich gut für Szenen mit gleichmäßiger Beleuchtung und weniger extremen Lichtverhältnissen.
Verwendung vorgefertigter Skyboxen
Diese Option ist ein effizienter Weg, um schnell und einfach beeindruckende visuelle Umgebungen zu schaffen. Dabei kannst du auf die Erstellung eigener Hintergründe verzichten. So lässt sich die Atmosphäre und Stimmung deiner Szene ganz einfach beeinflussen. Wie das genau funktioniert, das erkläre ich dir in den folgenden Abschnitten.
Default Skybox
Die Default Skybox in Unity ist standardmäßig in einer Szene vorhanden. Dieser Typ ist für jedes neue Projekt integriert und bietet eine einfache Möglichkeit, um eine Grundstimmung zu erzeugen. Lass uns gleich einen Blick darauf werfen, wo du die Einstellungen dazu findest.
- Öffne Unity: Starte Unity und erstelle oder öffne ein bestehendes Projekt.
- Menü öffnen: Navigiere zu Window → Rendering → Lighting. Dadurch wird das Lighting-Fenster wie in der nachfolgenden Abbildung geöffnet. Dort kannst du Environment wählen.
- Material wählen: In diesem Fenster findest du eine Einstellung Skybox Material. Hier kannst du ein Material auswählen, das in deiner Szene verwendet werden soll.
Default-Skybox in Unity
Unterschiede zwischen Kamera und Szene
Bevor wir auf die Erstellung eines benutzerdefinierten Materials blicken, ist es wichtig, den Unterschied zwischen der Kamera- und Szeneneinstellung zu kennen. Denn für das Abändern gibt es zwei verschiedene Möglichkeiten. Es gibt die Anpassung der Kameraeinstellungen oder der Szene selbst.
Kameraeinstellung
Wenn du die Skybox in der Kamera änderst, wird das nur auf die jeweilige Kamera angewendet. Gibt es weitere Kameras in der Szene, so rendern sie möglicherweise andere Texturen. Selektiere dazu das GameObject der Kamera und navigiere im Inspektor zu Clear Flags. Dort findest du die Einstellung, um das entsprechend zu ändern. Es besteht auch die Möglichkeit über Solid Color eine Farbe auszuwählen. Wählst du eine Farbe und wechselst zur Game-View, so ändert sich auch entsprechend das Erscheinungsbild der Szene.
Kameraeinstellung in Unity
Szeneneinstellung
Wenn du die Einstellung global in der Szene ändern möchtest, wird das unabhängig von der verwendeten Kamera durchgeführt. Nutze hierfür die oben beschriebene Einstellung unter Window → Rendering → Lighting → Environment. Das ist erforderlich, wenn du sicherstellen möchtest, dass die Komponente einheitlich in der gesamten Szene verwendet wird.
Erstellen einer benutzerdefinierten Skybox
Die Erstellung einer eigenen Unity Skybox bietet die Möglichkeit, eine maßgeschneiderte visuelle Atmosphäre zu erschaffen, die perfekt zu deinem Projekt passt. Mit den folgenden Schritten kannst du das durchführen.
- Material erstellen: Zunächst ist es wichtig ein neues Material zu erstellen. Navigiere zum Projektfenster und wähle mit der rechten Maustaste Create → Material.
- Shader auswählen: Benenne das Material und wähle unter Shader Procedural. Diese Einstellung erfordert keine Texturen und generiert stattdessen eine Umgebung ausschließlich aus den festgelegten Eigenschaften. Wenn du einzelne Texturen für alle 6 Seiten verwenden möchtest, ist es wichtig 6 Sided zu wählen. Dort kannst du deine eigenen Texturen verwenden.
- Material verwenden: Nachdem das Material erstellt wurde, musst du es global für die Szene anwenden. Das kannst du unter Window → Rendering → Lighting → Environment → Skybox Material durchführen.
Procedural Einstellung für Material
Nachdem du den Shader im Material auf Procedural eingestellt hast, kannst du verschiedene Parameter anpassen. Es gibt eine Vielzahl von Einstellungen, mit denen du den Himmel, die Beleuchtung und die Atmosphäre gestalten kannst. Hier sind einige der Parameter, die du anpassen kannst.
Sun Size
Dieser Parameter beeinflusst die sichtbare Größe der Sonne. Er ermöglicht es dir, die Wahrnehmung der Sonne am Himmel zu beeinflussen, indem du die Größe veränderst.
Atmosphere Thickness
Die atmosphärische Dichte steuert die Streuung des Lichts in der Atmosphäre. Eine höhere Dichte führt zu intensiverer Streuung und kann zu realistischen Effekten wie Dunst oder Nebel führen.
Sky Tint
Die Horizontfarbe beeinflusst die Farbe des Himmels nahe dem Horizont. Das kann eine wichtige Rolle bei der Schaffung der gewünschten Atmosphäre spielen, da der Horizont oft die größte Aufmerksamkeit auf sich zieht.
Ground
Die Bodenfarbe bestimmt die Farbe des Bodens in der Szene. Du kannst sie anpassen, um eine harmonische Farbgebung zwischen dem Himmel und der Umgebung zu erzielen.
Import von Unity Skyboxen
Im letzten Schritt hast du ein benutzerdefiniertes Material erstellt, bei der du verschiedene Einstellungen vornehmen kannst. Es gibt aber auch die Möglichkeit vorgefertigte Assets in Unity zu importieren. Auf den folgenden Seiten kannst du solche Assets auswählen.
Ressourcen
- Poly Haven: Diese Webseite bietet eine breite Palette dieser Assets in hoher Qualität. Du kannst verschiedene Himmel, Umgebungen und Lichtverhältnisse finden.
- Unity Asset Store: Der Unity Asset Store bietet ebenso eine Vielzahl an kostenlosen Assets, die du in deinem Projekt verwenden kannst.
- OpenGameArt: Diese Plattform bietet eine Sammlung von kostenlosen Ressourcen.
Um vorgefertigte Unity Skyboxen zu importieren, kannst du folgende Schritt durchführen. Ich zeige es dir anhand einer Poly Haven Ressource.
- Download: Lade das entsprechende Asset herunter und speichere es als .hdr Datei in deinem Projektordner ab.
- Unity öffnen: Starte Unity und öffne dein Projekt.
- Einstellung anpassen: Wähle die .hdr Datei und ändere die Einstellung Texture Shape im Inspektor auf Cube ab.
Cube Einstellung .hdr Datei
4. Material erstellen: Zusätzlich benötigst du ein Material, das du über einen Rechtsklick im Projektfenster über Create → Material erstellen kannst.
5. Einstellung Shader: Passe die Einstellung Shader im Material auf Cubemap an und wähle unter Cubemap (HDR) die .hdr Datei aus.
6. Material auswählen: Nun kannst du das erstellte Material unter Window → Rendering → Lighting → Environment → Skybox Material verwenden.
Material in Unity
Die meisten Assets besitzen beim Import bereits eine .hdr Datei und ein Material. Ist beides bereits vorhanden und importiert, kannst du das Material direkt verwenden.
Hinweis: Mit dem ultimativen Unity Cheat Sheet erhältst du einen detaillierten Überblick über Tipps & Tricks mit dem Umgang von Unity. Sichere dir jetzt das Cheat Sheet, um deine Anwendungen noch einfacher und effektiver erstellen zu können!
Dynamische Skybox und Tageszeitenwechsel
Diese Funktionalität ermöglicht eine realistische Umgebung. Darunter beispielsweise Veränderungen der Lichtverhältnisse, der Himmelsfarben und der Atmosphäre im Laufe des Tages. In diesem Abschnitt erfährst du, wie du mithilfe von C# Skripten eine dynamische Unity Skybox und Tageszeitenwechsel umsetzen kannst.
Scripting-Methoden für einen Wechsel der Skybox
Die Verwendung von Skripten in Unity eröffnet die Möglichkeit einer dynamischen Veränderung der Umgebung. So lassen sich eindrucksvolle Effekte für Tageszeitenwechsel oder Atmosphärenveränderungen erzeugen. Im ersten Schritt wollen wir einen dynamischen Wechsel einer Unity Skybox während der Anwendung ermöglichen. Hier ist eine Schritt-für-Schritt Anleitung zur Umsetzung dieser Funktionalität.
- Skript erstellen: Navigiere in Unity zum Projektfenster, klicke mit der rechten Maustaste und wähle Create → C# Script. Benenne das Skript zum Beispiel SkyboxChangerButton.
- Skript öffnen: Öffne das Skript in einer IDE oder in Unitys Skript-Editor. Wie du eine IDE in Unity konfigurierst, erfährst du hier.
Skybox-Wechsel über Button
- Vorbereitung Material: Erstelle die verschiedenen Materialien, die du verwenden möchtest.
- Button erstellen: Erstelle in der Szene ein UI-Element wie zum Beispiel einen Button (Assets → UI → Button – TextMeshPro).
- Skript einfügen: Füge dem Button das untere Skript mit dem Titel SkyboxChangerButton hinzu.
- Material zuweisen: In der Komponente SkyboxChangerButton kannst du die verschiedenen Materialien verwenden.
- OnClick-Ereignis einstellen: Füge dem Button ein OnClick-Ereignis hinzu und wähle die Methode ChangeSkybox aus dem Skript.
Skybox über Button wechseln
using UnityEngine;
public class SkyboxChangerButton : MonoBehaviour
{
// Array mit den Skybox-Materialien
public Material[] skyboxes;
// Variable für Zählindex
private int currentIndex = 0;
private void Start()
{
// Setzt die Skybox zum Start der Anwendung auf das erste Material
RenderSettings.skybox = skyboxes[currentIndex];
}
public void ChangeSkybox()
{
// Wechsel zum nächsten Skybox-Material
currentIndex = (currentIndex + 1) % skyboxes.Length;
// Skybox ändern
RenderSettings.skybox = skyboxes[currentIndex];
}
}
Skybox-Wechsel über Timer
- Vorbereitung Material: Erstelle die verschiedenen Materialien, die du verwenden möchtest.
- Skript einfügen: Erstelle ein leeres GameObject und füge das untere Skript mit dem Titel SkyboxChangerTimer hinzu.
- Material zuweisen: Im GameObject kannst du in der Komponente SkyboxChangerTimer unter Skyboxes die verschiedenen Materialien hinzufügen.
Skybox über Timer wechseln
using UnityEngine;
public class SkyboxChangerTimer : MonoBehaviour
{
// Array mit den Skybox-Materialien
public Material[] skyboxes;
// Intervall für den Skybox-Wechsel
public float changeInterval = 10f;
// Variable für Zählindex
private int currentIndex = 0;
// Variable für Timer
private float timer = 0f;
private void Update()
{
// Timer hochzählen
timer += Time.deltaTime;
// Wenn Timer größer als eingestelltes Intervall, Skybox wechseln
if (timer >= changeInterval)
{
// Skybox ändern
ChangeSkybox();
// Timer zurücksetzen
timer = 0f;
}
}
private void ChangeSkybox()
{
// Wechsel zum nächsten Skybox-Material
currentIndex = (currentIndex + 1) % skyboxes.Length;
// Skybox ändern
RenderSettings.skybox = skyboxes[currentIndex];
}
}
Verwendung von Zeit- und Wettereffekten für realistische Umgebungen
Die Verwendung von Zeit- und Wettereffekten kann die Atmosphäre und Realität deiner virtuellen Welten erheblich verbessern. Hier sind zwei Möglichkeiten, wie du solche Effekte implementieren kannst.
Tageszeitenwechsel
Ein realistischer Tageszeitenwechsel kann durch Anpassung der Beleuchtung, des Himmels und der Umgebungsatmosphäre erreicht werden. Um das umzusetzen, kannst du zum Beispiel die Default-Skybox und das untere Skript verwenden.
- Skript einfügen: Füge das untere Skript mit dem Titel DayNightCycle zum GameObject Directional Light hinzu.
- Parameter zuweisen: Wähle die Parameter beispielsweise für dayDurationInSeconds. Das simuliert den Tag-Nacht-Zyklus in Sekunden.
using UnityEngine;
public class DayNightCycle : MonoBehaviour
{
// Dauer eines vollständigen Tag-Nacht-Zyklus in Sekunden
public float dayDurationInSeconds = 60f;
// Lichtfarbe für den Tag
public Color dayLightColor = Color.white;
// Lichtfarbe für die Nacht
public Color nightLightColor = Color.blue;
// Referenz auf Transform des Directional Lights
private Transform directionalLight;
// Referenz auf die Light-Komponente des Directional Lights
private Light lightComponent;
private void Start()
{
// Initialisierung der Transform- und Light-Komponenten-Referenzen
directionalLight = GetComponent();
lightComponent = GetComponent();
}
private void Update()
{
// Berechne den aktuellen Zeitpunkt im Tag-Nacht-Zyklus
float currentTime = Time.time % dayDurationInSeconds;
// Berechne den Azimuth-Winkel (x-Richtung) basierend auf der aktuellen Zeit
float azimuthAngle = Mathf.Lerp(0f, 360f, currentTime / dayDurationInSeconds);
// Berechne den Höhenwinkel (y-Richtung) basierend auf dem Azimuth-Winkel
float elevationAngle = Mathf.Sin((azimuthAngle) * Mathf.Deg2Rad) * 45f;
// Setze die Sonnenposition basierend auf den berechneten Winkeln
directionalLight.rotation = Quaternion.Euler(elevationAngle, azimuthAngle, 0f);
// Anpassung der Lichtfarbe basierend auf der Tageszeit
if (elevationAngle >= 0f)
{
lightComponent.color = Color.Lerp(nightLightColor, dayLightColor, elevationAngle / 45f);
}
else
{
lightComponent.color = Color.Lerp(dayLightColor, nightLightColor, Mathf.Abs(elevationAngle) / 45f);
}
}
}
Dieses Skript simuliert einen Tag-Nacht-Zyklus in Unity. Hier sind die wichtigsten Punkte:
- dayDurationInSeconds: Die Länge eines vollen Tag-Nacht-Zyklus in Sekunden.
- dayLightColor: Die Farbe des Lichts während des Tages.
- nightLightColor: Die Farbe des Lichts während der Nacht.
Skriptablauf:
- In der Start-Methode werden die Referenzen auf Transform des Directional Lights und auf die Light-Komponente des Directional Lights initialisiert.
- In der Update-Methode wird der aktuelle Zeitpunkt im Tag-Nacht-Zyklus berechnet.
- Der Azimuth-Winkel (horizontaler Winkel) und der Höhenwinkel (vertikaler Winkel) wird basierend auf der aktuellen Zeit berechnet.
- Die Position der Sonne (Directional Light) wird anhand der berechneten Winkel verändert.
- Die Lichtfarbe wird abhängig von der Tageszeit angepasst. Tagsüber wird zwischen Nacht- und Tageslichtfarben interpoliert, während in der Nacht zwischen Tages- und Nachtlichtfarben interpoliert wird.
Hinweis: Es wurde angenommen, dass der höchste Sonnenstand zur Mittagszeit bei 45° liegt. Das könnte natürlich auch dynamisch unter anderem anhand des Breitengrads und der Jahreszeit berechnet werden. Das obere Skript bietet aber bereits eine realistische Funktionalität eines Tag-Nacht-Zyklus.
Nebel und Atmosphäre
Um einen realistischen Nebel oder eine veränderte Atmosphäre zu erzeugen, kannst du Fog (Nebel) und Ambient (Umgebungslicht) in den Render-Einstellungen von Unity anpassen. Hier ist ein Skript, um einen Nebel zu aktivieren.
using UnityEngine;
public class AtmosphereController : MonoBehaviour
{
// Farbe für den Nebel
public Color fogColor = Color.gray;
// Dichte für den Nebel
[Range(0f, 1f)] public float fogDensity = 0.2f;
// Farbe für das Umgebungslicht
public Color ambientLightColor = Color.white;
private void Start()
{
// Aktivierung des Nebels
RenderSettings.fog = true;
// Setzt die Farbe für den Nebel
RenderSettings.fogColor = fogColor;
// Setzt die Dichte für den Nebel
RenderSettings.fogDensity = fogDensity;
// Setzt die Farbe für das Umgebungslicht
RenderSettings.ambientLight = ambientLightColor;
}
}
Die Verwendung von Unity Skyboxen bietet eine einfache Möglichkeit, beeindruckende Himmels- und Umgebungseffekte zu erzeugen. Sie verleihen der Szene Realismus und Atmosphäre, indem sie den Hintergrund und die Beleuchtung beeinflussen. Vorgefertigte Assets sind ideal, um schnell eine gewünschte Stimmung zu erzeugen. Es besteht aber auch die Möglichkeit benutzerdefinierte Materialien zu erstellen.
Von der Wahl verschiedener Typen bis zur Nutzung von Skripten für dynamische Tageszeiten und Wettereffekte bietet Unity eine Vielzahl an Optionen. Ob ein einfacher Sonnenverlauf oder komplexe Atmosphärenveränderungen – mit diesen Möglichkeiten kannst du die Umgebung deiner Szene anpassen und beeindruckende visuelle Ergebnisse erzielen.