Samstag, 23. Februar 2013

[Mesh] - Zwei Texturen auf den gleichen Polygonen

Bei Nalates Urriah habe ich heute einen interessanten Artikel gelesen, in dem es um das Texturieren von Mesh-Oberflächen geht. Das Thema ist zwar schon vor neun Monaten von Kitsune Shan in ihrem Blog gepostet worden, aber ein aktueller Thread im LL-Forum hat das Ganze jetzt wieder aufgerollt.

Es geht darum, ein und derselben Mesh-Oberfläche in SL zwei Texturen gleichzeitig zuzuweisen. Das geht im Normalfall nicht. Man kann zwar einem Mesh-Objekt insgesamt acht Texturen zuweisen, aber jeweils auf unterschiedlichen Flächen. Kitsune nutzt hier einen Fehler im Upload-Prozess des Viewers aus, indem sie die Collada-Datei eines exportierten Mesh-Objekts per Hand verändert. In ihrem Demo-Video schreibt sie gleich zu Beginn, dass LL einige Fehler im Mesh-Uploader nicht beheben will und sie deshalb nun einige davon zu ihrem Vorteil einsetzt.

Hier erstmal das Video:



Kitsune stellt nun das Objekt und die Texturen aus dem Video als Downlaod zur Verfügung, damit das jeder selbst ausprobieren kann. Das ZIP-Archiv mit den Dateien gibt es hier:

>> Download "wall test 01.rar"

Ich habe das vorhin auch mal getestet. Das Mesh selbst kommt beim Upload ohne Texturen in SL an. Die Backsteintextur, eine Shadow Map und eine Ambient Occlusion Map müssen dann noch separat hochgeladen werden. Dann bearbeitet man das gerezzte Mesh und fügt erstmal die Backsteintextur im Textur-Editor dazu. Damit es so aussieht wie im Video, habe ich sie um 90° vertikal gedreht und dann je 6 Wiederholungen in X- und Y-Richtung eingestellt. Danach habe ich eine der beiden Schatten-Texturen auf das Mesh gezogen. Diese wurde dann zunächst auch 6x nebeneinander wiederholt. Und jetzt kommt das Erstaunliche: Im Bearbeitungsfenster geht man nun auf "Fläche auswählen" ("Select Face") und klickt irgendwo auf das Mesh. Dann wir eine der beiden Texturen im Textur-Tab des Bearbeitungsfensters ausgewählt. Bei mir war das immer die Backsteintextur. Klickt man nun weitere Stellen auf dem Mesh an, wird irgendwann die Schattentextur ausgewählt. Diese muss man dann auf nur eine Wiederholung einstellen, da sie für das gesamte Mesh-Objekt als Volltextur gebacken wurde.

Die Ausnutzung dieses Fehlers ermöglicht also zwei unabhängig voneinander einstellbare Texturen auf der gleichen Objektfläche. Damit kann man dann die Materialtextur (Backstein) beliebig ändern, ohne dass die Schattentextur davon beeinflusst wird. Im Normalfall wird schon im 3D Programm (z.B. Blender) das Material und der Schatten in eine einzige Textur gebacken und diese in SL dann auf das Mesh gelegt. Der Nachteil dabei ist aber, dass die Backsteine dann eben verschwommener aussehen, da man keine Textur-Wiederholungen verwenden kann. Im Video ist das im linken der beiden Beispiel-Meshes zu sehen.

Hier sind vier Bilder von meinem Test. Links oben ist das Mesh ohne eine zweite Textur. Rechts oben dann mit Shadow-Map, links unten mit Ambient Occlusion Map und rechts unten mit Ambient Occlusion plus aktiviertem Schatten im Viewer. Anklicken der Bilder öffnet sie in groß.




Wie das nun genau gemacht wurde, wird nur ansatzweise erklärt. Nach dem Export des Meshes aus dem 3D Programm öffnet man die Collada-Datei mit einem Texteditor und sucht nach dem Abschnitt beginnend mit <triangles count="58" material="ccc">. Ab hier wählt man den kompletten Abschnitt aus bis zur Zeile </triangles>, kopiert ihn und fügt ihn ein zweites Mal direkt darunter wieder ein. Anschließend ändert man im neuen Abschnitt in der ersten Zeile den Namen des Materials. Im Beispiel von Kitsune ist das dann <triangles count="58" material="bbb">. Bei anderen Mesh-Dateien sind Anzahl der Polygone und Name der Textur natürlich abweichend von diesem Beispiel. Und wenn man dem Objekt schon in Blender mehrere Texturen zugewiesen hat (auf unterschiedlichen Oberflächen), dann gibt es in der Datei mehrere Abschnitte mit einer <triangles...> Zuweisung.

Mit diesem Trick werden beim Upload für alle Polygone zwei Materiallisten erzeugt, was sich aber weder auf die Uploadkosten noch auf den Land Impact auswirkt. Bei dem Beispiel oben habe ich 11 L$ für das Mesh bezahlt und der Land Impact war gerezzt nur ein Prim. Selbst als ich an das Mesh noch einen normalen Primquader hinzu verlinkt habe, damit das Objekt eine Tiefe bekommt, blieb der Land Impact bei einem Prim.

Hier ist ein Bild des Abschnitts aus der Collada-Datei, der verdoppelt wurde. Die untere Hälfte des Textes entspricht exakt der oberen Hälfte, mit Ausnahme der Materialbezeichnung:

>> Kopierter Abschnitt für doppelte Texturnutzung

Wahrscheinlich ist das Ganze für Otto-Normalnutzer eher uninteressant. Ich werde es wohl für mich auch nicht produktiv nutzen. Aber ich probiere sowas eben gerne aus und freue mich, wenn es dann auch klappt. Vielleicht hat ja noch jemand Lust, damit zu experimentieren. Man sollte aber immer beachten, dass es sich hier um einen Hack handelt und falls LL doch mal irgendwann dazu einen Fix liefert, alle so erzeugten Objekte evtl. unbrauchbar werden (ähnlich wie mit den Invisible Prims bei Avatar-Attachments).

Hier noch einmal alle Links:

Quelle: Second Life Mesh – Double Materials

Keine Kommentare:

Kommentar veröffentlichen