Texture Density!

  • Kennt sich hier jemand mit "Texture Density" aus? Also nicht was das ist, sondern wann man welche Texturgröße nehmen sollte?


    Manche Objekt sind klein, manche groß, andere nah, andere fern, andere im Fokus, andere nicht etc.


    Wie entscheidet man wann was richtig ist? Oder gibt das da irgendwelche Richtlinien zu? :)

    • Offizieller Beitrag

    ich hohl bisschen aus:


    1. Pixel steht für "Picture Element" und wird in der 2D-Welt verwendet.
    2. Texel steht für "Texture Element" und wird in der 3D-Welt verwendet.

    Beispiel:


    Angenommen, du hast eine Textur, die zum Beispiel 1024 * 1024 Pixel groß ist.

    Das bedeutet, dass sie aus insgesamt 1048576 Pixeln (Texel) besteht.

    Diese etwas mehr als eine Million Pixel werden auf einer Textur mit 1024 * 1024 Pixeln dargestellt.

    Es macht einen Unterschied, auf welcher Fläche du diese Millionen Pixel projizierst. Wenn du sie auf eine Wand mit einem Meter Größe oder auf eine Wand mit zehn Metern projizierst, wird die Darstellung unterschiedlich sein.

    Nehmen wir an, du hast eine Fläche, die 1024 * 1024 cm groß ist (genau so groß wie deine Textur).

    Die Berechnungen sehen wie folgt aus:


    Texel: 1024 Pixel * 1024 Pixel = 1048576 Texel

    Fläche in Quadratzentimetern: Höhe 1024 cm * Breite 1024 cm = 1048576 Quadratzentimeter


    Wenn du die Texel-Dichte durch die Fläche teilst, erhältst du die Anzahl der Pixel pro Quadratzentimeter. In diesem Fall ist es sehr einfach zu berechnen: 1 Pixel pro Quadratzentimeter.


    Wenn du jetzt auf einem Meter ein Pixel hättest, wäre das unpraktisch, und du müsstest entweder eine größere Textur verwenden oder das Mesh verkleinern oder aufteilen. Zum Beispiel könntest du aus einer 4-Meter-Wand zwei 2-Meter-Wände machen.


    Es spielt keine Rolle, welche Texel-Dichte du für dein 3D-Mesh verwendest. Was jedoch empfehlenswert ist, ist eine einheitliche Texel-Dichte, die du für alle deine Meshes gleich verwendest. (Stuhl die selbe Texel Density wie die Wand, Auto oder den Baum.

    Nur so kannst du alle Texturen effektiv einsetzen.


    Wenn du das Unreal-Projekt-Beispiel öffnest und den Würfel aus dem Beispiel verwendest, wirst du feststellen, dass egal welche Textur du aus dem Projekt verwendest, sie auf den Meshes alle korrekt aussehen.

    Das liegt daran, dass die Standard-Meshes alle die gleichen Texel-Dichten haben. Wenn du dieselbe Texel-Dichte wie der Unreal-Würfel verwendest, bist du auf einem guten Weg.


    Denke aber auch daran: Nicht nur die Texel-Dichte ist wichtig, sondern auch die Größe deiner Texturen. Das bedeutet, dass Texturen immer die gleiche Größe haben sollten, zum Beispiel 2m * 2m.

    Wenn du Texturen verwendest, die unterschiedlich skaliert sind, ist deine gesamte Texel-Dichte für die Tonne.


    Wenn du zb eine Wand Fotografieren würdest die 1Meter Groß ist und eine Wand die 2 Groß ist.

    In Unreal verwendest du 1 Meter Textur für eine 2 Meter Wand und die 2 Meter Textur für eine 1 Meter wand.
    Auch wenn beide Wände die selbe Texeldensity haben, würde Ergebnis falsch aussehen.

    • Offizieller Beitrag

    Also verstehe ich das richtig, wenn ich jetzt ne Brücke, nen Auto oder einen Stuhl hätte, ist das bereits in Ordnung, wenn die alle dieselbe Auflösung wie 2K oder so haben?

    Die Frage ob du jetzt für einen Kochlöffel oder einen Stuhl eine 2k Textur verwendest ist ein ganz anderes Thema. Die Performance Frage bitte mit der Texeldensity in einen Topf schmeißen.


    Hier ein Beispiel wie du die Texel density Sinnvoll einsetzen kannst.


    1.Du hast zb eine 2k Holztextur

    2. Du hast eine Holzkiste die ist 1m * 1m * 1m groß. Die 2k Textur hat eine reale Größe von 2 * 2 Meter.

    Das heißt für deine 1m Kiste verwendest du nur die Hälfte deiner 2k Textur. Deine UV deiner 1m Kiste ist halb so groß wie dein kompletter UV Space. (Hier sind 50% vom UV Bereich benutzt)


    3.Du hast eine 2m * 2m Kiste. Hierbei braucht die Texteldensity genau 100% von deinem UV Space. Deine UV kann über den UV Space hinausgehen es ist also völlig egal wo deine UV im UV Bereich liegt. Somit kannst du Texturwiederholungen theoretisch verhindern. In dem du die UV bei jede 2m Kiste wo anderst plazierst. (Hier sind 100% vom UV Bereich benutzt)


    4.Bei einer 3 * 3 Meter Kiste würde die UV 150% groß sein. Oder 50% größer als dein UV Bereich. (Hier sind 150% vom UV Bereich benutzt deine UV ragt also zu 50% über deinen UV Bereich hinaus.) Deine UV muss aber auch nicht nicht im UV Bereich liegen.


    An der Stelle musst du verstehen: Durch die Texel Density ist die Auflösung immer die die selbe. Ist das Mesh kleiner, ist auch die UV kleiner und das in einem Verhältnis zu anderen Objekten die größer oder kleiner sind.

    Die Holztextur kannst du somit auf jedes Mesh dropen und es sieht immer richtig aus sofern diese Objekte die selben Texeldensitys haben.

    Für Stein könntest du auch eine andere Texeldensity nehmen nur wenn du dann noch die Holztextur verwenden willst, wäre die Auflösung falsch.


    Hier mal ein Beispiel wo man das gut sehen kann:


    Das sind unterschiedliche Grundkörper. Ich hab einen Würfel erstellt und diesen unterschiedlich skaliert. Die andern Grundkörper sind einfach an die entsprechende Stelle geschoben.


    An der Schwarz/Weißen Checker Textur, siehst du das alle Kacheln gleich groß sind. Sie haben also alle die Auflösung.

    Mit einer anderen Texeldensity wäre die Kacheln entweder größer oder kleiner. Also niedrigere oder höhere Auflösung.


    Entscheident ist aber, das die Auflösung bei allen Objekten egal welche Größe sie haben immer gleich sind.


    Es fällt mir schwer zu erklären aber ich hoffe du hast es verstanden.

  • Ja, als der vorletzte Satz von dir ist ja meine Kernfrage, also wie ich das anstellen soll, das alle Objekte dieselbe Auflösung haben, ich baue ja alle Modelle einzeln, also wenn ich die nachher in einem Level zusammenfüge passt das alles vorne und hinten nicht mehr.


    Sonst fällt mir ja nur ein, das ich halt den Level komplett im 3D Programm baue und dann überall ne Checker Textur draufhaue und dann die ganzen Texturauflösungen bestimme, bis alles gleich groß ist.


    Ich denke nur das gibt es einen besseren Weg und das mit den Metern, das kann ich nicht abschätzen, bei jedem Modell. Dafür wird das zu komplex am Ende, will ich meinen.

    • Offizieller Beitrag

    Sonst fällt mir ja nur ein, das ich halt den Level komplett im 3D Programm baue und dann überall ne Checker Textur draufhaue und dann die ganzen Texturauflösungen bestimme, bis alles gleich groß ist.

    Ne so funktioniert das nicht. Ich glaube du arbeitest in Blender ?


    In Maya würde ich zb einen Stuhl modellieren, dann ganz normal die UV machen. Am Schluss die gesamte UV auswählen und die Texteldensity drauf machen.


    So sieht das aus:


    Mit Get kann ich die Texel Density von einem Mesh raus finden, Der Wert wird dann angezeigt, Und mit Set würde ich die Texel Density von 32/ 512 vergeben.


    Wenn ich die selbe Texel Density für alle Objekte vergebe zb für einen Tisch, Haus und Auto. Dann ist die Auflösung gleich.


    Die UVs skalieren sich dann automatisch entsprechend.


    Das ist der Automatische weg. Du könntest das auch Manuel machen in dem du die UVs alle händisch skalierst bis alle kacheln gleich groß sind. Aber das ist doch quatsch. Darum gibt Texel density Plugins und Tools.