Jump to content
Unity Insider Forum

Wie viele Materials sind zu viel?


CapsE

Recommended Posts

Moin Leute :)

 

Ich bin ein ziemlicher modelling Noob. Im Moment erstelle ich mir meine Models in 3ds Max exportiere das ganze dann und geb jedem einzelnen "Bauteil" ein eigenes Material. (Wenn ich also einen Fensterrahmen hab hab ich 4 Balken und jeder bekommt das Holz-Material)

 

Keine Sorge! Ich weiß das man das so nicht macht und das sich mein armer Rechner sicher denkt "ALTER!" aber ich hab eigentlich auch keine große Lust mich endlos lange mit unwrapten Skins und UVWs und so nem ganzen Blödsinn rumm zu schlagen. (Bis ich das hin bekommen hab das die Dinger vernünftig liegen hab ich mit meiner Methode sämtliche Materials schon fertig)

 

Bis jetzt hab ich in meinem Spiel nur 3 oder 4 kompliziertere Models und ich denke das es selbst im finalen Zustand nicht mehr als 20 oder 30 komplexe Gebäude etc. werden. Allerdings hab ich wie oben bereits erwähnt bei einem einzigen Haus schon 28 Objekte (Hab grad nach gezählt) die jeweils ein Material bekommen.

 

Ich hab das ganze jetzt mal durchdacht und wollte einfach mal fragen wieviel ist zu viel? Braucht ein Klotz der einfach Schwarz ist genauso viel Rechenleistung wie ein Charakter mit HD-Skin? Also muss ich dann jedes Teil meines Hauses quasi als einzelnes Model sehen wenn ich die Leistungsanforderungen schätzen will oder ist das weitaus weniger?

 

Wie oben schon gesagt grundsätzlich funktioniert mein Prinzip und so lange die Frames stimmen hab ich wenig Motivation großartig was zu ändern... ich mach mir nur sorgen das die FPS bald in den Keller gehen. Wie viel schafft Unity so?

 

Viele Grüße: CapsE

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das kann man nicht so einfach beantworten.

Aber es ist so:

Wenn du mehrere einzelne Würfel hättest, die alle das gleiche Material haben und Statisch sind, also immer so bleiben in der Szene, dann verbrauchen die genau 1-2 Drawcalls.

Habe alle Würfel ein anderes Material, dann haste auch mindestens genausoviele Drawcalls.

Drawcall an sich ist nicht schlimm, geht aber auf die Performance. Bei einem modernen PC können das ruhig einige 100 sein, bei einem iPad nicht!

Ich schätze mal, dass rund alle 5 Drawcalls ein Frame/sekunde verloren geht. Du machst also das System langsamer.

Aber wie gesagt, es gibt da keine Zahl, ab der man sagen kann, jetzt ist es zuviel!

 

Probier es selber mal aus. Gib allen Objekten das selbe Material und schau, welche Framerate du hast.

Dann machste das mit deinen vielen Materialien.

DU wirst den Unterschied sehen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ein feste Grenze, bei der Schluss ist, dürfte es nicht geben.

Das entscheidende bei den Materialien ist, jedes einzelne Material erhöht die Anzahl der sogenannten "Draw Calls".

Ziel sollte es sein, diese Zahl so gering wie möglich zu halten. Also soviel wie möglich in ein Material packen und evtl. auch wiederverwenden - nicht für jedes Haus ein seperates Material, wenn es im Grunde die gleichen Texturen nutzt.

Um UV-Mapping wirst du da nicht drumrum kommen, wenn du die Materials effizent nutzen willst.

 

Auf deinem PC mögen keine negativen Auswirkungen zu erkennen sein, aber das hängt einfach mit der Rechenleistung zusammen. Je älter/schwächer der PC ist, desto macht es sich bei den FPS bemerkbar. Entwickelt man auch für iOS/Android hat man sogar noch weniger Spielraum bei den Draw Calls.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 4 months later...

