Das kannst du nicht.
Okay, das war ein bisschen hart. Lassen Sie mich dies anhand von zwei Beispielen veranschaulichen.
Verlassen wir die Welt der Computergrafik. Angenommen, Sie erhalten ein Stück Papier mit der Textur, die Sie uns gegeben haben. Das Papier enthält ebenfalls ein schwach gedrucktes Millimeter-Raster.
Jetzt bekommen Sie eine Schere und etwas Paste, und Ihre Aufgabe ist es, aus dem Stück Papier einen Zylinder zu machen, aber Sie können nur genau durch das Millimetergitter schneiden. Kein Problem! Das bedruckte Papier wurde ursprünglich so erstellt, dass die gelben und roten Teile genau auf das Millimeter-Raster fallen, sodass Sie Ihren Zylinder problemlos herstellen können.
Jetzt ist es Ihre Aufgabe, einen Zylinder halb so groß zu machen. Dazu erhalten Sie ein Stück Papier in der halben Größe, wobei alles in der halben Größe gedruckt wird. Hier beginnen Ihre Probleme. Einige der gelb-roten Ränder fallen auf das Millimeter-Raster, andere nicht. Und für diejenigen, die dies nicht tun, können Sie entweder die gelben oder die roten Teile abschneiden. Welches ist korrekter? Es hängt davon ab, ob. Manchmal ist es das Gelbe, manchmal ist es das Rote, manchmal ist es keines ...
Kommen wir also zurück in die Welt der Computergrafik. Versuchen wir, das zu tun, was Sie von der GPU verlangen, wenn Sie sie zum Erstellen von Mipmaps auffordern. Nehmen Sie Ihre große Textur und ändern Sie die Größe in eine Textur, die genau halb so groß ist wie die ursprüngliche. Was passiert an den gelb-roten Rändern? Es hängt davon ab. Dies hängt vom Filteralgorithmus ab, den Sie beim Verkleinern Ihrer Textur verwenden.
Wenn Sie "Nächster Nachbar" verwenden, behalten Sie Ihre abrupten gelb-roten Änderungen bei, aber einige Ränder (genauer gesagt diejenigen, die in der ursprünglichen Textur in eine ungerade Koordinate fallen) werden zu beiden Seiten des Pixelrasters gezwungen, und Die ursprünglich sorgfältig ausgewählten Texturkoordinaten stimmen nicht mehr mit dem gelb-roten Rand überein.
Wenn Sie "Bilineare Filterung" verwenden, sind die Dinge nicht wirklich besser. Wenn der gelb-rote Rand nicht wie zuvor in das Pixelraster fällt (auch wenn der Rand in der ursprünglichen Textur auf einer ungeraden Koordinate liegt), ist das resultierende Pixel weder rot noch gelb. Es wird eher wie Orange sein! Ist das akzeptabel? Ich weiß es nicht.
Sie werden feststellen, dass das Problem auf die gelb-roten Ränder beschränkt ist, die in ungeraden Koordinaten liegen. Sie können sagen "kein Problem!" und stellen Sie sicher, dass alle gelb-roten Ränder in geraden Koordinaten liegen und das Problem gelöst ist! Oder ist es?
Eigentlich nicht. Das Problem wird beim Erstellen des ersten Mip-Levels gelöst. Wenn Sie jedoch die nächste Mip-Ebene erstellen, bei der es sich um eine Textur handelt, die ein Viertel der Größe des Originals beträgt, tritt das gleiche Problem bei den gelb-roten Rändern auf, die in der Textur halber Größe nicht in eine gleichmäßige Koordinate fallen. Dies sind diejenigen, die in der ursprünglichen Textur nicht in ein Vielfaches von 4 Koordinaten fallen.
Selbst wenn Sie das Problem für die zweite Mip-Ebene beheben, werden Sie niemals das gesamte Problem lösen. Sie werden es nur auf eine niedrigere Mip-Ebene bringen.
Wie Sie sehen, ist dies kein Problem mit der von Ihnen verwendeten Spiel-Engine. Es ist ein Problem mit Mipmapping im Allgemeinen. Bedeutet dies also, dass Mipmapping nutzlos ist und deaktiviert werden sollte? Nicht wirklich. Mipmapping ist sehr nützlich. Du benutzt es einfach falsch. Eigentlich hast du die Antwort selbst gesagt:
Verteilen Sie das Gelb gut außerhalb der UV-Ränder und es ist aus allen Entfernungen fein
Es scheint ein hässlicher Hack zu sein, ist es aber eigentlich nicht. Ich habe jedoch eine allgemeinere Lösung, die ich hiermit als "Erste Panda-Pyjama-Regel für 3D-Skinning" bezeichne.
Ordnen Sie abrupte Änderungen der UV-Koordinaten keinen abrupten Texturänderungen zu.
Dieses Problem tritt auf, weil Sie eine abrupte Texturänderung (gelb nach rot) einer abrupten Texturkoordinatenänderung (die Änderung zwischen dem Zylinder und dem Hohlraum (oder der Kappe, wenn Sie den Zylinder schließen) zuordnen. Sie möchten Vermeiden Sie dies beim Enthäuten, um das von Ihnen beschriebene Problem zu vermeiden.
Logische Folge:
Wenn Sie eine abrupte Änderung der UV-Koordinate vornehmen müssen, nehmen Sie keine abrupte Texturänderung vor (wie bei Ihrer vorgeschlagenen Lösung zum Verteilen des Gelbs). Wenn Sie eine abrupte Texturänderung vornehmen müssen, stellen Sie diese so ein, dass keine abrupte Änderung der UV-Koordinaten erforderlich ist (dies sollten Sie normalerweise vorziehen).
Sie können die Tatsache nutzen, dass die Form Ihrer Textur im Gegensatz zu Modellen aus Papier und Paste nicht mit der Form Ihres Modells übereinstimmen muss. Wenn Sie die Textur für die Kappe Ihres Zylinders erstellen, müssen Sie sie nicht rund machen. Tatsächlich würde ich es rechteckig machen, damit ich es genau an die Textur der Seiten des Zylinders anpassen kann, um abrupte Änderungen der UV-Koordinaten zwischen den Seiten und den Kappen zu vermeiden (siehe "Filter-> Verzerren-> Polarkoordinaten" in) Photoshop).
Ich würde auch den linken und rechten Rand der Zylindertextur an den linken und rechten Rändern der Textur ausrichten und die Texturzuordnung so einstellen, dass sie umwickelt wird, damit sich die Textur gut um den Zylinder legt.