Registriert: Sa Mai 04, 2002 19:48 Beiträge: 3829 Wohnort: Tespe (nahe Hamburg)
Seth liefert einen Beitrag als IOTW:
Gegeben ist eine Heightmap, aus dieser wird mittels einer Lookup Textur (ein eindimensionaler Gradient, der angibt, auf welcher Höhe, welche Textur vertreten sein soll) eine Colormap erzeugt (siehe Bild). Dies passiert allerdings noch nicht im Shader (wäre zwar möglich, würde jedoch bei jedem Rendervorgang wiederholt werden).
Diese Textur wird dann mit den drei auf die Landschaft gekachelten Texturen an den Shader übergeben. Das Verhältnis von Rot, Grün und Blau eines Pixels der Colormap beschreibt dabei das Mischverhältnis der drei Texturen an dieser Stelle. Dadurch lassen sich weiche oder auch harte Übergänge erzeugen. Übrigens muss die Colormap nicht zwangsläufig vom Programm berechnet werden, wenn man selbst eine Colormap malt und diese übergibt, kann man selbst schöne Effekte erzeugen, die Berechnung via Programm stellt nur sicher, dass ein festes Verhältnis von Höhe zum Mischverhältnis der Texturen gegeben ist.
Die Idee basiert auf einem kleinen Codeschnipsel am Ende des GLSL Tutorials, viel mehr ist es auch nicht, was der Shader macht. Man könnte die Heightmap selbst auch im Shader berechnen, nur wird es dann problematisch was die Normalen angeht. In die andere Richtung gedacht, könnte man die Ergebnistextur außerhalb des Shaders berechnen, der Nachteil wäre halt eine relativ große Textur. Normalmapping könnte das Ganze auch noch ein wenig verschönern.
Registriert: Sa Aug 18, 2007 18:47 Beiträge: 694 Wohnort: Köln
Programmiersprache: Java
Na wer sagt denn dass die dargestellte "Landschaft" auf unserem Planet ist? Könnte sich doch um eine dieser selten Fälle von besonders adhäsiv an Felswänden haftenden Dihydromonoxid handeln, oder etwa nicht?
Back2Topic:
Auf ähnliche Art kann man auch eine Detailtextur hinzufügen. Man benötigt dazu eine Textur die in jedem Kanal ein Detail enthält. Also Detail A im roten Kanal, Detail B im grünen Kanal, etc.
Wenn man nun zusätzlich noch eine Textur (Maske) erstellt die leicht von der obigen abweicht, kann man noch einiges an Variation herausholen. Vorausgesetzt man kachelt die Detailtextur.
Maske und Detailtextur einfach im Shader multiplizieren.
_________________ Es werde Licht. glEnable(GL_LIGHTING); Und es ward Licht.
Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"
Das ist jetzt kein Textureffekt, oder? Sondern richtig Geometrie und der Shader bestimmt durch die Heigh Map nur, welche Textur genutzt wird. Frag nur weil ich grad mit Parallax Occlusion Mapping rumteste.
_________________ __________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7804 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Etwas beleuchtung wäre nett, damit man den 3D effekt besser erkennt. Auf dem Bild kann man durch die Draufsicht nämlich nix spektakuläres erkennen. Das könnte man auch ganz leicht in Photoshop malen. Eventuell würde es auch was bringen, die Ansicht leicht zu kippen.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Hübsch
IOTWs sind immer was feines
Soetwas hatte ich mir auch mal gebastelt, als experiment in meinem ShaderEditor, aber irgendwie war mein ergebnis nicht so überzeugend (und Echtzeit konnte man das, was der da angestellt hat auch nicht nennen ... )
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Etwas beleuchtung wäre nett, damit man den 3D effekt besser erkennt. Auf dem Bild kann man durch die Draufsicht nämlich nix spektakuläres erkennen. Das könnte man auch ganz leicht in Photoshop malen. Eventuell würde es auch was bringen, die Ansicht leicht zu kippen.
Das erste Bild ist die berechnete Textur, deshalb ist das auch von oben und ohne jegliche(s) Licht oder Schatten.
Die anderen beiden Bilder stellen dann das fertige 3D Ergebnis mit Licht dar.
Vielleicht hätte ein anderes Bild als erstes ausgewählt werden sollen
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7804 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich hab das Bild ausgetauscht. Allerdings ist das zu groß fürs layout. Hab Phobeus deswegen ne PM geschrieben. Ich hoffe er verkleinert es nochmal.
In zukunft bitte beim einreichen der Bilder darauf achten: Das Resultat sollte als IOTW gezeigt werden nicht die Rohmaterialien. (Entsprechend markieren). Das IOTW sollte nicht Breiter als ... so 500px haben. Damit das DGL Layout nicht gesprengt wird.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Sa Mai 04, 2002 19:48 Beiträge: 3829 Wohnort: Tespe (nahe Hamburg)
Nun ratet mal, warum ich mich bewusst so entschieden habe? Ich dachte die anderen Bilder wären in einer hohen Auflösung interessanter und deswegen habe ich sie auch in einer größeren Auflösung gelassen, damit sie nicht ins Layout skaliert werden müssen...
_________________ "Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."
Mitglieder in diesem Forum: 0 Mitglieder und 9 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.