amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Prozedurales Texturieren [ - Suche - Neue Beiträge - Registrieren - Login - ]

1 -2- [ - Beitrag schreiben - ]

22.02.2008, 14:58 Uhr

Reth
Posts: 1858
Nutzer
Zitat:
Original von Der_Wanderer:
Alles, was flach auf dem Boden liegt, kann man gut mit PerlinFX machen. Grässer auch, indem man einfach einen alog macht, der einen Grashalm zeichnet, und man nimmt ein Perlin Noise Muster als Grundlage wie lang er wird. So ist das Grass auf den Bilder oben gemacht. Ähnliches geht auch mit Geröll, wenn man das Perlin Noise als Bumpmap oder Displacement map nimmt.


Sorry, habe mir den Code von PerlinFX nicht angesehen. Was meinst Du mit alog? Deine Routine, die aus Ellipsen Röhren macht (oder nen Logarithmus)?
Was ist der Grund, ein Perlin Noise Muster für die Länge zu nehmen (oder funktioniert selbiges einfach nur gut in dem Fall)? Und wie funktioniert das Zusammenspiel zw. Grashalm, Perlin Noise Muster und Grasfarbe? Wird die dann auch aus dem Muster gewonnen?

Für Bumpmapping und Displacement Map muss ich mich erst noch entsprechend einlesen/aufschlauen.

Ciao

[ - Antworten - Zitieren - Direktlink - ]

22.02.2008, 15:04 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Ich meinte Algo (Algorithmus). hab das Posting korrigiert.

Ja, der Grauwert des Perlin Noise Bildes wird als Länge für den Grashalm benutzt, oder als Höhe beim Bump Mapping. Oder einfach nur ein bisschen dazu gemischt um "Dreck" ins Bild zu bekommen.

Die Farbe des Grashalms lässt sich an einer verblüffend einfachen Theorie ableiten:

Kurze Grashalme sind dunkel, weil sie im Schatten sind, und lange sind hell, weil sie in die Sonne ragen. Dazu noch ein wenig Zufall und du hast es.

--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

22.02.2008, 15:42 Uhr

Reth
Posts: 1858
Nutzer
Zitat:
Original von Der_Wanderer:
Ich meinte Algo (Algorithmus). hab das Posting korrigiert.


Bin in Sachen Grafikalgorithmen ebenso Unerfahren wie bei den mathematischen Grundlagen. Welche Algorithem eignen sich denn zur Generierung von Grashalmen? Mit einer Grammatik kommt man da nicht unbedingt weiter, denke ich.

Zitat:
Kurze Grashalme sind dunkel, weil sie im Schatten sind, und lange sind hell, weil sie in die Sonne ragen. Dazu noch ein wenig Zufall und du hast es.

Allerdings! Klingt mal einfach!

Ciao

[ - Antworten - Zitieren - Direktlink - ]

22.02.2008, 15:51 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Also bei solchen "Algorithmen" sollte man etwas Fantasie mitbringen. Sowas wirst du nirgends finden.

Überleg doch mal selbst, wie könnte man denn einen Grashalm zeichenen... ?

--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

22.02.2008, 15:59 Uhr

Reth
Posts: 1858
Nutzer
@Der_Wanderer:

Stimmt. Dachte, da gibts bestimmt auch wieder hochkomplizierte Renderalgos.

Ich würde mal zufällig lange, krumme, breite Linien zeichnen, deren Ausgangspunkte dicht beieinander liegen. Allerdings müsste man das Ganze dann wieder irgendwie "nicht ganz" zufällig entstehen lassen, aber hier kommt ja Dein Perlin-Noise-Gedanke mit der Höhe ins Spiel.
Warum der aber funktioniert, weiß ich auch nicht, muss ja dann ein Muster sein, dass nicht ganz so diffus ist, wie das erste blaue auf der Freespace-Seite.

Ciao

[ - Antworten - Zitieren - Direktlink - ]

22.02.2008, 16:05 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Hier siehst du es ja:

Bild: http://www.hd-rec.de/pics/growgrass.png

Zuerst erzeuge ich mit Perlin FX einen "Klecks". auf jedem Pixl des Klekses lasse ich ein Grasshalm "hochwachsen". Da die Halme recht klein und dünn sind, benutze ich Alphalending, also setze keine ganzen Pixel, sondern mische sie mehr oder weniger mit dem Hinergrund. Das sieht man dann auf dem letzen Bild, wo der alpha channel berücksichtigt wird. Die Halme werden nach oben dünner, was sich im Alphachannel als niediger werdender Deckungsgrad auswirkt.


