Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mo Jul 13, 2020 14:35

Foren-Übersicht » Sonstiges » Community-Projekte
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 50 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 14, 2005 20:33 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1938
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Thx. Geht jetzt wunderbar. :D

Zitat:
Wenn das ganze dafür ausgelegt ist geschlossene Flächen zurückzugeben, könnte es allgemein recht sinnvoll sein die funktionen direkt für ne ganze Matrix anzuwenden, was die anzahl der funktionsaufrufe weiter reduzieren würde.

Wie? Ganze Matrix? Ist eine Matrix nicht für Positionsberechnungen da? :?

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 14, 2005 20:39 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
Matrix an Werten, also anstatt jeden Wert isoliert zu berechnen immer alle auf einmal, wodurch man die Anzahl der Funktionsaufrufe und Berechnungen reduzieren würde (besonders bei der Interpolation).

Also jede octave komplett erstellen, Hochinterpolieren usw.
und dann das ganze zusammenrechnen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 14, 2005 21:10 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1938
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Achso...

Hmm... Da ist was dran. Das müsste dadurch wirklich schneller gehen... Aber dadurch wird der Bequemlichkeitsfaktor wieder verkleinert ;)

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 14, 2005 21:39 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
Zitat:
Hmm... Da ist was dran. Das müsste dadurch wirklich schneller gehen... Aber dadurch wird der Bequemlichkeitsfaktor wieder verkleinert Wink

wie mans nimmt. wenn ich an dem Tool rumbastel, was ich mir da grad schreibe, finde ich die zusätzliche Geschwindigkeit durchaus recht angenehm und den Zusatzaufwand gerechtfertigt, wodurch man dann auch smooth, bi-cubic resize usw. einbaun kann, ohne dass es deutlich zu langsam wird. Bei der Variante reduziert ein cosinus resize statt eines quadratischen die Geschwindigkeit locker auf die Hälfte (wobei ich zugeben muss, dass das algemein schneller is als ich erwartet hätte), während ich beider Variante mit der Matrix nen Geschwindigkeitsunterschied von vll. 15% hab .
Hängt halt vom Aufwand den man betreiben will und davon, ob man vor allem die einzelwerte oder den kompletten Datensatz brauch[/quote]


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 14, 2005 21:43 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1938
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Hi,

Hab wieder eine Frage zu Perlin Noise. Falls man mithilfe von Perlin Noise dynamisch Texturen generieren will, stellt sich wahrscheinlich das Problem der Kachelung der Textur.
z.B. hat der Woken-Filter von Photoshop die nette Eigenheit, dass seine "Wolken" absolut artefaktlos kachelbar sind.

Auserdem bildet sich bei Perlin Noise anscheinend recht oft ein fraktaler Charakter heraus, sodass die Texturen oft fraktal aussehen, was auch nicht unbedingt zum Kacheln beiträgt ;)

Wenn man oben links im Bild anfängt zu suchen und dann so nach rechts unten schaut, dem wird eine gewisse Rekursion ins Auge stechen. Mal abgesehen davon, dass man sowas nicht mehr vernünftig kacheln kann. :(


Dateianhänge:
Dateikommentar: Hier der Wolken-Filter aus Photoshop
Perlin-Noise2.gif
Perlin-Noise2.gif [ 131.09 KiB | 7787-mal betrachtet ]
Dateikommentar: Hier das "reine" Perlin-Noise
Perlin-Noise.gif
Perlin-Noise.gif [ 205.6 KiB | 7789-mal betrachtet ]

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."
Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 14, 2005 22:02 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
Wenn man fraktale Strukturen erhält, war der noise wohl nicht zufällig genug^^
jedenfalls is mir bei meinen nie sowas aufgefallen , könnte allerdings primär daran liegen, dass ich dadurch dass ich das immer ganz durchlaufe recht unproblematisch in jedem Durchlauf die randseed ändern kann (vll. bin ich auch einfach zu blind^^) und erst beim nächsten Aufruf der generatePerlin funktion neu setze, wodurch das relativ effektiv vermieden wird.

Das mit dem artefaktlos Kachelbar is ansonsten auch nicht so furchtbar schwer zu basteln, da reichts, wenn man über die Ränder hinausinterpoliert (also wieder an den anderen Rand).
Ok, wobei wenn ichs mir recht bedenke, solange man nicht den kompletten Datansatz hat vll. doch eher schwer

hat insofern noch andere Vorteile alles auf einmal zu behandeln, aber andererseits natürlich auch den nachteil, wenn man einzelne werte brauch


Zuletzt geändert von Grizzly am Mo Mär 14, 2005 23:54, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 14, 2005 23:54 
Offline
DGL Member

Registriert: So Sep 26, 2004 05:57
Beiträge: 190
Wohnort: Linz
@Grizzly:
Ja das mit den vorberechneten Zufallswerten die dann nur noch interpoliert werden is durchaus ein recht guter Ansatz, hab ich bisher irgendwie ignoriert die Möglichkeit.

[edit]
Ups hab deinen letzten Satz ganz überlesen, hast es eh schon erwähnt ... naja hier noch etwas detaillierter :-)
[/edit]

