Jump to content
Unity Insider Forum

Resourcenübersteigende Massen an Objekten


Driller

Recommended Posts

Mein Lieblingsthema Resourcenverwaltung ^^

 

Ich lasse mehrere Chunks spawnen. Ein Chunk hat ein Volumen von 10x40x10 blockähnlichen Elementen. Diese Elemente führen nichts dauerhaft aus. Lediglich massigen Code am Beginn der Scripts. Mein Problem ist, sobald ich die Kamera auf einen einzelnen Chunk richte, sinkt die FPS-Rate unter 10, der Gedanke daran, dass ich später jedoch viel mehr solche Chunk generieren lassen muss lässt mich verzweifeln! :D

 

Laggt es tatsächlich nur weil so viele Elemente angezeigt werden, oder hat das einen anderen Grund?

Und wie kann ich das verhinden, bzw die Performance vebessern?

 

Danke im Vorraus,

Liebe Grüße

-Driller

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ein Chunk hat ein Volumen von 10x40x10 blockähnlichen Elementen. Diese Elemente führen nichts dauerhaft aus. Lediglich massigen Code am Beginn der Scripts.

 

Was sind denn "blockähnliche Elemente"? ^^

Und was für Code wird denn da ausgeführt?

Spawnst du da, wie Dennis schon frage, einfach Cubes oder wird das ne VoxelEngine?

Generell solltest du sehr viel dafür machen, dass NUR das was man sieht auch wirklich erzeugt wird.

 

Irgendwann (oder v.a. wenn man es ungeschickt macht) übersteigt der Aufwand, den man betreibt um alles zu analysieren und auszuwerten den Nutzen, aber es gibt wahnsinnig viele Optimierungen im Hinblick auf Voxel. Aber da ist quasi immer, egal was man macht, noch relativ großes Optimierungspotential da ^^

Aber am besten erzählst du noch ein bisschen mehr, was du eigentlich genau im Sinn hast und wie du es momentan versuchst umzusetzen, dann kann man dir auch ganz gute Ratschläge geben ^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

Okay, danke für die bisherigen Antoworten :)

 

Das Würfel-ähnliche Objekt ist ein Würfel, nur hat er 56 Vertices. Also ist er frei verformbar.

Die Würfel überprüfen am Beginn des Scripts ob rundumliegende Objekte existieren und formen sich nach denen um.

So soll eine Welt entstehen, also ja, strenggenommen ist es eine VoxelEngine ^^

 

Alle sieht man nicht, doch da man die Blöcke später abbauen können soll, Müssen sie generiert werden. Schließlich können

Sie ja später ersichtlich sein :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Genau, den "Würfel" hab ich in Blender erstellt, den ändere ich nur in der Start-Funktion. Keine Update-Funktionen sind in Verwendung. Hab grade 36 (6x6) Chunk generiert (mein Armer Rechner) (36 * 4 000 = 144 000 Elemente), hier der Link zu den Render Stats:

http://www.directupload.net/file/d/4199/m27bj87f_png.htm

 

Das mit dem Verändern der Oberfläche funktioniert bereits einwandfrei. Wenige Objekte (so 5 Elemente) formen sich richtig um, so dass Sie aussehen, als ob Sie ein zusammenhängendes Objekt wären. Nur treten da starke FPS-Probleme auf wenn ich 4 000 Elemente generieren lasse :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Zu meinem Code...

Ich habe 5 Scripts die sich mit der Weltengenerierung befassen:

WGenBasic - Ist am Überobjekt (leer) angebracht, generiert eine Anzahl an Chunks und gibt denen das Script WGenChunk

WGenChunk - Generiert in das leere Chunk Objekt mehrere leere "Stack"-Elemente rein. (Also Element-Stapel) und weist denen das WGenElement-Script zu.

WGenElement - Generiert bis zu einer Zahl Elemente. Weist ihnen die unteren beiden Scripts zu (ElementBasis, ElementMaterial)

ElementBasis - Sehr sehr umfassendes Script, prüft umliegende Elemente, verformt die eigenen Verts etc.

ElementMaterial - Erkennt ob Element Stein/Erde ist und weist entsprechende Farbe(!) zu. Keine Textur bist jetzt nur Farbe.

 

Wie gesagt, nur Start-Funktionen und andere Funktionen. Keine Update-Funktionen!

 

Falls ihr euch mal einen gewisses Script ansehen wollt, poste ich ihn gerne rein. Nur ist es viel zu lang wenn ich alle 5 jetzt reinposte :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Zu meinem Code...

Ich habe 5 Scripts die sich mit der Weltengenerierung befassen:

WGenBasic - Ist am Überobjekt (leer) angebracht, generiert eine Anzahl an Chunks und gibt denen das Script WGenChunk

WGenChunk - Generiert in das leere Chunk Objekt mehrere leere "Stack"-Elemente rein. (Also Element-Stapel) und weist denen das WGenElement-Script zu.

WGenElement - Generiert bis zu einer Zahl Elemente. Weist ihnen die unteren beiden Scripts zu (ElementBasis, ElementMaterial)

ElementBasis - Sehr sehr umfassendes Script, prüft umliegende Elemente, verformt die eigenen Verts etc.

ElementMaterial - Erkennt ob Element Stein/Erde ist und weist entsprechende Farbe(!) zu. Keine Textur bist jetzt nur Farbe.

 

Wie gesagt, nur Start-Funktionen und andere Funktionen. Keine Update-Funktionen!

 

Falls ihr euch mal einen gewisses Script ansehen wollt, poste ich ihn gerne rein. Nur ist es viel zu lang wenn ich alle 5 jetzt reinposte :)

 

So wie es für mich aussieht hast du erstens viel zu viele batches und zweitens zu viele tris. Das mit den Batches kannst du hinbekommen indem du deine Chunks in ein Mesh bakest. Das funktioniert sehr gut und du sparst dir eine Menge Overhead. Siehe dazu:

 

http://docs.unity3d....bineMeshes.html

 

Damit schaffst du es auf ein batch pro chunk. Was die Anzahl deiner tris angeht müsste man wissen wie genau dein Code funktioniert. Wie wäre es vielleicht mit einem LOD System?

 

Ansonsten lohnt es sich auf jeden Fall sich mit den von Mark genannten Themen zu beschäftigen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...