Jump to content
Unity Insider Forum

Objekte Aktivieren/ Deaktivieren


Tintenklecks

Recommended Posts

Hallo Leute!

Ich hab leider keien Ahnung, wie ich das, was ich gerne hätte bewerkstelligen soll.

Und zwar hätte ich gerne, um die Performance meines Spiels zu verbessern, auch wenn die Lvl etwas größer werden, das Objekte die auserhalb des Kamerasichtfeldes "Deaktiviert" oder so werden, damit diese keinen, oder zumindest weniger, Speicher benötigen.

Wie gesagt, ich habe keine ahnung, was für möglichkeiten es da gibt, und wie man das Bewerkstelligen kann. Vielleicht könnt ihr mir da einen Denkanstoß oder eine Hilfestellung Geben?

Danke im Vorraus!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das ganze Thema ist leider nicht so einfach und oft nicht mit einem einfach Aktivieren und Deaktivieren von Objekten getan. Sobald ein Objekt einmal in der Szene vorhanden ist, dann verbraucht es bereits Speicher.
Es gibt Methoden, über welche du Objekte in die Szene "streamen" kannst, dabei würdest du dann tatsächlich Speicherplatz einsparen.
Ansonsten geht es oft "nur" darum, ein überflüssiges "Rendern von Objekten" zu vermeiden. Siehe dazu:
https://docs.unity3d.com/Manual/OcclusionCulling.html

Oder es geht darum "Aktivität" von Objekten die nicht in Reichweite sind zu unterbinden. Siehe dazu Culling Groups API von Unity.

Hier mal ein paar Infos:
http://www.unityperformance.com/guide/culling

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie @Zer0Cool sagt, "gar nicht" drum kümmern ist nicht so ganz richtig. Deine ursprüngliche Frage bezog sich auf so genanntes "Frustum Culling", also das Nicht-Rendern von Objekten außerhalb des Sichtfeldes der Kamera. Da muss man sich wirklich nicht drum kümmern. Mit "Occlusion Culling" kann man zudem noch Objekte ausblenden, die nicht zu sehen sind, obwohl sie im Sichtfeld liegen, weil sie von anderen Objekten gänzlich verdeckt werden.

Der angesprochene Speicherplatz würde irgendwann ein Problem werden, wenn du tatsächlich milliarden von Objekten samt Position in deinem Spiel hast. Wobei vermutlich die CPU schlappmacht, lange bevor es dein RAM tut. Trotzdem sollte man vielleicht nicht versuchen, so viele Objekte gleichzeitig in einer Szene haben zu wollen.

Bevor du dich nun aber schon mit Level Streaming auseinandersetzt, würde ich dazu raten, dass du dir einmal gründlich Gedanken machst, was dein Spiel so ausmacht und was es braucht. Gehst du davon aus, dass du eine so riesige Welt haben wirst, die voller Details sein wird? Und muss alles in einer einzigen Szene vorhanden sein? Spricht etwas dagegen, das Innere von Häusern als getrennte Szene zu haben, die beim Betreten des Hauses geladen wird? Kann nicht auch das Terrain in verschiedene Szenen aufgeteilt werden? Wird deine Welt wirklich so groß oder träumst du bloß davon?

Das sind so die Fragen, die man sich stellen sollte, bevor man sich dusselig macht, Performanceoptimierungen zu finden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Eigentlich wollte ich lediglich von anfang an darauf schauen, das mein Spiel so wenig PC Leistung braucht wie mit dem, was ich gerne hätte, nötig ist. Ich habe nicht vor mein Spiel gigantisch groß zu machen, und auch nicht, das das Innere und das Äußere eines Hauses in der selben Szene ist. Mein Spiel soll ein einfacher Platformer werden, bei dem es Zwar Häuser gibt, in die du allerdings nicht hinein gehen können sollst, ergo nur Dekokram.

Die frage mit dem, wie viel Objecte gleichzeitig möglich sind, ist eher eine neugierfrage, ob es wenige sind, bei denen ich mir gaaanz genau über jedes Object gedanken machen muss, oder ob man das ein oder andere "nutzlose" Deko element mit auf die Karte schmeißen kann. Ich glaube nicht, das ich ein Unrealistisch großes Spiel ausdenke. Ich bin da aktuell recht klein, wie ich finde.

Aber danke für die Antworten, dann mach ich mir da erstmal keinen Kopf mer drum.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Zumeist geht man auch so vor, daß´man zuerst die Szene aufbaut und wenn alle notwendigen Objekte in der Szene vorhanden sind, sich erst dann Gedanken um das "Culling" macht und eine weitere Optimierung der Szene.
Hier kann man die Szene auch noch einmal so "umbauen", daß der Spieler beispielsweise nicht von bestimmten Positionen "alles" sehen kann. Hier versucht man dann quasi dem Spieler bewusst "den Blick zu verstellen", zum einen macht es das Design meist interessanter und zum anderen verbessert es die Performance in der Szene. Ist die Szene dahingehend "optimiert", dann kann man das "Occlusion Culling" in Unity für jedes Objekt einzeln einstellen und letzten Endes "Baken". Ähnlich wie du es auch mit einer Lightmap in Unity machen würdest.

Generell ist es nicht verkehrt Meshes mit reduzierter Polygonanzahl, wenig Materialien und Texturen zu verwenden. Zudem kann man auch schon einmal LOD-Gruppen für Objekte erstellen, insofern man LODs für seine Meshes / Objekte besitzt. Indem man wenig Materialien und Texturen verwendet spart man eben auch wieder Speicher. 

Kann eine Szene extrem groß werden, dann sollte man über asset streaming und scene streaming nachdenken.

Hat man sehr sehr viele gleichartige Objekte in der Szene, dann kann man noch weiter optimieren, siehe hierzu:
https://docs.unity3d.com/Manual/GPUInstancing.html

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...