Aber für die Kachelbaren Texturen ist dieser Ansatz sehr hilfreich. Einzige Voraussetzung ist, dass der Frequenzfaktor (vom Wiki-Artikel) immer ein Vielfaches von 2 ist.

Erstell dir mal für die erste Frequenz nen Array von Zufallszahlen
1 2
3 4
den du nun einfach in einen 3x3 Array umwandelst indem du die Punkte an den Kanten von den gegenüberliegenden Kanten verwendest:
1 2 1
3 4 3
1 2 1

Für die nächste Stufe hast du dann halt ein 4x4 Array von Zufallszahlen was dann mit kopierten Rändern so ausschaut:
Code:
  1.  1  2  3  4  1
  2.  5  6  7  8  5
  3.  9 10 11 12  9
  4. 13 14 15 16 13
  5.  1  2  3  4  1
  6.  


Und so weiter für beliebig viele Frequenzbänder ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 15, 2005 00:03 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
...was genau die Methode darstellt, die ich im Kopf hatte (könnte daran liegen, dass ichs auf diese weise implementiert hab, wobei man auf diese weise sich bei der Implementation mit geringstem Aufwand recht leicht ne leichte verschiebung reinhaut. für komplett zufälliges is das nicht weiter tragisch, wenn man dann aber anfängt auf bestehende Daten was zu legen (praktisch bei hightmaps), kann das recht eklig sein)

was mir allerdings bei deinen Ausführungen jetzt nicht ganz klar ist, is, warum der frequenzfaktor dann immer 2 sein müssen soll. Solange ich das ganze auf die gleiche Größe bringe dürfte das relativ egal sein.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 15, 2005 03:29 
Offline
DGL Member

Registriert: So Sep 26, 2004 05:57
Beiträge: 190
Wohnort: Linz
Zitat:
was mir allerdings bei deinen Ausführungen jetzt nicht ganz klar ist, is, warum der frequenzfaktor dann immer 2 sein müssen soll. Solange ich das ganze auf die gleiche Größe bringe dürfte das relativ egal sein.


Naja damit du links und rechts an die gleichen Endpunkte kommst muss die Anzahl der Werte über eine Breite ein Teiler der Breite sein (+ der wiederholte Randwert). Also bei ner Texturgröße von 24 kannst du natürlich 2, 3, 4, 6, 8, ... Werte nehmen, wofür sich zum einen aber schlecht ein Frquenzfaktor bestimmen lässt (was man evntl. noch "manuell" machen könnte) aber was noch wichtiger ist: üblicherweise hast du nun mal kaum Texturgrößen die beispielsweise durch 3 Teilbar sind, sind halt meistens 2er-Potenzen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 15, 2005 07:32 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
dass nicht 2er-Potenzenhäufig nicht wirklich sinnvoll sind, ist klar, war nur die theoretische Frage.
Für andere Frequenzfaktoren hatte ich jetzt auch eher so gedacht, dass die EndGröße des noises allgemein ne Potenz von dem Frequenzfaktor ist (zB erstellt meiner immer Noises mit einer größe von 2^Nummer der maximal Oktave, daher sind mir andere einteilungen garnicht erst in den Sinn gekommen). Da ist das bestimmen des Faktors nicht so übermäßig komplex ;)

@Frase:
versuch mal ne temporär Variable für den Randseed zu benutzen, die am anfang von getvalues auf dein m_seed gesetzt wird und dann über die Oktaven verändert wird. Sollte die fraktalEigenschaften zumindest deutlich reduzieren, weil die niedrigen Oktaven dann trotz gleicher inputwerte, die an einer stelle auch in die hohen kamen, trotzdem andere werte bekommen. vll. sollte der Faktor von 57 im Rand auch noch etwas erhöht werden, wodurch sich der hochfrequente noise nicht so häufig wiederholen würde (so entspricht ja der 58. Pixel einer Oktave immer dem 1. in der Zeile drüber)
nur das mit dem kachelbar wird wahrscheinlich kaum gehn solange die Funktionen nicht wenigstens in irgendeiner weise die größe kennen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 15, 2005 15:39 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1938
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Erstmal Thx für die ganzen Ideen ;)

