In diesem kleinen Tutorial möchte ich zeigen wie man mit relativ einfachen Arbeitsschritten aus einer normalen Textur eine qualitativ hochwertige Displacement Map generieren kann.
Es gibt diesbezüglich zwar schon ein Programm namens “CrazyBump” (www.crazybump.com), jedoch bin ich mit dessen Ergebnisen nicht immer ganz zufrieden, und deshalb habe ich selber ein bisschen geforscht, wie man Displacement Maps einfach selber generieren kann.
Beim Erstellen von Displecement Maps aus normalen Texturen gibt es ein Problem. Denn, wie es nicht anders sein könnte, stellen Texturen die Farbe und nicht die Tiefe einer Oberfläche dar. Gruben kann man allerdings trotzdem erkennen, da sie sozusagen im Schatten liegen. Diese erscheinen also dunkler als Erhebungen. Das gibt uns einen Hinweis, wie wir die Texturen auswählen sollten. D.h. gleichmässig beleuchtete Oberflächen, bei denen Gruben nicht wirklich dunkler erscheinen werden ein schlechtes Ergebnis geben.
Wenn man also eine Textur total desaturiert hat man im Grund fast schon eine Displacement Map, allerdings ist das Ergebnis viel zu „flach“ und diese Textur kann höchstens als Bump Map dienen.
Warum ist das so? Ganz einfach, weil tiefere Ebenen (oder Gruben) im selben „schwarz-weiss-Bereich“ sind wie hohe Ebenen. Im Bild erscheinen sie zwar dunkler weil bei Gruben mehr dunklere Bereiche sind wie helle. Das Problem ist allerdings, dass kleine Erhebungen in tiefen Ebenen einen selben (oder ähnlichen) Weisswert/Helligkeit haben wie Erhebungen in hohen Ebenen. D.h. sie haben die selbe Höhe. Damit wir also mehr Tiefe in die Map bringen, muss alles was in einer Grube ist grundsätzlich dunkler sein wie alles was auf einer Erhebung ist. Sobald etwas die selbe Helligkeit hat, ist es auch auf der selben Höhe.
Da wir nun wissen was an dieser S/W-Map noch falsch ist bzw. fehlt stellt sich nun die Frage, wie wir das erreichen. Und die Lösung ist im Grunde ganz einfach. Wir filtern die Map nach Detailstufen. D.h. in der ersten und gröbsten Detailstufe interessieren wir uns nicht für die kleinen Grübchen und Kerben, sondern für die grossen „Täler und Berge“. Indem wir also die Map stark weich zeichnen (also z.b. mit einem Gaussian Blur) werden diese kleinen Details verwischt und nur die grobe Struktur bleibt übrig.
Vorher empfehle ich übrigens die ganze Komposition auf 16bit-Mode zu stellen, weil Displacement Maps grundsätzlich hohe Bit-tiefen benötigen.
Da mit diesem Effekt (Weichzeichnen) aber der Kontrast verringert wird, muss dieser wieder angepasst werden (d.h. 100% schwarz bis 100% weiss).
Am einfachsten macht man das mit „Auto Contrast“. Hier ist allerdings Wichtig, dass man vorher die Toleranzen auf 0,00% Stellt [1] (Levels… → Options… → Shadows-Clip und Highlights-Clip auf 0,00% Stellen).
Und nun bauen wir stufenweise mehr Detail in unsere Map. In meinem Beispiel habe ich 8 Stufen, wobei ich bei den höheren Detailstufen kleinere „Blur-Schritte“ gemacht habe [2] (somit werden die kleinen Details nicht ganz so spitzig). Bei der niedrigsten Detailstufe sollte der Blur so stark sein, dass die gröbsten Details gerade noch sichtbar sind (z.B. bei einer Mauer sollten die einzelnen Steine noch erkennbar sein). Bei jedem neuem Layer wird der Kontrast natürlich angepasst. Die Oberste stufe ist im Grunde das originale Bild, allerdings auch mit Kontrastanpassungen (falls überhaupt nötig).
Diese Layer müssen jetzt ineinander geblendet werden. Hierfür verwende ich als Layereffect „Screen“ [1], dabei muss aber die Opacity angepasst werden. Diese ergibt sich aus der Anzahl von Layer. In meinem Beispiel also 8 Layer. D.h. 100% / 8 Layer ergiebt 12.5 % für jeden Layer [3]. Der unterste wird natürlich nicht mitgezählt. Dieser bleibt auf 100% Opacity und hat „Normal“ als Layereffect.
Nun kann man alle Layer zusammenmergen und hat im Grunde schon die fertige Displacement Map. Diese kann man auch problemlos tweaken. Z.B. kann man die Gradationskurven bearbeiten.
Gerender sieht das dann so aus (3d Studo Max & VRay & VRayDisplacement):
Bzw. mit Diffusemap so:
Und hier noch zwei weitere Beispiele:
Es gibt sicherlich auch andere Möglichkeiten einen solchen Effekt zu erreichen, wichtig ist allerdgins nur das Prinzip das dahinter steckt.
Photoshop hat z.B. einen Filter namens “Surface Blur”, welcher einen sehr ähnlichen Effekt erzeugt, allerdings wird mit diesem Filter die Oberfläche meist sehr unruhig und rau. Bis jetzt sind mir die besten Ergebnisse mit diesem Workflow gelungen, da man relativ viele Kalibrierungsmöglichkeiten hat.
Ich hoffe dieses Tutorial war halbwegs verständlich. Falls aber doch Unklarheiten bestehen sollten, könnt ihr gerne Fragen stellen.
Ansonsten wünsche ich viel Spass beim selber Probieren!
edit:
Auf Wunsch von Joooo hab ich noch ein ganzes Beispiel gemacht. Das könnt ihr hier herunterladen. Im Zip-File enthalten sind:
- Orgiginale Textur / Diffuse Map (hab ich übrigens von www.cgtextures.com)
- psd-File mit den einzelnen Layer
- fertige Displacement-Map (bei der 2. version hab ich einfach nur den Kontrast mittels Curves bearbeitet)
- 3ds-Max-Szene mit dementsprechenden Material (ACHTUNG: VRay-Materials & VRay-Displacement)
Aussehen sollte das ganze dann ungefähr so:
David Fritsche















