HDR (High Dynamic Range)
Ok. In diesem Tutorial werde ich euch erklären, was HDR ist, welchem Zweck es dient und wozu man es überhaupt braucht.
(Ich werde mich nach dem Valve Wiki richten aber nur auf die Basisfunktion des tonemap_controllers eingehen)
Um euch zu zeigen was HDR macht, habe ich hier ein Beispiel eingefügt:
Wenn man ganz am Anfang, als HDR im kommen war, darüber geredet hat, was HDR eigentlich macht, wurde einem in der Regel gesagt:
Das ist im Großen und Ganzen richtig aber bei weitem nicht alles was HDR so mit eurer Map treibt."Das macht das es blendet, wenn man von drinnen nach draußen geht."
Was macht HDR dann genau?
HDR, ausgeschrieben „High Dynamic Range“, erweitert die 256 möglichen Helligkeitsabstufungen pro Farbkanal und ermöglicht es so stärkere Kontraste darzustellen. Durch die hohe Anzahl an verschiedenen Beleuchtungsstärken ermöglicht HDR eine realistische Beleuchtung von Objekten, sowie eine wesentlich realistischere Berechnung von Lichtstreuung und Lichtreflexionen.
Dies bedeutet, dass man mit HDR in der Lage ist, neben den Effekten wie „Lens Flare“, „Blendeffekt“ und die „Trägheit der Pupillen“, vor allem auch eine realistische Ausleuchtung von Innen und Außenbereichen zu simulieren.
Hier 3 Bilder um zu zeigen was, das im Klartext bedeutet. (Bilder aus Lost Coast)
Jeweils immer links mit und rechts ohne HDR
Vor allem die realistische Beleuchtung von Innenräumen ist eine sehr wichtige Aufgabe von HDR. So ist es nicht mehr nötig etliche Lichter in einen Raum zu packen um sämtliche dunklen Ecken zu entfernen. Vielmehr reicht es natürliche Lichteinlässe wie Fenster oder Löcher zu schaffen. Das einfallende Licht wird gestreut und beleuchtet so die direkte Umgebung.
Soviel zur Theorie, kommen wir nun zur Anwendung von HDR im SDK.
Grundlagen zum Einsatz von HDR
Die einfachste Methode, den HDR Effekt in seine Map zu bekommen, wäre es auf Run Map zugehen VBSP, VVIS und VRAD auf „Normal“ zu stellen und beim „Run Rad-Fenster“ ein Häkchen bei „HDR“ zu setzen.
Wenn ihr nicht den Hammer Standart Compiler benutzt, könnt ihr mit folgenden Befehlen in den „Command Zeilen“ mit HDR compilen:
Hier taucht ein neuer Begriff auf. „LDR“ ist die Beleuchtungsvariante vor HDR und bedeutet „Low Dynamic Range“. Damit compiliert man wesentlich schneller, sieht aber nicht so gut aus. Um nur mit „LDR“ zu kompilieren, einfach das Häkchen bei „HDR“ weglassen.-both --> compiliert sowohl LDR als auch HDR
-ldr --> compiled nur LDR
-hdr --> compiled nur HDR
-final --> compiled HDR mit höherer Qualität
Achtung: -final erhöht die Compilezeit unter umständen dramatisch. Dieser Befehl sollte nur für den letzten Durchgang verwendet werden.
Haben wir Compiled müssen wir HDR im Spiel zum laufen bringen. Um dies zu erreichen gibt es mehrere Möglichkeiten:
a) Ihr geht im Spiel auf: Optionen -> Video -> Fortgeschritten -> High Dynamic Range -> Alle
Oder ihr erstellt ein Desktop Icon, geht in Eigenschaften und fügt diese Zeile entsprechend ein.b) Man kann HDR oder LDR auch beim Start über die Command Zeilen starten, dazu braucht man folgende Befehle:
+mat_hdr_enabled 0/1
0 steht für LDR und 1 steht für HDR.
oder
+mat_hdr_level 0/1/2
0 bedeutet ohne HDR oder LDR, 1 bedeutet LDR mit Bloom Effekt, 2 bedeutet HDR mit Bloom Effekt.
Um die Source Engine nun dazu zu zwingen HDR zu benutzen, geht ihr unter Steam in die Bibliothek - Rechtsklick auf das Spiel -> Properties -> Startoptionen festlegen und fügt z.B für Full HDR +mat_hdr_enabled 1 +mat_hdr_level 2 ein.
Nun müsst ihr im Spiel noch die „cubemaps“ bilden, damit HDR richtig dargestellt werden kann. Buildcubemaps muss sowohl für HDR, als auch für LDR durchgeführt werden, um vernünftige „cubemaps“ zu erhalten.
Dafür gehen wir ins Spiel und Starten die Map. Habt ihr HDR mit einer der oberen Möglichkeiten aktiviert, gebt ihr in die Konsole buildcubemaps ein.
Ist dieser Vorgang beendet, gebt mat_hdr_enabled 0 in die Konsole ein, um LDR zu aktivieren und gebt noch einmal buildcubemaps in die Konsole ein.
Dieser Vorgang muss nach jedem Compilevorgang wiederholt werden.
HDR läuft nun in beiden Fällen mit den von Valve vordefinierten Einstellung und verhält sich nicht selten ziemlich zügellos und sorgt zumeist eher für ein Kopfschütteln, als für ein anerkennendes Kopfnicken.
Um HDR kontrolliert einzusetzen, benötigt ihr das Entity „env_tonemap_controller“.
env_tonemap_controller
Der Tonemap Controller hilft euch, den HDR Effekt in den Griff zu bekommen und nach euren Wünschen einzustellen. Wird kein Tonemap Controller in die Map eingefügt und HDR aktiviert, wird der Standartwert für HDR benutzt, welcher sich in manchen Situationen sehr seltsam verhält.
Was brauchen wir um den Tonemap Controller benutzen zu können?
Entities:
Der env_tonemap_controller hilft euch HDR zu bändigen und den Effekt zu erzielen den ihr haben wollt.env_tonemap_controller
trigger_multiple (optional)
logic_auto
Hier die Einstellungen die ihr im env_tonemap_controller vornehmen könnt.
SetTonemapScale
Hier könnt ihr die Intensität des Lichteinfalls bestimmen. 0 bedeutet kein Lichteinfall, 1 bedeutetAugen halb offen und 2 bedeutet Augen ganz offen (200% Lichtintensität)
Die bedeutet das 1 der Standartwert für HDR ist.BlendTonemapScale <string>
Diese Eeinstellung ermöglicht es euch den tonemapScale Wert innerhalb einer bestimmten Zeit zu ändern. Dabei gilt für string folgendes <string> = <neuer tonemapScale Wert> <Überblenddauer> 0.5 10 würde z.B bedeuten das man innerhalb von 10 Sekunden auf einen TonemapScale Wert von 0.5 überblenden würde. Für TonemapScale gelten die Werte von SetTonemapScale.UseDefaultAutoExposure
Setzt den Belichtungswert auf StandardSetAutoExposureMin <float>
Setzt den minimalen Belichtungswert fest.SetAutoExposureMax <float>
Setzt den maximalen Belichtungswert fest.Wir wollen nun also den tonemap controller konfigurieren. Dies ist bei diesem Entitie nur über das I/O System möglich.SetBloomScale <float>
Mit dieser Funktion kann man einen eigenen Bloom Wert bestimmen.
Fangen wir also an.
1. Zuerst setzen wir den env_tonemap_controller irgendwo in die Map. Wählt einen Ort aus an dem ihr ihn jederzeit wiederfindet. Den Start der Map, neben die Sonne, es spielt im Endeffekt keine Rolle.
2. Nun gebt ihr dem Controller einen Namen. Nennt in z.B tonemap.
3. In diesem Beispiel werden wir die Startparameter bei Levelbeginn einstellen. Um den env_tonemap_controller zu beginn verwenden zu können, müsst ihr ein logic_auto Entitie verwenden. In diesem tragt ihr die Werte aus dem folgenden Bild ein.
Damit habt ihr erreicht das ihr einen Bloomscale von 1.3, einen maximalen Blendwert von 2 und minimal 0.8 erreicht. Dies bedeutet, dass ihr an den hellsten Stellen doppelte Lichtstärke habt und in den dunkelsten Bereichen des Levels um den Wert 0.2 (20%) dunkler seid, als der Standartwert.
4. Nun ist es aber so das ihr nich von vorne herein wisst welche Werte ihr braucht.
Der beste Weg um sich seinen Werten anzunähern ist es, den Tonemap Controller zu setzen und die Werte im Spiel zu verändern bis ihr zufrieden seid und sie dann zu notieren.
HDR kann in der Konsole allerdings nicht direkt verändert werden. Vielmehr müsst ihr mit dem ent_fire command arbeiten.
Dieser hat folgende Formatierung:
Wenn ihr euren tonemap_Controller z.B tonemap_global genannt habt würdet ihr folgendes in die Konsole eingeben.ent_fire <Name des tonemap_controllers> <Befehl> <Wert>
Damit hättet ihr einen Bloomwert von 3 eine maximale Beleuchtungsstärke von 6 und eine minimale Beleuchtungsstärke von 0.8.ent_fire tonemap_global SetBloomScale 3
ent_fire tonemap_global SetAutoExposureMax 6
ent_fire tonemap_global SetAutoExposureMin .8
Hier müsst ihr einfach herumexperimentieren bis euch der HDR Effekt zusagt.
Nun wozu brauchen wir den trigger_multiple?
HDR kann im Spiel dynamisch verändert werden. Wenn ihr z.B in einem bestimmten Bereich einen bestimmten HDR Effekt erzielen wollt, könnt ihr den Bereich mit einem trigger brush belegen und diesen den env_tonemap_controller ansteuern lassen. Dies ist aber nur für den Singelplayer geeignet, da ihr mit dieser Methode den HDR Effekt für alle Spieler in allen Bereichen der Map verändert was sehr seltsam aussehen würde.
Hier noch einige Zusätzliche Befehle die ihr in der Konsole eingeben könnt.
mat_dynamic_tonemapping 0/1 (Standard 1)
Aktiviert bzw. deaktiviert den dynamischen HDR Effektmat_autoexposure_max 0-20 (Standard 2)
Legt den maximalen Beleuchtungswert fest der erreicht werden kann. Mehr als 20 sollte in den meisten Fällen nicht als Wert eingestellt werden.mat_autoexposure_min 0-20 (Standard 0.5)
Legt den minimalen Beleuchtungswert fest der erreicht werden kann. Mehr als 20 sollte in den meisten Fällen nicht als Wert eingestellt werden Standartwerte bewegen sich unter dem Wert von 1.mat_hdr_tonemapscale 0-20
Wird benutzt wenn mat_dynamic_tonemapping auf 0 gesetzt ist. Setzt einen spezifischen Beleuchtungswert fest. Dieser Wert sollte nicht größer als 20 sein.mat_disablebloom 0/1 (Standard 1)
Aktiviert/Deaktiviert den Bloom EffektIm Grunde habt ihr nun alle Werkzeuge die ihr benötigt um euer Level mit HDR auszustatten. Sollte es Kritik, Anregung oder Fragen geben bitte hier posten.mat_bloomscale 0-16 (Standard 1)
Legt die Intensität des Bloom Effekts fest mehr als 16 wird nicht empfohlen
Lesezeichen