Hab auch gerade die Frequenz und den Frequenzfaktor in die Berechnung eingebaut. Wieder 2 Parameter mehr zum Verändern ;)

Der Tipp mit dem Verändern der Seed in jeder Oktave funktioniert prima.

Und die Idee mit dem Kacheln und kopieren der Ränder ist auch nicht übel...

@ Lyr:
Mich verwirrt nur die Namensgebung etwas :? . Bei mir ist die Grundfrequenz am Anfang 0.01 und der Frequenzfaktor ist 2.
Und du meinst ja, man soll für die erste Frequenz (die Grundfrequenz?) ein Array nehmen...
Und der Frequenzfaktor soll ein Vielfaches von 2 sein.

Das Array in dem "Code"-Feld, sind das jetzt die Werte für die Frequenz oder für den Frequenzfaktor?
Ich würde jetzt spontan eher auf letzteres tippen ;)

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 15, 2005 16:46 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
wenn ich mal antworten darf ;)
weder noch, ich würde es ja eher als oktave bezeichnen.
Das ganze war lediglich eine ausführlichere und anschaulichere Erklärung der Sache mit dem kopieren der Ränder.

ansonsten: tut man doch gern ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 06, 2005 19:49 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7760
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Könnte nochmal jemand mit Perlin-Noise-Erfahrung den Artikel durchlesen. Da sind neben diversen Rechtschreibfehlern eventuell auch fehler im Code. Bin mir da aber nicht sicher, weil ich da noch zu Grün hinter den Ohren bin. Meine diese Zeile:

Wert = Wert + InterpolierterWert( Position * Frequenz )

Unter dem Bild (das aus den 4 Teilbildern in Grün) stehen Frequenzwerte im Bereich 0.0x. Das würde bedeuten, dass die Positionsangaben in jedem Fall nahe 0 liegen würden.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 07, 2005 15:40 
Offline
DGL Member

Registriert: So Sep 26, 2004 05:57
Beiträge: 190
Wohnort: Linz
Also die eine Zeile sollte schon passen, denn
InterpolierterWert(x) = Interpoliere( Random( Ganzzahlteil(x) ), Random( Ganzzahlteil(x)+1 )
Was durch diesen Codeteil dargestellt wird:
Code:
  1. PosX = Ganzzahl( Position.x )
  2. PosY = Ganzzahl( Position.y )
  3. X1 = Interpoliere( Random( PosX, PosY ), Random( PosX, PosY + 1 ), Nachkommateil( Position.y ) )
  4. X2 = Interpoliere( Random( PosX + 1, PosY), Random( PosX + 1, PosY + 1, Nachkommateil( Position.y ) )
  5. Ergebnis = Interpoliere( X1, X2, Nachkommateil( Position.x ) )

Evntl. sollte man über diesen Code noch ein "Funktion InterpolierterWert( PosX, PosY )" schreiben. bzw. auch den Fall für 1D-Interpolation hinzufügen, denn dieser ist ja für 2D.
Das Random liefert nun Werte im Bereich [-1|1]. Und später wird das InterpolierterWert(x) ja auch noch mit nem Faktor multipliziert, und am Ende wird zum Wert noch einen Offset addiert. Dadurch wird der Wertebereich des Gesamtergebnisses dann auf [Min|Max] gebracht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 07, 2005 17:21 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1938
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Bin ich froh, dass jemand diesen Thread wieder belebt hat ;) Dann muss ich das nicht mehr tun.

Hätte da nämlich ein kleines Problemchen mit dem Perlin Noise... In Vorfreude auf die ganzen schmackhaften Sachen, die man mit Perlin alles anstellen kann, hab' ich das Ganze mal etwas aufpoliert und dabei wohl irgendwo nen kleinen Denkfehler eingebaut. Das hat damit angefangen, dass ich die Ränder des Perlins dahingehend verändern wollte, dass sie mit dem jeweils gegenüberliegenden Rand interpolieren, um kantenlose Texturen zu backen.
Im gleichen Zug wollte ich mehrere Fliegen mit einer Klappe schlagen und dachte mir, wozu denn z.B. in der untersten Ebene alle Punkte berechnen? Da gibt es eh nur vier unterschiedliche Werte. In der nächsten Ebene gibt es ja Acht und so weiter. Irgendwie ist da aber jetzt total der Wurm drinn und ich weiß nicht mehr weiter...


Dateianhänge:
Perlin Noise.zip [5.73 KiB]
278-mal heruntergeladen

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."
Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 50 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4  Nächste
Foren-Übersicht » Sonstiges » Community-Projekte


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.051s | 17 Queries | GZIP : On ]