Danke Doc
Nun
Mipmapping ist ja was anderes.
Details zum
Mipmapping werden bei Wikipedia gut beschrieben. Die BGE unterstützt ja leider nur das automatische Mipmapping. Dabei wird eben immer das gleiche Verfahren angewendet.
Das automatische Mipmapping (eingebaut in OpenGL) halt so eine Art "Weichzeichnen" um
- Moiré-Muster zu vermeiden
- abrupte Übergänge beim Wechsel auf höher/niedriger detailierte Texturen zu vermeiden.
Nun muß man wissen wie in etwa dieser "Weichzeichen-Filter" funktioniert. Die Farbe eines Model-Pixels (X,Y,Z) wird berechnet aus der Farbe des Textur-Pixels (U,V) an genau dieser Stelle kombiniert (Filter) mit den benachbarten Textur-Pixeln. Je mehr Nachbarn hinzugezogen werden, desto weicher erscheint die Textur auf dem Model. Wie und wieviele Textur-pixel verwendet werden hängt vom Filter ab. Bei der BGE-haben wir leider nur einen Algorithmus auf alles oder keine Filterung auch auf alles.
Das an sich ist noch kein Problem, aber wir wissen jetzt dass aus einer Textur auch die umliegenden Textur-Pixel verwendet werden. Betrachten wir uns mal den Rand eines UV-Netzes näher:
Nimmt man ein Text-Pixel vom Rand, dann sieht man, dass nicht alle Nachbarn zum UV-Netz gehören. Läßt man diese Bereiche Blau dann mischt sich genau dieses Blau in die Farbe der Textur-Pixel am Rand = Unerwünschte Ränder.
Wie kann man das vermeiden?A)
Man erzeugt sogenannte UV-Inseln. Die verschiedenen UV-Netze schließen nicht direkt aneinander an, sondern halten Abstand zueinander. Die Texturen werden über das UV-Netz hinaus belegt. Dabei reicht es in der Regel, die Textur am Außenrand eines UV_Netzes zu duplizieren.
Diese Methode ist recht sicher, aber sie "verschwendet" scheinbar auch Platz, da ja nicht alle Textur-pixel innerhalb der UV-Netze liegen
B) Platziere Texturen für verscheidene UV-Netze so nebeneinander, dass sehr geringe Kontrast und Farbunterschiede an den Kontaktlinien entstehen.
Z.B. Bei Skymaps, ZiegelWänden etc.
Diese Methode erfordert etwas mehr Geschick beim UV-Mapping ist auch sicher solange die Unterschiede klein bleiben und die Textur nicht mehr geändert werden soll. Außerdem kann man damit 100% der Textur verwenden.
Sonderfall: TexturrandDer Texturrand ist ein Sonderfall. Auch hier wurden schon Probleme berichtet.
Wenn ein UV-Map direkt an den Rand einer Textur stößt gehören auch Textur-Pixel auf der gegenüberliegenden Seite zu den benachbarten Textur-Pixeln (sogenanntes Wrapping).
Das fällt nicht gleich auf, da diese Pixel für uns eben nicht nebeneinander liegen.
[Edit: falsche Pfeile korrigiert]
Lösungen wie oben.
Klassische Antwort: Rücke mit Deinem UV-Netz von den Rändern ab.
Evtl. kann man Textur-Wrapping über Textureinstellungen abstellen, aber das habe ich nicht untersucht. Das ist übrigens ziemlich nützlich bei "endlosen" Texturen.
[edit:] Laut Wikipedia werden Textur-Pixel auch Texel genannt. Aber ich lass das mal so.