Jump to content
Unity Insider Forum
Sign in to follow this  
Driller

Resourcenübersteigende Massen an Objekten

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

Share this post


Link to post
Share on other sites

Du hast 4000 objekte pro Chunk? Schau mal auf die DrawCalls in den Render Stats, ist diese Zahl hoch? Dann hast du ein Problem :)

 

Schau dann einfach mal was Batching und Co angeht.

Share this post


Link to post
Share on other sites

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 ^^

Share this post


Link to post
Share on other sites

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 :)

Share this post


Link to post
Share on other sites

Du willst also eine Voxelengine die nicht nur Würfel wie Minecraft darstellen kann sondern auch schräge Flächen/Organischeres?

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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 :)

Share this post


Link to post
Share on other sites

Für das was du vorhast gibt es eigentlich designierte Algorithmen, was du machst erscheint mir sehr ineffizient zu sein, aber wenn es funktioniert.. ;)

 

 

Stichworte: MarchingCubes, DualContouring, SurfaceNets

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...