Performancefreundliches texturieren

  • Hallöchen,


    nachdem ich bei meinem neuen V-Wagen ja alles besser machen will, darf ich die Performance dabei auch nicht ausklammern (:


    Ich habe mir den Lexikonartikel "Fahrzeuge für LOTUS bauen" durchgelesen. Der besagt ja, dass für jeden Drawcall eine Animation, ein Effekt und eine Textur geladen wird. Wie läuft das dann, wenn für unterschiedliche Objekte, welche die selbe Textur verwendet wird? Beispielsweise habe ich aktuell die Textur des Außenmeshes (welches wiederum aus verschiedenen Materialien bestehen wird) sowie der Türflügel (von denen es sehr viele gibt) auf einer 4096x4096 Textur. Heißt dies im Endeffekt, dass diese 4k Textur für jedes Material des Außenmeshes seperat, sowie zusätzlich für jeden einzelnen der Türflügel nochmals seperat in den Texturspeicher geladen wird? Oder wird diese Textur nur 1x in den Speicher geladen und mehrere Drawcalls greifen auf eine Textur im Speicher zu?


    Falls ersteres zutrifft: Wäre es dann klüger die Türflügel sowie kleinere Teile des Außenmeshes (welche ein anderes Material besitzen) auf eigene, viel kleinere 512x512 (oder gar 256x256) Texturen zu mappen um zu verhindern, dass die selbe 4k Textur den Speicher vollmüllt?


    Oder hab ich da in den Artikel zu viel hineininterpretiert? Denn grundsätzlich heißt es ja, dass man so viel wie möglich auf eine Textur packen soll.

  • Vermutlich hast Du jetzt meine Antwort nicht abgewartet, aber für alle Fälle:

    - dieselbe Textur (nur, wenn auch die ContentID identisch ist, also für gewöhnlich beschränkt auf den Container bzw. das Arbeitsverzeichnis) wird nur einmal im Grafikspeicher gehalten

    - Sobald Material, Animation usw. getrennt sind, ist es egal, ob die Texturen für diese Objekte auf derselben Textur oder unterschiedlichen Texturen liegt

    - generell Texturen zusammen zu fassen ist bei Fahrzeugen im Allgemeinen egal, weil ohnehin immer sämtliche Objekte oder gar kein Objekt sichtbar ist. Wenn sich dagegen z.B. unterschiedliche Gebäude eine Textur teilen, kann es sein, dass man über längere Strecken nur eines der Gebäude sieht, weshalb während dieser Zeit nur ein kleiner Teil der Textur benötigt wird und der Rest unnütz im Speicher liegt.

    - Interessant ist natürlich die Aufteilung hinsichtlich KI oder User bzw. Repaints: Hast Du das Dashboard auf derselben Textur wie das Außenmesh und wird das Fahrzeug nur als KI dargestellt (weil der User ein anderes Fahrzeug fährt), dann sind die Dashboard-Bereiche komplett ungenutzt im Speicher. Außerdem ist der Dashboard-Bereich bei Repaints mehrfach im Speicher, nämlich für jeden Repaint ein mal.

  • Wenn sich dagegen z.B. unterschiedliche Gebäude eine Textur teilen, kann es sein, dass man über längere Strecken nur eines der Gebäude sieht, weshalb während dieser Zeit nur ein kleiner Teil der Textur benötigt wird und der Rest unnütz im Speicher liegt.

    Bedeutet, jedes Objekt sollte tatsächlich eine Separate Textur bekommen, auch wenn sie identisch zu einem Anderen Objekt ist?

    Omsi hat mein Arbeitsplatz gekündigt, Putze ich halt bei Lotus :)

  • Nein!!


    Angenommen, ich habe eine 1024x1024 Textur, auf der ist rechts eine rotes Gebäude und links ein weißes Gebäude. Wenn ich jetzt nur rote Gebäude platziere, dann werden ja nur die rechten 512x1024 Pixel der Textur genutzt, die andere Hälfte ist komplett sinnlos im Speicher. Nur, wenn die weißen und roten Gebäude gleichzeitig geladen sind, wird die komplette Textur genutzt.


    Wenn Du aber drei verschiedene braune Gebäude hast, die alle dieselbe 1024er-Textur nutzen, muss diese nur einmal im Speicher liegen!

  • Okay gut, *schweiß von Stirn weg mach* dann hab ich bisher alles richtig gemacht :D


    Sorry für das Missverständnis

    Omsi hat mein Arbeitsplatz gekündigt, Putze ich halt bei Lotus :)

  • Okay, wenn ich das dann also richtig verstanden habe, dann ist's egal, wenn der Türflügel jetzt auf der (4096x4096) Textur fürs Außenmesh liegt, selbst wenn der Türflügel später, wenn der Zug in game zusammengekuppelt ist, in 72-facher Ausführung vorhanden ist, richtig?

  • Genau. Entscheidend ist die Anzahl der Drawcalls (wegen der Animationen der Türen werden es für die Türen sowieso 72 sein) und wieviele Texturdaten unnütz im Speicher liegen (was hier kein Problem sein sollte, weil ich mal stark vermute, dass der Rest der Textur ebenfalls für's Fahrzeug genutzt wird... ;-) )

  • Neu erstellte Beiträge unterliegen der Moderation und werden erst sichtbar, wenn sie durch einen Moderator geprüft und freigeschaltet wurden.

    Die letzte Antwort auf dieses Thema liegt mehr als 60 Tage zurück. Das Thema ist womöglich bereits veraltet. Bitte erstellen Sie ggf. ein neues Thema.

    Maximale Anzahl an Dateianhängen: 5
    Maximale Dateigröße: 500 kB
    Erlaubte Dateiendungen: bmp, cfg, ini, jpeg, jpg, lct, ldl, llg, lob, log, lpmtl, lptmt, ltx, pas, pdf, png, railtrack, rar, txt, veh, wav