Nachtrag:
Was mit hier auffällt ist, dass ich gar keinen Schatten zeichne. Das sollte ich noch machen, dadruch würde das Gras noch plastischer.

--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de



[ Dieser Beitrag wurde von Der_Wanderer am 22.02.2008 um 16:06 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

22.02.2008, 16:09 Uhr

Reth
Posts: 1858
Nutzer
@Der_Wanderer:

Und das Ganze Zeugs wie Alphablending etc. hast Du dafür selber implementiert?

Nach dem Schatten frage ich lieber gar nicht erst! Etwa auch komplett selbst implementiert (also Lichtquelle mit Winkel, Helligkeit, Entfernung, Überdeckung von Objekten im Licht, ...)?

Ciao

[ - Antworten - Zitieren - Direktlink - ]

22.02.2008, 16:12 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Alphablending ist doch trivial. Es ist nur ein weiterer Wert, der das Mischungsverhältnis zwischen Hintergrund und Vordergrund angibt.

Und bei Schatten muss man das oft nicht so kompliziert machen. Ein Grashalm ist ja nur eine Pixellinie. Den Schatten zeichne ich dann genauso wie den Grashalm, nur eben zur Seite statt nach oben.



Nachtrag:

Das geht dann so ähnlich wie beim linearen Interpolieren:

dest_pixel = source_pixel * Alpha + dest_pixel * (1-Alpha)

Wenn alpha zwischen 0 und 1 liegt. bei ARGB ist es natürlich zwischen 0 und 255, also:

dest_pixel = (source_pixel * Alpha + dest_pixel * (255-Alpha)) / 255

ACHTUNG: durch 255 ! Da machen viele den Fehler und dividieren durch 256 bzw. machen ein ASR 8. Das ist falsch, siehe PerfectPaint. Da wird das Bild nach mehrmaligem bearbeiten immer dunkler...
Wer das ASR 8 nicht lassen kann, Arbeitet so korrekt:

dest_pixel = (source_pixel * (Alpha+1) + dest_pixel * (256-Alpha)) ASR 8




--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de



[ Dieser Beitrag wurde von Der_Wanderer am 22.02.2008 um 16:24 Uhr geändert. ]

[ Dieser Beitrag wurde von Der_Wanderer am 22.02.2008 um 16:24 Uhr geändert. ]

[ Dieser Beitrag wurde von Der_Wanderer am 22.02.2008 um 16:26 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

23.02.2008, 00:09 Uhr

Reth
Posts: 1858
Nutzer
@Der_Wanderer:

Also das mit dem Alpha-Blending leuchtet ein.

Wenn ich allerdings daran denke, dass ich gern Landschaften und Türme rendern würde, sehe ich schwarz. Sprich, ich denke, dass ich dann durch mein wenig begabtes Pixeln immer noch schneller zu Ergebnissen komme.

Aber ich werde den algorithmischen Teil auf alle Fälle weiter probieren.

Überlege z.B. auch gerade, wie man das macht, wenn man eine Textur hat (Mauerwerk) und diese dann auf einen Zylinder blittet (Turm).
Wenn man das nur so 1:1 macht, denke ich wird das nicht sehr plastisch aussehen, oder?

Kannst Du noch ein paar Tips zu Perlin Noise geben, wie man z.B. so schöne Landschaften hinbekommt, wie bei Dir?

Durch Übereinanderlegen verschiedener PN-Muster mit unterschiedlichen Farben und Schwellwerten?

Und noch Verständnisfragen:

Wird auf der Freespace-Seite durch das Aufrufen aller PN-Funktionen pro Pixel schon das Endergebnis erreicht (also das übereinandergelegte Bild)?

Wie komm ich denn auf die Glättung, so wie auf der Freespace-Seite.
Mir ist klar, dass der Pixel selbst den größten Anteil hat, die Pixel die direkt an seinen Seiten anliegen den zweitgrößten und die Pixel, die nur an die Ecken stoßen den geringsten und die Gesamtsumme der Gewichte 1 sein muss.
Aber dass die 4 Eckpixel 1/4, die 4 Seitenpixel 1/2 und der Pixel selbst 1/4 an Gewicht ausmachen, wie komm ich da drauf?

Eigenartig ist auch, dass ich, wenn ich den Algo von der Freespace-Seite ohne Glättung nehme auch auf das erste (rechte) Bild der ersten Noise-Funktion komme. Mit Glättung dagegen sieht das Ganze erheblich dunkler aus, hat viel mehr schwarz dazwischen. Das kann ich mir nun nicht erklären!

Ciao

[ Dieser Beitrag wurde von Reth am 23.02.2008 um 22:34 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

25.02.2008, 19:28 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Zitat:
Original von Reth:

Wenn ich allerdings daran denke, dass ich gern Landschaften und Türme rendern würde, sehe ich schwarz. Sprich, ich denke, dass ich dann durch mein wenig begabtes Pixeln immer noch schneller zu Ergebnissen komme.

Also das ist was ganz anderes.

Zitat:
Kannst Du noch ein paar Tips zu Perlin Noise geben, wie man z.B. so schöne Landschaften hinbekommt, wie bei Dir?
Durch ein geeignetes mapping von den Zufallswerten auf Farben.
Und auf jeden Fall mehrere Layers benutzen, die jeweils aus einem Perlin Muster bestehen.

Das hier sind Muster, die direkt aus Perlin Noise entstanden sind, ohne Nachbearbeitung, nur durch interpolieren der Zufallszahlen auf zwischen zwei RGB Farben:

Bild: http://www.hd-rec.de/pics/perlin.jpg

Und das hier sind Muster aus 3 4 oder 5 Layern übereinander, mit verschiedenen Überblend Modi (Mix, Add/Sub, Mul, Bumpmapping).

Bild: http://www.hd-rec.de/pics/perlin1.jpg Bild: http://www.hd-rec.de/pics/perlin2.jpg Bild: http://www.hd-rec.de/pics/perlin3.jpg

Und für das Gras gibt es noch den Überblend Modus "GrowGrass".

Zitat:
Durch Übereinanderlegen verschiedener PN-Muster mit unterschiedlichen Farben und Schwellwerten?
Ja, genau. Und verschiedenen Überblend Modi.

Zitat:
Wird auf der Freespace-Seite durch das Aufrufen aller PN-Funktionen pro Pixel schon das Endergebnis erreicht (also das übereinandergelegte Bild)?
Ja.

Zitat:
Wie komm ich denn auf die Glättung, so wie auf der Freespace-Seite.
Vergiss das mit Glättung.
Stell dir einfach 2x2, 4x4 und 8x8 vor, die übereinander gelegt werden müssen. Dazu zoomst du die 2x2 und 4x4 auf 8x8, und mixed die Bilder dann. Als interpolation nimmst du dann am besten Cosinus.

Zitat:
Mir ist klar, dass der Pixel selbst den größten Anteil hat, die Pixel die direkt an seinen Seiten anliegen den zweitgrößten und die Pixel, die nur an die Ecken stoßen den geringsten und die Gesamtsumme der Gewichte 1 sein muss.
Aber dass die 4 Eckpixel 1/4, die 4 Seitenpixel 1/2 und der Pixel selbst 1/4 an Gewicht ausmachen, wie komm ich da drauf?

Das ist eine Faltung (Convolution), aber das ist erstmal unwichtig um ein Perlin Noise Muster zu erzeugen. Das kann man, wenn man will, ganz am Schluss machen, wenn das Bild zu scharfkantig ist. Das ist nichts anderes als ein Weichzeicher in einem Malprogramm.

Zitat:
Eigenartig ist auch, dass ich, wenn ich den Algo von der Freespace-Seite ohne Glättung nehme auch auf das erste (rechte) Bild der ersten Noise-Funktion komme. Mit Glättung dagegen sieht das Ganze erheblich dunkler aus, hat viel mehr schwarz dazwischen. Das kann ich mir nun nicht erklären!
Lass die Glättung erstmal sein und versuche so ein Muster zu erzeugen.
Dann hast du schonmal den Perlin Noise Algo richtig gemacht. Alles andere ist Nachbearbeitung.

Bild: http://www.hd-rec.de/pics/256x256.png

--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

25.02.2008, 22:01 Uhr

Reth
Posts: 1858
Nutzer
Zitat:
Original von Der_Wanderer:
Durch ein geeignetes mapping von den Zufallswerten auf Farben.
Und auf jeden Fall mehrere Layers benutzen, die jeweils aus einem Perlin Muster bestehen.

Das hier sind Muster, die direkt aus Perlin Noise entstanden sind, ohne Nachbearbeitung, nur durch interpolieren der Zufallszahlen auf zwischen zwei RGB Farben:

Bild: http://www.hd-rec.de/pics/perlin.jpg


Welche Werte muss ich denn da beeinflussen um auf so ein Wolkenbild zu kommen? Nur die Persistenz?

Zitat:
Zitat:
Wird auf der Freespace-Seite durch das Aufrufen aller PN-Funktionen pro Pixel schon das Endergebnis erreicht (also das übereinandergelegte Bild)?
Ja.

Das funktioniert bei mir nicht! Wenn ich den Algo von der Freespace-Seite unverändert übernehme, dann komme ich nicht auf das Ergebnisbild der blauen Plasmawolke.
Allerdings wird dort ja gesagt, dass man so viele unterschiedliche Nosie-Funktionen braucht, wie man Iterationen macht.
Leider finde ich nirgends eine Primzahltabelle, in der so große Primzahlen drin sind (habe nur versch. Werte für die beiden kleineren Primzahlen gefunden, dort immer 10 benachbarte Primzahlen genommen)!

Zitat:
Lass die Glättung erstmal sein und versuche so ein Muster zu erzeugen.
Dann hast du schonmal den Perlin Noise Algo richtig gemacht. Alles andere ist Nachbearbeitung.


Wie gesagt bekomme ich nur das erste Muster hin, aber nicht das Endbild! Auf der Freespace-Seite ist auch nicht gesagt, wie oft die Schleife durchlaufen wird, die immer eine andere PN-Funktion ruft.
Dazu kommt dann noch das Problem mit den großen Primzahlen!

Ciao

[ - Antworten - Zitieren - Direktlink - ]

28.02.2008, 13:21 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Zitat:
Welche Werte muss ich denn da beeinflussen um auf so ein Wolkenbild zu kommen? Nur die Persistenz?
Die Wolke hat eine Persistenz von etwa 0.4, fadet von blau nach weiss, und ist etwas in der x-Achse gedehnt.

Zitat:
Das funktioniert bei mir nicht! Wenn ich den Algo von der Freespace-Seite unverändert übernehme, dann komme ich nicht auf das Ergebnisbild der blauen Plasmawolke.
Deshalb empfehle ich dir, das selbst zu implementieren. Wenn du den Algo übernimmst, und es geht nicht, dann ist das meistens schwer rauszufinden woran es liegt.

Zitat:
Allerdings wird dort ja gesagt, dass man so viele unterschiedliche
Nosie-Funktionen braucht, wie man Iterationen macht.
Leider finde ich nirgends eine Primzahltabelle, in der so große Primzahlen drin sind (habe nur versch. Werte für die beiden kleineren Primzahlen gefunden, dort immer 10 benachbarte Primzahlen genommen)!

Man braucht genau eine Noise Funktion. Und Noise Funktionen haben nichts mit Primzahlen zu tun.
Was man braucht ist mehrere Schichten erzeugen, die unterschiedliche "Frequenzen" haben, also unterschiedliche Detailgrade bringen, so wie du es auf der Bildersquenz auf der Seite siehst. Und das geht mit Cosinus Interpolation.

Zitat:
Wie gesagt bekomme ich nur das erste Muster hin, aber nicht das Endbild! Auf der Freespace-Seite ist auch nicht gesagt, wie oft die Schleife durchlaufen wird, die immer eine andere PN-Funktion ruft.
Dazu kommt dann noch das Problem mit den großen Primzahlen!

wie schon erwähnt, du brauchst nur EINEN Zufallszahlengenerator. Und Primzahlen braucht man dafür nicht.

Das "Endbild" ist zusammengesetzt aus mehreren Schichten, die alle mit dem gleichen Zufallszahlengenerator erzeugt sind, nur eben in unterschiedlichen Größen, die dann interpoliert werden.


--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de



[ Dieser Beitrag wurde von Der_Wanderer am 28.02.2008 um 13:23 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

28.02.2008, 21:50 Uhr

Reth
Posts: 1858
Nutzer
Zitat:
Original von Der_Wanderer:
Die Wolke hat eine Persistenz von etwa 0.4, fadet von blau nach weiss, und ist etwas in der x-Achse gedehnt.


Wie dehnt man denn etwas in dem Zusammenhang und wie stelle ich die Fadingwerte ein?

Zitat:
Deshalb empfehle ich dir, das selbst zu implementieren. Wenn du den Algo übernimmst, und es geht nicht, dann ist das meistens schwer rauszufinden woran es liegt.

Eigentlich hab ich das ja schon (nur noch nicht ursächlich).
Die aufsummierten Werte in der Schleife aller Noise-Funktionen ergeben bei mir irgendwann einen Wert <-1 und daher einen RGB-Wert>255.
Das hab ich nicht kompensiert, da ich keinen Plan habe, ob das so überhaupt sein darf (also ein Wert <-1 oder >1) und wenn ja, was die beste Möglichkeit der Kompensation sein soll!
Vielleicht liegts auch daran, dass bei mir alle Noise-Funktionen (beziehe mich hier wieder auf den Freespace-Text) dieselbe große Primzahl haben?

Zitat:
Man braucht genau eine Noise Funktion. Und Noise Funktionen haben nichts mit Primzahlen zu tun.
Was man braucht ist mehrere Schichten erzeugen, die unterschiedliche "Frequenzen" haben, also unterschiedliche Detailgrade bringen, so wie du es auf der Bildersquenz auf der Seite siehst. Und das geht mit Cosinus Interpolation.

wie schon erwähnt, du brauchst nur EINEN Zufallszahlengenerator. Und Primzahlen braucht man dafür nicht.

Das "Endbild" ist zusammengesetzt aus mehreren Schichten, die alle mit dem gleichen Zufallszahlengenerator erzeugt sind, nur eben in unterschiedlichen Größen, die dann interpoliert werden.


Ich weiß, dass Du diesen Weg vorgeschlagen hast (hab ich auch schon mal probiert, werd ich nun nochmals machen, nachdem ich das Ganze besser verstanden habe).
Aber wie sieht das denn insgesamt aus? Sind die Herangehensweisen von Dir und auf der Freespaceseite identisch? Du hast ja bestätigt, dass das "Übereinanderlegen" dort durch das Nacheinanderausführen mehrerer interpolierter Noise-Funktionen eines (x,y)-Punktes erreicht wird (also ohne jedesmal ein neues Bild für nur jeden 2., 3., 4. usw. Punkt zu berechnen). Dort steht aber auch, dass man dazu unterschiedliche Noise-Funktionen braucht (mit unterschiedlichen Primzahlen), und zwar so viele, wie man Durchläufe pro Punkt hat!
Ergibt das dann das gleiche Ergebnis wie bei Dir?

Ciao

[ Dieser Beitrag wurde von Reth am 28.02.2008 um 22:50 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

28.02.2008, 22:47 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Zitat:
Wie dehnt man denn etwas in dem Zusammenhang und wie stelle ich die Fadingwerte ein?
Das erkläre ich jetzt nicht.

Zitat:
Zitat:
Das "Endbild" ist zusammengesetzt aus mehreren Schichten, die alle mit dem gleichen Zufallszahlengenerator erzeugt sind, nur eben in unterschiedlichen Größen, die dann interpoliert werden.

Ich weiß, dass Du diesen Weg vorgeschlagen hast (hab ich auch schon mal probiert, werd ich nun nochmals machen, nachdem ich das Ganze besser verstanden habe).
Aber wie sieht das denn insgesamt aus? Sind die Herangehensweisen von Dir und auf der Freespaceseite identisch? Du hast ja bestätigt, dass das "Übereinanderlegen" dort durch das Nacheinanderausführen mehrerer interpolierter Noise-Funktionen eines (x,y)-Punktes erreicht wird (also ohne jedesmal ein neues Bild für nur jeden 2., 3., 4. usw. Punkt zu berechnen).

Das Ergebnis ist das gleiche. Nur dass meine Erklärung intuitiver ist, denke ich zumindest.
Du berechnest "Berge", "Felsen", "Steine" und "Sandkörner" und legst sie übereinander.
Wenn du es erstmal verstanden und implementiert hast, wirst du schnell sehen wo man das optimieren kann. Ich berechne Zeile für Zeile.

Zitat:
Dort steht aber auch, dass man dazu unterschiedliche Noise-Funktionen braucht (mit unterschiedlichen Primzahlen), und zwar so viele, wie man Durchläufe pro Punkt hat!
Das steht aber auch:

"Well, I don't know a lot about random number generators".

Man braucht nur einen, und Primzahlen haben damit gar nichts zu tun.
Damit ist man nur auf der Sicheren Seite was wiederholungen angeht, aber die "magischen" Zahlen müssen nicht prim sein.

Zitat:
Ergibt das dann das gleiche Ergebnis wie bei Dir?
Ja.


--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

28.02.2008, 22:55 Uhr

Reth
Posts: 1858
Nutzer
Danke immer wieder für Deine Antworten!
Hoffentlich haben noch viele andere was davon!

Zitat:
Original von Der_Wanderer:
Zitat:
Wie dehnt man denn etwas in dem Zusammenhang und wie stelle ich die Fadingwerte ein?
Das erkläre ich jetzt nicht.
Schade!

Jetzt haben wir parallel gepostet!
Habe gerade meinen letzten Post vor Deinem ergänzt um den Fehler, der bei der Freespace-Methode bei mir auftritt.

Kannst Du evtl. den Zusammenhang zw. Deinem Vorgehen und dem auf der Freespace-Seite (dieses Vorgehen wurde bisher auf den meisten Seiten zu PN beschrieben) erläutern?!

Sprich, wieso kommt es auf dasselbe raus, wenn ich PN mit einer Noise-Funktion für mehrere unterschiedlich große Bilder mit Interpolation berechne, oder ich berechne sie für ein Bild mit x unterschiedlichen Noise-Funktionen pro Bildpunkt?

Ciao

[ - Antworten - Zitieren - Direktlink - ]

29.02.2008, 13:45 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Also ich erkläre es nochmal, aber wenn es dann nicht hinhaut kann ich entweder nicht erklären oder du nicht verstehen, auf jedenfall klappt es dann einfach nicht.

Unser Ziel ist es erstmal, so ein Bild zu erzeugen, das ist die Grundlage für alle Effekthascherei der anderen Bilder, die ich hier gepostet habe:
Bild: http://www.hd-rec.de/pics/256x256.png

Und das geht so (optimieren kann man später):

1. Vergiss die Freespace Seite, BITTE BITTE!

2. Das Kernstück ist ein Zufallszahlengenerator.
Dafür verwenden wir einfach mal:

seed = seed * 11 + 1

Das funktioniert schon ganz gut. Alternativ kannst du auch jeden anderen Zuffi nehmen. Wir brauchen nur EINEN davon, nicht mehrere.
Damit können wir dann ein Rauschen-Bild erzeugen, indem wir die Zufallszahlen in Pixel verwandeln. Da gibts viele Methoden, die in unterschiedlichen Farbmustern/Effekten resultieren, fürs erste machen wir einfach Grauswerte, d.h. wir erzeugen eine Zufallszahl zwischen 0...255 (z.B. durch Zahl = seed & 0xFF) und nutzen sie als Grauwert des Pixels, also R = G = B = Zufallszahl.

Damit bist du dann in der Lage, so ein Bild zu erzeugen:

Bild: http://www.hd-rec.de/pics/Noise.jpg

3. Jetzt müssen wir uns nochmal an die Fraktal Theorie erinnern:
Das Grosse sieht genauso aus wie das Kleine. Bei den Bergen
bedeutet das, der Berg ist genauso geformt wie ein Felsen, der ist genauso geformt wie ein Stein, der ist genauso geformt wie ein Sandkorn, das ist genauso geformt wie ...
Und die liegen alle aufeinander, also müssen addiert werden.

Was wir in dem Bild oben erzeugt haben, wären quasi die Sandkörner.
Wenn die Berge also genauso aussehen, dann erzeugen wir uns einfach ein paar Sandkörner und zoomen sie gross:

Bild: http://www.hd-rec.de/pics/Noise2.jpg => Bild: http://www.hd-rec.de/pics/Noise3.jpg

Beim Zoomen verwenden wir Cosinus Interpolation zwischen den Punkten, damit es schön weich wird. Andere Interpolationsalgorithmen wären auch denkbar, aber Cosinus ist fast so einfach wie linear und sieht schon sehr gut aus, besser als linear.
Pixel einfach verdoppeln (Nearest Neigbour) würde auch gehen, dann bekommst du aber eckige Berge, was nicht gerade realistisch aussieht.

Diesen Vorgang müssen wir nun für jede Scicht (Oktave) machen, und von jeder Oktave zur nächsten verdoppeln wie den Detailgrad, also verdoppelt das Rauschen-Bild damit wir weniger vergrößern müssen.

Je nachdem, wie gross unsere gröbste Struktur sein soll, fangen wir bei 8x8, 16x16, 32x32 oder größer an, und wir hören bei unserer Ziel-Bild Dimension auf, in dem Fall 256x256:

Schicht1: Bild: http://www.hd-rec.de/pics/Noise3.jpg <= Bild: http://www.hd-rec.de/pics/Noise2.jpg(32x32)
(Berge)
Schicht2: Bild: http://www.hd-rec.de/pics/Noise_64b.jpg <= Bild: http://www.hd-rec.de/pics/Noise_64.jpg(64x64)
(Felsen)
Schicht3: Bild: http://www.hd-rec.de/pics/Noise_128b.jpg <= Bild: http://www.hd-rec.de/pics/Noise_128.jpg(128x128)
(Steine)
Schicht4: Bild: http://www.hd-rec.de/pics/Noise.jpg <= Bild: http://www.hd-rec.de/pics/Noise.jpg(256x256)
(Sandkörner)

4. Jetzt legen (addieren) wir die Schichten aufeinander.
Im einfachsten Fall addieren wir pixelweise und teilen das Ergebnis durch 4, damit wir wieder zwischen 0..255 liegen.
Hier kommt jedoch die Persistenz ins Spiel. Die gibt den Grad an, in welchem sich die Details vom Einfluss her verringern. Schliesslich ist ein Sandkorn ja nicht so hoch wie ein Berg, was wir oben angenommen haben wenn wir alle gleich gewichten.
Nehmen wir z.B. eine Persistenz von 0.5, dann addieren wir

gesamt = (Berge*1.0 + Felsen*0.5 + Steine*0.25 + Sandkörner*0.125) / (1.0+0.5+0.25+0.125)

Und voila, das Ergebnis sieht dann etwa so aus:
Bild: http://www.hd-rec.de/pics/Noise_x.jpg

Wäre schon als Textur für ein Frotty-Tuch zu gebrauchen.

Wenn du das implementiert hast, können wir weitere Experimente machen, wie man das dehnt oder anders einfärbt. Aber das muss erstmal klappen.

--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de



[ Dieser Beitrag wurde von Der_Wanderer am 29.02.2008 um 13:50 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

29.02.2008, 22:44 Uhr

Reth
Posts: 1858
Nutzer
Zitat:
Original von Der_Wanderer:
Also ich erkläre es nochmal, aber wenn es dann nicht hinhaut kann ich entweder nicht erklären oder du nicht verstehen, auf jedenfall klappt es dann einfach nicht.


In dem Fall scheint mir eher, dass Du mich nicht verstanden hast!
Deine guten Erklärungen mit den einzelnen Bildern und übereinander legen etc. hab ich doch schon verstanden gehabt (und dies auch gesagt).

Mir ging es vielmehr um das Verständnis der Vorgänge auf der Freespace-Seite (ich weiß, ich weiß) bzw. der Parallelen zu Deinem Vorgehen (Du sagtest ja, das das Vorgehen dort identisch zur Übereinanderlegung ist, wollte nur wissen, woran man das erkennt, da ja gleich für ein Pixel alle Noise-Funktionen abgelaufen werden und daher nur ein Bild bearbeitet wird, nicht mehrere!).

Zitat:
Damit bist du dann in der Lage, so ein Bild zu erzeugen:

Bild: http://www.hd-rec.de/pics/Noise.jpg


Hab ja schon ein paar Mal bestätigt, dass dieser Schritt gut funktioniert.

Zitat:
Diesen Vorgang müssen wir nun für jede Scicht (Oktave) machen, und von jeder Oktave zur nächsten verdoppeln wie den Detailgrad, also verdoppelt das Rauschen-Bild damit wir weniger vergrößern müssen.

Je nachdem, wie gross unsere gröbste Struktur sein soll, fangen wir bei 8x8, 16x16, 32x32 oder größer an, und wir hören bei unserer Ziel-Bild Dimension auf, in dem Fall 256x256:


Dazu eine Frage: Ist Verdoppelung Pflicht, oder kann man auch andere Schrittweiten nehmen?
Oder kommt die Verdopplung von der PN (Frequenz verdoppeln, Amplitude halbieren)?

Zitat:
4. Jetzt legen (addieren) wir die Schichten aufeinander.
Im einfachsten Fall addieren wir pixelweise und teilen das Ergebnis durch 4, damit wir wieder zwischen 0..255 liegen.
Hier kommt jedoch die Persistenz ins Spiel. Die gibt den Grad an, in welchem sich die Details vom Einfluss her verringern. Schliesslich ist ein Sandkorn ja nicht so hoch wie ein Berg, was wir oben angenommen haben wenn wir alle gleich gewichten.
Nehmen wir z.B. eine Persistenz von 0.5, dann addieren wir

gesamt = (Berge*1.0 + Felsen*0.5 + Steine*0.25 + Sandkörner*0.125) / (1.0+0.5+0.25+0.125)


Ok, das ist mir nun noch nicht bekannt gewesen (bzw. hab ichs nicht so verstanden), dass die Persistenz so mit reinläuft.

Zitat:
Wenn du das implementiert hast, können wir weitere Experimente machen, wie man das dehnt oder anders einfärbt. Aber das muss erstmal klappen.

Gut. Melde mich dann wieder!
Nochmals Danke!

Ciao

[ - Antworten - Zitieren - Direktlink - ]

21.03.2008, 21:33 Uhr

Reth
Posts: 1858
Nutzer
Hallo mal wieder,

also ich hab das Ganze nun nachprogrammiert und das Ergebnis geht auch schon in die richtige Richtung.

Ich lege meherere Bilder mit verschiedener Auflösung (Einzelbilder entsprechend interpoliert) gewichtet aufeinander.

Leider sieht das Ergebnis sehr grobpixelig aus, obwohl ich alle Funktionen wie hier im Thread und in den Tutorials angewandt habe (hab schon mehrfach drübergeschaut, aber keinen Fehler mehr gefunden)!

Was stimmt da noch nicht? Gibt es da noch was, was hier im Thread und in den Bsps. noch nicht angesprochen wurde?

Habe sogar mal die Glättung aktiviert gelassen, hat aber auch nichts gebracht!

Hat dazu jmd. ne Idee? Was fehlt mir hier noch?

Danke schon mal!

Ciao

[ - Antworten - Zitieren - Direktlink - ]

22.03.2008, 19:45 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Nein, hier in dem Thread wurde nun wirklich alles angesprochen.

Schau dir doch mal deine unterste Schicht an.

Sieht die in etwa so aus ?

Bild: http://www.hd-rec.de/pics/Noise3.jpg

Oder etwa so:

Bild: http://www.hd-rec.de/pics/_Noise2.png

Im letzeren Fall hast du eben NICHT interpoliert, sondern nur Pixel wiederholt ("Nächster Nachbar Interpolation").
Aber ohne Screenshot kann man nichts genaueres über dein Problem sagen...
--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

22.03.2008, 22:26 Uhr

Reth
Posts: 1858
Nutzer
@Der_Wanderer:

Werde versuchen in den nächsten Tagen ein paar Shots online zu stellen.

Bezog mich hier auf eine Aussage, dass man zwischen den einzelnen Schichten interpolieren soll, wenn man diese zu einem Gesamtbild zusammenstellt. Und da weiss ich nicht wie das gehen sollte.

Werde mir aber zunächst mal die einzelnen Schichten ansehen.

Ciao

[ - Antworten - Zitieren - Direktlink - ]

22.03.2008, 22:59 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Zwischen den Schichten wird nicht interpoliert, wie denn !?
Die Schichten werden gewichtet aufaddiert. Und wie ich dir schon geschrieben habe machst du das korrekt. Das einzige, was bei dem letzten Screenshot, den ich von dir gesehen habe, nicht gestimmt hat, war die fehlende Interpolation beim Vergrößern der unteren Schichten.

--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

23.03.2008, 00:06 Uhr

Reth
Posts: 1858
Nutzer
Zitat:
Original von Der_Wanderer:
Zwischen den Schichten wird nicht interpoliert, wie denn !?
Die Schichten werden gewichtet aufaddiert. Und wie ich dir schon geschrieben habe machst du das korrekt. Das einzige, was bei dem letzten Screenshot, den ich von dir gesehen habe, nicht gestimmt hat, war die fehlende Interpolation beim Vergrößern der unteren Schichten.


Dann habe ich Deine Antwort wohl falsch verstanden, denn da stand irgend etwas von Interpolation zwischen den einzelnen Schichten.

Daher auch meine Frage hier und per Mail.

Wie gesagt, werde mir die nächsten Tage mal die einzelnen Schichten ausgeben lassen (habe ich bisher noch nicht).

Ciao

[ - Antworten - Zitieren - Direktlink - ]

25.03.2008, 09:57 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Also wenn der Screenshot noch aktuell ist, den du mir geschickt hast, dann fehlt die Interpolation beim Gross-Zoomen der unteren Ebenen. Im Moment verwendest du Nearest Neigtbour "Interpolation", die eigentlich keine richtige Interpolation ist, sondern nur Pixelverdopplung. Deshalb sieht es pixelig aus, und nicht weich.
Wie zoomst du denn die Ebenen gross? Wenn es eine eigene Routine ist, dann musst du dort Interpolation einbauen, am besten du implementierst (bi)lineare Interpolation und machst dann daraus die Cosinus Interpolation.
Ansonsten musst du gucken, ob die Routine einen Parameter für die Interpolation hat, wenn nicht musst du eine eigene Routine schreiben.

Die Mischung der einzelnen Ebenen machst du korrekt.

--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]


1 -2- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Prozedurales Texturieren [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.