uumli Geschrieben 8. Februar 2020 Melden Share Geschrieben 8. Februar 2020 Hallo, ich benötige ein paar Ideen zum Thema Culling, bzw. allgemein verbesserte Performance. Ausgangssituation: Ich habe eine "leere" Scene. Auf start() werden (einmalig) Objekte instantiiert. Es entsteht mit Hilfe von PerlinNoise eine kleine Welt. 50x50x(max)7 Cubes. Wenn es nacher läuft, vielleicht mehr. Die Cubes können zur Laufzeit zerstört werden, bzw. neue Cubes können instantiiert werden. Problem: Die Anzahl der Cubes sorgt dafür, dass die Performance stark beeinträchtigt ist (Man kann sich als Spieler frei in der Welt bewegen). Hier sollte so etwas wie Occlusion Culling helfen. Leider kann ich das "build in Occlusion Culling" von Unity nicht nutzen, da meine Welt (zufällig) beim start generiert wird. Alle meine Ansätze, die Objekte auszublenden, wenn diese nicht im Sichtfeld sind, haben die Performance eher noch verschlechtert. Weiß jemand, wie man Viewing-frustum culling oder Occlusion Culling hier umsetzen kann? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 9. Februar 2020 Melden Share Geschrieben 9. Februar 2020 Zu Occlusion Culling habe ich gerade nichts, aber: Frustum Culling macht Unity sowieso. Da brauchst du dich nicht drum zu kümmern. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Hermetes Geschrieben 9. Februar 2020 Melden Share Geschrieben 9. Februar 2020 Das schon ausprobiert? GPU Instancing ist Standard auf Aus. Bei zu vielen unterschiedlichen Materialien kann sich die Performance wieder verschlechtern. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
MaZy Geschrieben 10. Februar 2020 Melden Share Geschrieben 10. Februar 2020 Man sagt allgemein so viele Cubes erstellen ist nicht gut. 17500 Cubes * 8 Ecken = 140.000 Vertices. Wenn du Culling benutzen tust, muss Culling noch diese Vertices durch loopen. Weiß jetzt nicht wie das aber exakt abläuft. Daher am besten den Voxel Technik benutzen. Hab damals das hier verwendet: http://studentgamedev.blogspot.com/2013/08/unity-voxel-tutorial-part-1-generating.html Zum Occlusion Culling. Ich glaube das funktioniert nur bei Dingen in der Scene, die auch Occlusion Static eingestellt haben. Weiß gar nicht, ob es dynamisch geht, also wenn du die Welt generierst und dann. Musst nur noch baken und dann ist das eigentlich fertig. Ups, hab erst gedacht, willst wissen wie das geht. Also kannst theoretisch selbst machen. Im Discord gibt es jemanden, der sowas ähnliches gemacht hatte, aber dennoch Probleme mit Performance hatte. Im Prinzip fragst du einfach nur ob, ob die Kamera etwas sehen kann, wenn nicht ausblenden (MeshRenderer). Kannst dazu OnBecameInvisible und OnBecameVisible benutzen. Ich weiß nur nicht, ob das auch gecalled wird, wenn man meshrenderer deaktiviert hat. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
uumli Geschrieben 10. Februar 2020 Autor Melden Share Geschrieben 10. Februar 2020 Am 9.2.2020 um 03:58 schrieb Sascha: Zu Occlusion Culling habe ich gerade nichts, aber: Frustum Culling macht Unity sowieso. Da brauchst du dich nicht drum zu kümmern. Oh. Ich hatte gehofft, dass man das dadurch verbessern kann. Danke für die Berichtigung. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
uumli Geschrieben 10. Februar 2020 Autor Melden Share Geschrieben 10. Februar 2020 vor 18 Stunden schrieb Hermetes: Das schon ausprobiert? GPU Instancing ist Standard auf Aus. Bei zu vielen unterschiedlichen Materialien kann sich die Performance wieder verschlechtern. Das habe ich noch nicht probiert. Danke, werde ich heute mal versuchen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
uumli Geschrieben 10. Februar 2020 Autor Melden Share Geschrieben 10. Februar 2020 vor 34 Minuten schrieb MaZy: Man sagt allgemein so viele Cubes erstellen ist nicht gut. 17500 Cubes * 8 Ecken = 140.000 Vertices. Wenn du Culling benutzen tust, muss Culling noch diese Vertices durch loopen. Weiß jetzt nicht wie das aber exakt abläuft. Daher am besten den Voxel Technik benutzen. Hab damals das hier verwendet: http://studentgamedev.blogspot.com/2013/08/unity-voxel-tutorial-part-1-generating.html Zum Occlusion Culling. Ich glaube das funktioniert nur bei Dingen in der Scene, die auch Occlusion Static eingestellt haben. Weiß gar nicht, ob es dynamisch geht, also wenn du die Welt generierst und dann. Musst nur noch baken und dann ist das eigentlich fertig. Ups, hab erst gedacht, willst wissen wie das geht. Also kannst theoretisch selbst machen. Im Discord gibt es jemanden, der sowas ähnliches gemacht hatte, aber dennoch Probleme mit Performance hatte. Im Prinzip fragst du einfach nur ob, ob die Kamera etwas sehen kann, wenn nicht ausblenden (MeshRenderer). Kannst dazu OnBecameInvisible und OnBecameVisible benutzen. Ich weiß nur nicht, ob das auch gecalled wird, wenn man meshrenderer deaktiviert hat. Danke für die Vorschläge. OnBecameVisible war mich nicht bekannt. Ich hatte hatte das probiert, indem ich selber Rays werde und schaue, ob der Cube getroffen wird, war aber am Ende langsamer. Ich probiere das. Die Voxeltechnik werde ich mir auch mal anschauen. Danke Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.