PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Prozedurale Texturen


aths
2002-02-17, 06:12:02
Guckt euch doch mal dieses Bild an:

http://www.ati.com/images/2112-4810.jpg

ATI behauptet, diese texture wurde mit dem PixelShader 1.4 erstellt. Hat jemand eine Idee, wie man solche (oder ähnliche) prozedurale Texturen programmtechnisch angehen könnte? (Das kann auch gerne in PS 1.0, 1.1 oder 1.3 sein - mir geht es um den prinzipiellen Ansatz.)

Ceiser Söze
2002-02-17, 12:46:00
Wie das genau geht (programmiertechnisch), kann ich auch nicht sagen. Da steckt halt irgendein Algorithmus dahinter, welcher "on the fly" solche Effekte generiert.

Hier wird z.B. aus zwei relativ simplen Texturen durch ein Turbulenzeffekt eine Marmortextur erstellt:
http://graphics.lcs.mit.edu/~legakis/MarbleApplet/marbleapplet.html

Infinity Textures ist auch ganz nett. Damit kann auch der nicht-Coder aus per Algorithmus generierten Texturen ähnliche Effekte erreichen
http://www.i-tex.de

Die Unreal-Engine nutzt afaik prozedurale Texturen für die Wasser- und Feuereffekte. Als Engine aus der Prä-Pixelshading Ära werden diese noch von der CPU generiert. Über den Pixel Shader sollten solche Effekte natürlich mit weniger Rechenaufwand erreichbar sein. Mussten solche Texturen bisher von der CPU erstellt werden, im Grafikspeicher ablegt und von dem Chip ausgelesen werden, genügt es dem Pixel Shader, wenn man ihm einfach den nötigen Algorithmus schickt. Der Rest macht er dann selbst...

Xmas
2002-02-17, 13:49:05
Das Wichtigste: Perlin Noise
http://www.mrl.nyu.edu/~perlin/doc/oscar.html#noise
Inwiefern man diesen Algorithmus aber durch Textur-Lookups realisieren kann, weiß ich nicht.

aths
2002-02-17, 20:24:29
Hm,

vielleicht ein Ansatz: Man geht von einer streifigen Textur aus (siehe den ersten Link von Ceiser.) Eine 2. Plasmatextur gibt das "X-Y-Displacement" an. Man nimmt also nicht die aktuellen X-Y-Koordinaten, um die Streifen-Textur auszulesen, sondern ändert diesen Wert bei X um die R-Komponente und bei Y um die G-Komponente (oder so.)

(Seuzf, das müsste ich mal programmieren...)

aths
2002-02-17, 20:42:51
Also einen allerallerersten Ansatz kann man hier sehen:

www.aths.net/files/pt1.exe

(400 Kb - das ist nur mal zum Gucken, ich bau das ganze jetzt mal ein wenig aus...)

KiBa
2002-02-17, 22:37:24
Ich denke, dass es so funktioniert wie in deinem Programm Aths.
Procedural Textures werden durch Funktionen berechnet, die halt wegen des Pixelshaders als LookUp-Table (statische Textur) realisiert sind.
Schwierig wirds nur bei Animationen, da müsste man die Texturen jedes Frame neu berechnen, den allzu komplizierte Berechnungen lassen sich bekannterweise ja nicht mit dem Pixelshader realisieren.

aths
2002-02-18, 00:09:54
www.aths.net/files/!ptex.exe

Dieses Proggi erlaubt, selbst damit rumzuspielen.

Die Funktionsweise ist sehr vielseitig einsetzbar, so könnte man z.B. auch Linsen-Effekte u.ä. realisieren.

edit: Neue Version (und neue Datei - Name hab ich geändert). Jetzt auch mit Animationen (und extra Low-Res-Mode, damit die Animationen flüssig genug sind.)

Ridcully
2002-02-19, 19:04:51
@aths:
Wie lange hast du denn gebraucht um das Programm zu schreiben? Und welche Programmiersprache hast du dafür genutzt? Mit meinen Kenntnissen von Java Script ist so was für mich wie du dir vieeleicht denken kannst in weiter Ferne. Aber das muss ja nicht immer so bleiben. Darf es einfach nicht!

MFG Ridcully

Ceiser Söze
2002-02-19, 20:21:05
Vom Programm-Icon zu schliessen wurde es mit Delphi geschrieben ;)

aths
2002-02-20, 00:31:20
Ridcully,

Das obige Programm (welches nur 1 Button hat) habe ich innert 3 Minuten in Delphi geschrieben, das Programm mit dem Link weiter unten ist das Ergebnis von 4-5 Stunden Arbeit.

Labberlippe
2002-02-20, 01:25:34
Schön zu sehen Deine Effekte.
Jetzt schnalle ich sogar in etwa wie das funzt.

PS: @aths
Der Hobel vom Schwager hängt.
Wenn der hobel nicht will, dann gehe ich halt auch. *sfg*
Kurz ich haue mich in die Heiha.

Gruss Labberlippe

aths
2002-02-20, 03:37:03
So ganz so tolle Effekte wie auf dem Bild oben kriegt man mit dem Programm (noch) nicht hin. Vielleicht lass ich mir noch was einfallen (vielleicht lass ich es aber auch :))

aths
2002-03-03, 18:07:16
Hm, diesen speziellen Marble-Effekt kriege ich noch nicht hin, weil man da bestimmte Funktionen zusammen mit dem Noise einsetzen muss, doch immerhin kann mein Programm jetzt so etwas wie perlin noise erzeugen.

http://www.aths.net/files/pt1.jpg

http://www.aths.net/files/pt2.jpg

zeckensack
2002-03-11, 08:21:51
Hmmm, euch ist aber schon klar, daß der Begriff 'prozedurale Textur' dafür'n wenig falsch ist, oder?

Pixelshader können zwar Texturen prozedural verknüpfen, aber was da rauskommt ist ja keine neue Textur in dem Sinne, daß sie irgenwo abgelegt wird und später irgenwo draufgepappt werden kann. Die Berechnung erfolgt doch neu für jeden einzelnen Bildpunkt, das Ergebnis wird in den Framebuffer geschrieben und dann wieder vergessen. Wenn man das dann wiederhaben will, muß manns neu machen ...

Xmas
2002-03-11, 10:33:38
Was hindert dich denn daran, in eine Textur zu rendern?

Unregistered
2002-03-11, 11:02:42
:o

!!! Aha !!! Hatt' ich ja ganz vergessen :D

zeckensack
2002-03-11, 11:06:18
Originally posted by Unregistered
:o

!!! Aha !!! Hatt' ich ja ganz vergessen :D Arrr, das war ich, wieder was vergessen: einloggen ...