PDA

View Full Version : Multitexturing


Wolfibolfi
15-05-2004, 12:12
Hallöchen, unser Spiel ist Witchcraft.

Auf anraten der CG-Tutoren (in der Bewertung der zweiten Abgabe) hab ich jetzt mal versucht, die Texturübergänge mit Multitexturing zu machen. Bis jetzt hatten wir selbstgezeichnete Übergangstexturen. Die Übergänge waren dadurch natürlich nicht so schön, da halt ein paar mal die Gras-Textur kommt, dann ein paar mal die Gras/Fels-Mischtextur, und dann gehts mit der Fels-Textur weiter.

Ich hab jetzt mal die Datenstruktur umgebaut, jetzt werden zwei Texturen gespeichert, und das Mischverhältnis. Das ganze wäre ja schon perfekt, wenn mans nicht irgendwie rendern müsste.
Momentan siehts so aus:
http://stud3.tuwien.ac.at/~e0026034/pics/tex_blend.jpg

Allerdings wird hier einfach zwei mal gerendert, wobei die zweite Textur mit dem Mischverhältnis als Alpha-Wert gerendert wird. Sieht gut aus, ist aber nur mehr halb so schnell (hab ich eh erwartet).

Die Funktion zum rendern mit Multitexturing ist noch eine Baustelle. Irgendwie find ich keine Möglichkeit den Alpha-Wert der zweiten Textur per-Vertex oder zumindest per-triangle einzustellen. (Geht letzteres überhaupt bei Strips?)

Ich find zwar viele viele bunte Möglichkeiten, die Texturen zu kombinieren, aber nichts, was es mir erlaubt, den Alpha-Wert selbst anzugeben. Da es für jeden Vertex eines Triangles 16 Mischstufen gibt, gäbs ja unglaublich viele Alpha-Channels, das ist nicht wirklich verwendbar. Außerdem is es unnötig, da wir eh nur Farbverläufe brauchen.

Ich hab zwar noch immer 60 fps, aber die Hälfte an Geschwindigkeit für die paar Texturen einzubüßen ist ja nicht gerechtfertigt.

Chuck
15-05-2004, 14:26
http://www.opengl.org/discussion_boards/cgi_directory/ultimatebb.cgi?ubb=get_topic;f=3;t=011903

schau mal den beitrag bzw diesen link
http://www.delphi3d.net/articles/viewarticle.php?article=terraintex.htm
an
denke dort könntest du fündig werden :)

gibt paar methoden wie man schöne texturübergänge hinbekommt... das zweite link zeigt einem wie mans mit GL_ARB_texture_env_combine angeht. andere möglichkeit ist ne 3d textur zu verwenden, wies in dem ersten link vorgeschlagen wird, wobei die z-koordinate dem bodentyp entspricht (die methode hat allerdings paar unschöne probleme).
btw ich hab bei unserem terrain gerade auf arb_fragment_program umgestellt um die übergänge schöner zu machen (sind jetzt 5 texturen... eine light map, eine map die angibt wasfür material, eine für gras, erde und steint :) )

tivolo
15-05-2004, 14:29
wenn du richtig schönes terrain willst:

nimm 3 texturen als deine "farblichen" texturen (z.b. gras, fels, sand, etc.) und nimm eine vierte, in der du den jeweiligen anteil einer textur speicherst (d.h. im R-kanal den anteil von gras, im G-kanal den anteil von fels, im B-kanal den anteil vom sand). dann kannst mit einem einfachen pixel-shader die texturen wunderschön miteinander überblenden.
um deine textur für die jeweiligen anteile zu erstellen kannst du z.b. für testzwecke im photoshop/coreldraw ein plasma für R-,G- und B-kanal erstellen und des ganze in einer 2048x2048 textur speichern, welche du einfach über das ganze terrain legst - das sollte eigentlich reichen. solltest halt aufpassen, dass sich R+G+B jeweils auf 1 ausgeht.
wenn du dir irgendwelche shader nicht antun willst, dann kannst glaub ich auch einfach ein DOT3-product verwenden (wenn ich mich jetzt nicht arg täusch müsst des auch funktionieren).

glaub's mir, schaut echt gut aus :)

mfg,
tivolo

tivolo
15-05-2004, 14:31
ok, chuck war schneller :)

Wolfibolfi
15-05-2004, 15:59
Hm, muchos Gracias, werd mir die Combine-Extension mal genauer anschaun, vom Pixel Shader möcht ich noch die Finger lassen, hab damit noch keine Erfahrung, und eventuell mach ich damit das Spiel noch langsamer. ;)