Hallo
Könntest du vielleicht die Diffusemap bzw. das Ausgangbild das du im Tutorial verwendet hast auch in der Auslösung der entstandenen Normalmap dazu tuhen?
So könnte man die eignenen Ergebnisse mit deinem vergleichen (Wenn man es auf der gleichen Basis macht) und das zusammen mit der Displacement map die ja schon da ist nachrendern.
Gruß,
Joooo
Hallo Joooo
Habe die Projektfiles von diesem Tutorial leider schon gelöscht :-\ und leider finde ich genau diese Map nicht mehr (diese Baumrinde, oder was auch immer das war). Hab aber trotzdem ein Beispiel gemacht, einfach mit einer anderen Textur … das Prinzip ist ja schlussendlich ja das selbe.
Gruss,
David
Danke
Und Danke überhaupt für das Tutorial, hat mir sehr geholfen.
Hi,
))
ich bin gerade auf Deinen Workflow gestoßen und teste diesen selber aus.
Das ist echt schick und hilft wirklich weiter. Vielen Dank dafür
Hey,
erstmal super vielen Dank fuer dieses Tutorial, sehr geil!
Wenn ich jetzt jedoch eine alte Mauer mit dieser Technik bearbeite, hats ja oft dunklere Steine und hellere Steine. Heisst das, erstmal Handarbeit und die ganzen dunklen Steine aufhellen? Oder hast du da einen Trick parat?
Wie auf deinem Beispiel mit der Naturmauer sind die Stellen wo gruenes Moos waechst im Displacement ja auch als Tiefen sichtbar.
Gruesse,
Markus
Hallo Markus,
da hast du völlig recht. Da dieses Konzept von den gegebenen Farben (genauer gesagt deren Helligkeit) ausgeht, sind diese natürlich massgeblich.
Diese Technik eignet sich darum vor allem bei Texturen die keine klare/saubere Struktur haben (wie z.B. Stein/Felsen, Baumrinde, Dreck/Erde, u.ä.).
Bei meinem Beispiel mit der Mauer habe ich gerade deswegen eine sehr alte und unebene Mauer verwendet. Bei einer eher glatten Mauer mit hellen & duklen Steine funktioniert das nicht mehr so gut. Im schlimmsten Fall musst du tatsächlich die Helligkeit der einzelnen Steine angleichen. Ein kleinen Trick den du eventuell anwenden kannst (gerade bei bunten Texturen) ist, wenn du das Bild nicht einfach desaturierst, sondern den “Black & White” Filter verwendest, so kannst du die Helligkeit der einzelnen Farben besser angleichen (damit wäre z.B. das Grün vom Moos nicht mehr so dunkel, und somit auch nicht mehr so tief).
Tut mir leid dass ich dir da nicht besser weiterhelfen kann.
LG
David