Ersteinmal:
Was ist HDR
Darüber könnte man eine Doktorarbeit schreiben, ich versuche mich aber kurz zu fassen.
HDRI´s (High Dynamic Range Images) gibt es im High-End 3D schon lange und haben jetzt endlich auch Einzug in Echtzeit 3D Engines erhalten (Aktuelle Beispiele: DOD Source oder NFS Most Wanted). Mit HDRI´s werden 3D Szenen beleuchtet, oft ohne zusätzliche Lichter in der Szene. Im Gegensatz zu LDRI´s (Low Dynamic Range Images) im 24 bit Modus (z.B JPG, TGA, BMP, u.s.w.) vereinen HDRI´s (32 bit) mehrere LDRI´s in unterschiedlichen Belichtungsstufen (Exposures) in einem Bild.
Alle die schon mit Spiegelreflexkameras fotografiert haben, haben sicher schon Bilder geschossen die über- oder unterbelichtet waren. Bei HDRI´s sind diese oft unschönen Bilder gewollt und werden in einem Bild zusammengefasst. Denn auch bei unterbelichteten Bildern sind direkte Lichtquellen oft noch als weiße Punkte zu sehen während die Umgebung so dunkel ist, dass man Details kaum noch erkennt. Im Gegensatz dazu sind überbelichtete Bilder oft komplett weiß. Nimmt man ein normales Jpeg in den Photoshop und schraubt die Helligkeit runter, so werden dabei auch direkte Lichtquellen immer dunkler was aber fototechnisch falsch ist.
Ich habe hier mal ein HDR Bild in 3 verschiedenen Belichtungsstufen. Daran sieht man den Unterschied besser. Auf dem ersten Bild ist die Sonne noch gut zu sehen obwohl das Bild selber sehr dunkel (unterbelichtet) ist. Auf dem letzten Bild überstrahlt die Sonne dermaßen, dass der Himmel komplett weiß und die Wolken verschwunden sind. Geanu das passiert auch wenn Ihr bei einer Spiegelreflexkamera die Belichtungszeit sehr kurz oder sehr hoch wählt.
Wer noch mehr zu diesem Thema wissen möchte findet über Google sehr viel im Netz. Ich hoffe aber mal, dass diese kleine Einführung schon mal zum Verständnis was HDR eigentlich ist beigetragen hat.
Die eigene HDR Skybox
Als aller erstes braucht Ihr mal die TGA Basis Bilder um daraus den Skybox cube zu bauen, den ihr schon aus Reflex Tutorial kennt. Ich habe meinen mit „Vue 5 Infinit“ von e-on Software erstellt ihr könnt aber geanu so gut das altbekannte „Terragen“ benutzen.
Sinnvoller Weise lasst ihr in diesem Sky die Sonne weg, da wir diese nachträglich einbauen wollen.
Die 6 Einzelbilder werden dann z.B. in Photoshop zu einem Bild zusammengefasst das dann so aussieht:
Speichert dieses Bild unter:
sdk_content/cstrike/materialsrc/skybox/Sky_sunset01_hdr.tga
der Name ist euch überlassen die Endung "hdr" ist aber zur Unterscheidung sinnvoll. (die Beschriftung auf dem Bild solltet ihr auch weg lassen )
Da dieses Bild noch ein LDRI ist wollen wir nun daraus ein HDRI machen. Dazu benötigen wir zunächst mal ein Programm, das sich HDR Shop nennt und welches ihr hier runterladen könnt.
http://gl.ict.usc.edu/HDRShop/
Wer es auf die Spitze treiben will kann sich die Version 2 dieser Software kaufen, für unsere Zwecke reicht aber die Version 1.1 aus und die ist gratis!!!
Wenn ihr HDR Shop installiert habt startet das Programm und ladet das TGA File (Skybox in T Form) welches ihr gerade erstellt habt ein.
Das erste Fenster das erscheint könnt Ihr einfach mit OK bestätigen.
Nun wollen wir die Sonne in dieses Bild malen. Dazu müssen wir aber in HDR Shop erst mal die Belichtung des Bildes runter schrauben. Klickt dazu auf dem Nummernblock eurer Tastatur auf "-" bis unten rechts in der Ecke ein Exposure von "-3" eingestellt ist (-3.00 Stops).
Nun klick Ihr auf File -> Edit in Image Editor.
HDR Shop Speichert nun ein temporäres BMP File und öffnet dieses mit der Software die vom Betriebssystem zum öffnen von BMP´s voreingestellt ist. Bei mir ist das Photoshop, kann aber auch Windows Paint oder was auch immer sein. Malt nun in eurem Image Editor die Sonne in das Bild. Da dieses Bild die niedrigste Belichtungsstufe ergibt, ist die Sonne in dem Fall auch nur ein kleinerer heller (weisser, gelber, oranger) Kreis.
Wenn ihr mit eurer Sonne zufrieden seid, überspeichert das temp. BMP Bild und wechselt wieder in HDR Shop. Hier klick ihr bei dem kleinen Fenster auf OK und das Bild wird im HDR Shop aktualisiert.
Jetzt geht in die nächste Belichtungsstufe (num pad einmal auf "+").
Wenn ihr mit dem Bild zufrieden seid geht auf die nächste Belichtungsstufe u.s.w. bis ihr unten rechts in der Ecke „+3“ (+3.00 stops) seht. Sollte euch eine der Belichtungsstufen nicht gefallen, könnt ihr diese wie gehabt über "File->Edit in Image Editor" bearbeiten.
Seid Ihr mit dem HDR Bild und den 7 Belichtungsstufen zufrieden könnt ihr das HDRI abspeichern.
Geht dazu auf File-> Save as und wählt „Portable Floatmap“ (*.pfm) Format.
Damit habt ihr euer HDR Bild erstellt.
Jetzt müssen wir aus dem PFM File wieder 6 Einzelbilder machen. Und da kommt der Knackpunkt! Valve wird demnächst ein Tool rausbringen, das sich „Splitskybox“ nennt.
Da es das aber noch nicht gibt und wohl erst mit dem nächsten SDK Update kommt können hier nur die weiter arbeiten, die z.B Photoshop CS2 haben oder eine andere Software die HDRI´s unterstützt (viele gibt es da noch nicht). Ich habe meinen Sky mit PShop CS2 wieder in 6 Einzelbilder geteilt.
Splitskybox wird irgendwann in eurem …/sourcesdk/bin Verzeichnis liegen damit geht das dann einfacher (über drag und drop des PFM Bildes auf die Splitskybox.bat).
Resultat sollte in beiden Fällen 6 Einzelbilder im PFM Format sein z.B.(bei mir):
Sky_sunset01_hdrft.pfm
Sky_sunset01_hdrlf.pfm
Sky_sunset01_hdrbk.pfm
Sky_sunset01_hdrrt.pfm
Sky_sunset01_hdrup.pfm
Sky_sunset01_hdrdn.pfm
Speichert diese in: sdk_content/cstrike/materialsrc/skybox/
Als nächstes mach ihr euch mit dem Notepad 6 TXT Files
Sky_sunset01_hdrft.txt
Sky_sunset01_hdrlf.txt
Sky_sunset01_hdrbk.txt
Sky_sunset01_hdrrt.txt
Sky_sunset01_hdrup.txt
Sky_sunset01_hdrdn.txt
Und schreibt in jedes dieser Files folgenden Text.
"pfm" "1" "pfmscale" "1" |
Diese TXT Files sagen der Source Engine, das die Skybox ein PFM Format hat und die Belichtungsstufe "+-0.00" ist (also die Basisstufe). Wer will, kann diese Basisstufe über das "pfmscale" ändern.
So, nun brauchen wir noch je 6 VMT Files. Macht diese wieder mit dem Notepad und speichert sie unter
"couter-strike source/cstrike/materials/skybox"
Sky_sunset01_hdrft.vmt
Sky_sunset01_hdrlf.vmt
Sky_sunset01_hdrbk.vmt
Sky_sunset01_hdrrt.vmt
Sky_sunset01_hdrup.vmt
Sky_sunset01_hdrdn.vmt
In jedes dieser Files kommt der Text:
"sky" { "$hdrbaseTexture" "skybox/Sky_sunset01_hdrft" "$nofog" "1" "$ignorez" "1" "$basetexture" "skybox/Sky_sunset01ft" } |
Die anderen 5 vmt sehen gleich aus, bis auf das File auf das sie zugewiesen sind. Es ändert sich also nur das "Sky_sunset01_hdrft" in "Sky_sunset01_hdrlf" und (für´s LDR Fallback) "Sky_sunset01ft" in "Sky_sunset01lf“ u.s.w.
Diese VMT Files sehen eigentlich genauso aus wie für eine LDR Skybox nur mit dem Zusatz "$hdrbaseTexture" für das HDR und "$basetexture" für das LDR Fallback (kommt gleich).
LDR Fallback
So, nun haben wir es fast geschafft! Was unser Sky jetzt noch braucht ist ein so genanntes "LDR Fallback". Dieses erstellen wir aus den 6 original TGA Files unseres Himmels, die wir benutzt haben bevor wir die in ein HDR gewandelt haben. Legt diese in das Verzeichnis wo auch die PFM files drin liegen. Also: …/sdk_content/cstrike/materialsrc/skybox/
Sky_sunset01ft.tga
Sky_sunset01lf.tga
Sky_sunset01bk.tga
Sky_sunset01rt.tga
Sky_sunset01up.tga
Sky_sunset01dn.tga
Wie bei einer Standart LDR Skybox brauchen wir hier auch 6 TXT files im gleichen Verzeichnis.
Sky_sunset01ft.txt
Sky_sunset01lf.txt
Sky_sunset01bk.txt
Sky_sunset01rt.txt
Sky_sunset01up.txt
Sky_sunset01dn.txt
mit dem folgenden Text:
"dxt5" "1" "skybox" "1" |
Jetzt müssen wir den ganzen Kram Compilieren. Kopiert euch dazu einen Shotcut der "vtex.exe" vom "sourcesdk/bin" Verzeichnis auf euren Desktop und drag-droped eure 6 PFM und 6 TGA Files auf diesen Shortcut.
Wenn alles gut gelaufen ist solltet ihr nun 12 VTF Files in eurem
"couter-strike source/cstrike/materials/skybox/" Verzeichnis finden.
Jetzt könnt ihr diesen neuen Sky in euren Maps verwenden.
Allerding muss man noch etwas beachten. Wenn ihr eine Map mit HDR compiliert habt müsst ihr die Cubemaps für eure Map sowohl einmal im HDR Modus als auch einmal im LDR Modus ausführen. Mit anderen Worten heisst das:
- Compiliert die Map mit Vrad und HDR
- Wenn ihr die Map startet sollte CSS diese gleich mit HDR einladen. Wenn nicht gebt in die Console "mat_hdr_enabled 1" ein
- "Buildcubemaps" eingeben und HDR cubemaps berechnen lassen.
- Nun HDR ausschalten "mat_hdr_enabled 0"
- Noch mal "Buildcubemaps" eingeben.
Und das wars dann.
Dieses Tutorial funktioniert auch für DoD Source oder HL2. Es ändern sich nur die Verzeichnisse wo ihr die Einzelnen Files abspeichern müsst.