Archiv verlassen und diese Seite im Standarddesign anzeigen : Prozedurale Texturen
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...
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.
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...)
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...)
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.
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 ;)
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
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 :))
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 ...
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 ...
vBulletin®, Copyright ©2000-2024, Jelsoft Enterprises Ltd.