Im Prinzip habe ich momentan das gleiche Problem. Ich bin gerade dabei mein erstes Game-Asset-Paket für ein nordisches Dorf zu modellieren und texturieren, habe in der Hinsicht also auch noch nicht viel Erfahrungen. Ich habe mir dabei vorgenommen, das Ganze möglichst Variabel zu gestalten. So habe ich zum Beispiel die Form eines Hauses in mehreren Ausführungen texturiert, die wieder untereinander gemischt werden können, wodurch man relativ schnell eine hohe Vielfalt an unterschiedlich aussehenden Gebäuden bekommt. Hier ein Beispiel:

Haus1.jpg

Jeder Körper mit einer unterschiedlichen Textur hat dabei ein eigenes Material. Ein dargestelltes Haus hat somit insgesamt ca. 10 Materialen und besteht aus genau so vielen Meshes die geparented sind. Alle Stützpfeiler der vier Häuser verwenden allerdings dafür das gleiche Material. Wenn ich die Bauteile der vier Häuser durchmische, würden ebenfalls mehrere Häuser sich ein Material teilen. So kann ich z.B. aus den dargestellten Häusern ein neues erstellen mit den Wänden des ersten Hauses, dem Dachgiebel des vierten und dem Dach des dritten Hauses.

 

Ich Frage mich nun, ob ich die Meshes für jedes Haus so weit wie es geht zusammenfügen sollte und ein Material für das Ganze Mesh erstellen sollte, oder ob ich es so lasse wie es ist. Meine Befürchtung beim Zusammenfügen der Meshes und dem erstellen einer Textur ist, dass dabei die Qualität der Textur darunter leiden könnte, weil ich ansonsten relativ große Texturen brauche (mindestens 2048x2048 Pixel). Ein weiteres Problem ist, dass ich die UV-Koordinaten vieler auf dem ersten Blick gleicher Flächen nicht übereinander legen kann, weil sie in ihrer Farbe leicht variieren (aufgrund von Colormaps, die ich zusätzlich über ganze Abschnitte des Hauses gelegt habe). Außerdem sind die Häuser komplett begehbar und von zwei seiten modelliert, das übereinanderlegen der UVMaps wäre dementsprechend auch relativ viel Arbeit.

 

Hat jemand einen Rat für mich?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ein Material = ein Drawcall. Das ist mal die Basis.

 

Nur die Meshes zu verbinden bringt dir nichts. Auch mit einem einzigen grossen Mesh und 10 Materialien drauf hast du noch 10 Drawcalls. Alles zu verbinden und dafür pro Haus nur noch 32x32 Pixel Texturfläche zu haben bringt dir aber auch nichts. Das ist was meine Vorredner mit dem "Auf Teufel komm raus" gemeint haben.

 

Wenn du zum Beispiel vier Häuser hast die bei gewünschter Auflösung selbst vereint noch auf eine Textur passen, dann macht es Sinn. Wenn nicht dann nicht. Sprich wenn deine Hütten hier jeweils eine 512x512 Textur haben lohnt es sich die Dinger auf eine einzige Textur zu packen und die Meshes zu einem einzigen Mesh zu vereinen.

 

Dabei musst du aber auch deine Zielplattform im Auge behalten. Theoretisch könntest du auf einem PC auch eine 4096er Textur verwenden, gängiger sind da aber eher 2048er als maximales Gardemass. Auf einer mobilen Plattform wie iOS und Android ist technisch bedingt hingegen meist schon bei 1024x1024 Schluss.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 3 weeks later...

Grundlegend resultiert jedes Material pro Mesh(GameObject) in einem Drawcall. Wenn das alles statisch ist dann musst du zunächst das static häckchen setzten, dann liegt die Anzahl der Drawcalls an den verwendeten Materialien.

Man sollte immer die Reduzierung der Drawcalls der Polygonzahl oder Texturgröße vorziehen, z.b. bei Performanceproblemen.

 

Es kommt natürlich auf das Spiel an, ein modernes FPS kann locker 1000-2000 Calls haben.

 

Um deine Häuser mal als Beispiel zu nehmen, wenn das für First Person bestimmt ist kannst du natürlich mehr Ressourcen vergeben, es kommt ja auf die Drawcalls der ganzen Szene an und nicht denen eines einzelnen Objektes. Wenn es für ein Strategiespiel ist, vorallem Mobile, würde ich schon eine große Atlas-Textur in Betracht ziehen, macht sich imer gut bei modularen Geschichten.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...