Wellenbewegungen



  • Hallo,

    da ich dank der Hilfe von XMAMan mein letztes Problem bei meiner Wassersimulation fürs erste zufriedenstellend lösen konnte, hatte ich jetzt genug Zeit ein neues Problem zu entdecken 🤡

    Und zwar habe ich die Wasseroberfläche meiner Simulation bisher nur mit einer einfachen mathematischen Funktion modelliert. Das ganze sah zwar nicht schön aus, reichte aber zum Testen. Nun wollte ich aber eine ansehnliche Oberfläche haben und habe dafür mit GIMP eine Height- und eine Normalmap erzeugt*, die ich jetzt auf meine Wasserfläche lege. Das sieht schon ganz cool aus, allerdings bewegt sich da noch gar nichts. Und das ist das Problem.
    Zuerst habe ich die Texturen einfach in eine Richtung zu bewegen, das ganze sah aber gar nicht gut aus.
    Danach habe ich versucht, immer zwischen zwei Maps hin- und herzuwechseln, das ganze sieht aber ziemlich langweilig, linear und unecht aus.
    Dann habe ich das ganze mit drei und vier Maps versucht, ohne sichtbare Besserung.
    Zuletzt habe ich versucht über die Map noch eine zeitabhängige Funktion zur Wellenbewegung zu legen, sah aber auch nicht schön und zu linear aus.

    Ich bekomme es momentan einfach nicht hin sowas "echt" aussehen zu lassen und bin anscheinend auch zu blöd um bei google eine gute Methode zu finden.
    Ich hoffe ich finde auch hier jemanden, der mir ein paar gute Methoden nennen kann. Danke schonmal im Voraus 🙂

    *Da ich hierfür etwas lange gesucht habe, wie man sowas anstellt, hier eine Kurzanleitung für Leute die diesen Thread finden:
    Mit GIMP eine neue, weiße Textur erstellen und dann den Differenz-Wolken-Filter drüberlaufen lassen. Dann hat man schonmal seine Heightmap. Zur Erstellung der Normalmap aus der Heightmap gibt es dann dieses Plugin.



  • Hallo,

    diese Wellen werden mit fractalen -Methoden errechnet, hoch komplex,
    Dann wird ein Film aus Verticepunken erzeugt z.B. 128 unterschiedliche Netze
    diese werden dann geladen jedem Netz gehört eine textur.

    Dies ist zwar aufwenig aber ingame sehr viel schneller als würde die CPU
    diese komplexen Mappings und Netzbewegungen in Echtzeit errechnen.

    Die GPU's der Grafikkarte ermöglichen jedoch genau diese Netzgenerationen.
    Da sitzen ganze Teams dran und entwickeln in Zusammenarbeit mit NV
    die Umsetzung von Codes in Karten -Hardware.

    Es ist also für die schnellste Darstellung ein AnimMesh via 3D-Smax oder Blender zu erstellen,und diesen dann "abspielen".
    Alles andere ist fraktale Mathematik Matritzen tollero 🙂

    Gz
    K.



  • Hmm, bis auf den letzten Absatz gehst du gar nicht auf die Fragestellung ein.
    Auch scheint mir das ganze zwar sinnig allerdings extrem aufwändig. Hat nicht noch jemand etwas einfachereres, effizienteres in seiner Trickkiste? 🙂



  • Ich hätte da noch eine Idee in Petto^^

    Erzeuge eine Fläche, welche sich aus vielen Dreicken zusammensetzt. Im Vertexshader verschiebst du dann die Vertize entlang der Normalenvektoren einfach mithilfe ein Funktion, die ungefähr so aussieht:

    vertexNew = vertexOld + vertexNormale * sin((vertexOld.x+vertexOld.y) * t)

    t ist eine float-Variable, die über der Zeit immer weiter erhöht wird.

    Denk einfach mal drüber nach, wie du ein Wellenmuster erzeugen würdest, wenn du die Aufgabe hättest, eine Liste von Dreiecken zu erzeugen, welche Wellenmäßig aussehen. ALso sowas hier:

    http://business.chip.de/bii/9/5/2/8/6/7/4/109cffea717fd83e.jpg

    Die Formel, welche du zur Erzeugung von solchen Sachen dort nimmst, kannst du dann ja im Vertexshader auch nehmen.



  • Irgendwie habe ich aus deinem Vorschlag nichts vernünftiges hinbekommen, aber Danke für die Anregung.
    Ich habe es jetzt so gelöst, dass ich aus der Normalmap mit ein paar Filtern in GIMP eine Distortionmap erstellt habe, die dann mit der Zeit überlaufen wird und die finalen Texturkoordinaten etwas verzehrt. Da das alleine noch nicht ganz vollständig aussah habe ich noch eine relativ flache Sinusfunktion in Abhängigkeit von Ort und Zeit aufaddiert. Das ganze sieht dann doch relativ cool aus 🙂



  • Ich würde gerne einmal paar Ergebnisse von dir sehen wollen.



  • XMAMan schrieb:

    Ich würde gerne einmal paar Ergebnisse von dir sehen wollen.

    Die gibt es, wenn das ganze halbwegs fertig aussieht. Leider kam ich in der letzten Zeit nicht mehr zu so viel 🤡

    Was mir jedoch noch aufgefallen ist:
    Wenn ich nur mit einer Normalmap arbeite kann ich für die projektiven Texturkoordinaten ja einfach die dazugehörende dudv-Map nehmen. Nun rechne ich aber noch eine Sinusfunktion mit ein, so dass sich meine Normale ändert. Dementsprechen müssten ja auch die dudv-Werte sich ändern. Allerdings weiß ich nicht genau wie ich das effizient anstellen soll. Die dudv-Werte so zu errechnen, wie es das Bildbearbeitungsprogramm der Wahl macht, denke ich, ist viel zu rechenaufwändig (oder habe ich eine falsche Vorstellung davon wie diese Werte errechnet werden?).
    Wie kann ich nun effizient die projektiven Koordinaten berechnen?


Anmelden zum Antworten