Pythonstuff GLSL in English Pythonstuff GLSL auf Deutsch Pythonstuff GLSL Pythonstuff
PythonStuff Home
 

 

Normalmaps aus Heightmaps erzeugen

Um aus einem Höhenbild (1 relevanter 8-bit Kanal, 0 = unten, 255 = oben) eine Normalmap (auch Bumpmap genannt) zu erzeugen, gibt es mehrere Möglichkeiten.

Ich stelle hier zwei vor:

Schau Mama: Ohne Programmieren! - Bumpmaps mit Gimp erzeugen

Installiere

Auf der Webseite sieht man, was man damit alles anstellen kann - zahlreiche Einstellmöglichkeiten inklusive Vorschau mit OpenGL !

Das Ausgangsbild muss ein “RGB”-Bild (3 Kanäle) sein (falls nötig, konvertieren mit Bild/Modus/RGB), dann das Plugin aktivieren mittels Filter/Abbilden/Normalmap.

Convert to 3-Channel RGB with Gimp Convert to Bumpmap with Gimp

Mit PIL und Python Bumpmaps erzeugen

Der Vorteil dieser Methode ist, dass mein kleines Programm (ca. 5700 Byte, als ich das letzte Mal hingeschaut habe) in der Python-Umgebung läuft, die ihr sowieso für das Nachvollziehen der Beispiele auf diesen Seiten installiert habt. Wenn nicht, sollte Python 2.6 (oder neuer) mit PIL ausreichen.

Das Programm kann sogar als Modul in Deine eigene Pyglet Entwicklung importiert werden !

Damit sparst Du das manuelle Umwandeln während des Designs: Wenn das Programm nach einer Änderung an der Heightmap das erste Mal gestartet wird, wird wie durch ein Wunder die Normalmap aktualisiert :-).

Dafür habe ich mir die vielen Einstellmöglichkeiten gespart; wer sich ansieht, wie das Programm funktioniert (siehe unten), wird schnell merken, wo man hingreifen muss, um die Möglichkeiten zu erweitern.

Hier ist erstmal die Source:

und die Verwendung:

height2bump.py -<options> <input_file> <output_file>
   calculates a bumpmap (normalmap) from the "R"-Channel of the input_file.
   options:
       s use 5x5-Sobel-Filter instead of 5x5-Scharr
       t write output_file only if older than input_file
         (and ignore missing input_file)
       a put heightmap into the alpha channel
       v verbose
       q really quiet

Wenn man mit der Heightmap links startet mit

python height2bump.py height.png normal.png

erhält man das Bild in der Mitte. Es wird mit einem Scharr-Filter berechnet, dessen Ergebnis für mich eine Kleinigkeit besser aussieht als der klassische Sobel-Filter (Bild rechts), den das Programm ebenfalls beherrscht:

python height2bump.py -s height.png normal_sobel.png

Mit der Option ”-s” bekommt man das Bild rechts mit Sobel-Filter.

Wer verstehen will, wie das Programm funktioniert, liest die Programmbeschreibung.

Test Heightmap - das Höhenbild Bumpmap/Normalmap mit Scharr-Filter Bumpmap/Normalmap mit Sobel-Filter


English version, Start
Impressum & Disclaimer