RealNiclas Geschrieben 8. April 2019 Melden Share Geschrieben 8. April 2019 Guten Tag, ich versuche nun schon seit einiger Zeit folgendes Problem zu lösen: Ich lade ca. 144 3D Modelle, die ich in Blender modelliert habe und wenn alle Modelle angezeigt werden gehen die Frames von >1500 auf ca. 200 herab. Wenn die Kamera jedoch nicht alle Objekte zeigt, steigen die Frames wieder. So sieht mein Code aktuell aus: public class MapGenerator : MonoBehaviour { public GameObject hexagon; private int width = 12; private int height = 12; private float sizeWidth = 1.73f; private float sizeHeight = 1.5f; void Start() { for (int x = 0; x < width; x++) { for(int z=0; z<height; z++) { GameObject hexa = Instantiate(hexagon); hexa.transform.parent = GameObject.Find("Hexagons").transform; if (z % 2 == 0) hexa.transform.position = new Vector3(x * sizeWidth + sizeWidth / 2, 0, z * sizeHeight); else hexa.transform.position = new Vector3(x * sizeWidth, 0, z * sizeHeight); } } } } Gibt es da einen performantere Lösung, wie ich die Objekte laden bzw. generieren kann? Gruß: Niclas Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
SimpleScript Geschrieben 8. April 2019 Melden Share Geschrieben 8. April 2019 Hey, hm an dem Code brauch man nicht viel optimieren. Nicht weil er besonders "performant" ist, sondern weil die Generierung einmalig stattfindet und somit nach dem Start keine weiteren Ressourcen für die Generierung benötigt werden. Schau dir mal etwas zum Thema LOD an, das könnte deine Performance verbessern. Wobei 200Fps mehr als ausreichend sind 🙂LOD von Unity Gruß Timm Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
RealNiclas Geschrieben 8. April 2019 Autor Melden Share Geschrieben 8. April 2019 Ja, 200 Frames reichen auf jeden Fall, nur wundert es mich, dass die Frames so stark abnehmen. Bei einem Model ungefähr 200 Frames weniger ist schon ordentlich. Gruß: Niclas Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 8. April 2019 Melden Share Geschrieben 8. April 2019 So kann man das aber nicht rechnen. Machste noch ein 145es Objekt landest du ja auch nicht bei 0 Schau mal, ob du die Objekte in Batches rendern kannst. Außerdem: Wie viele Polygone sind da insgesamt im Spiel? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
RealNiclas Geschrieben 10. April 2019 Autor Melden Share Geschrieben 10. April 2019 Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 10. April 2019 Melden Share Geschrieben 10. April 2019 Also wenn du 144 Objekte hast, aber gleichzeitig 11.232 shadow casters, dann stimmt da etwas nicht. Wie viele Lichter sind denn in deiner Szene? Aus wievielen Objekten besteht denn so ein 3D Modell? Müssen die Objekte denn alle Schatten werfen? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
RealNiclas Geschrieben 10. April 2019 Autor Melden Share Geschrieben 10. April 2019 In der Szene in befindet sich eine Lichtquelle und ein Objekt besteht aus jeweils 2 Teilobjekten (ein veränderter Blender Cube und ein veränderter Cylinder). Eigentlich müsste nicht jedes Objekt einen Schatten werfen. Kann man einstellen das bei einem 3D Modell z.B. nur 1 Cube Schatten wirft und der Rest nicht? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 10. April 2019 Melden Share Geschrieben 10. April 2019 Du kannst das im Inspector im Bereich MeshRenderer umschalten. Get natürlich auch über script umzuschalten. Renerer myRend = GetComponent<Renderer>(); myRend.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; Aber trotzdem hast du viel zu viele Shadowcaster. Kann es sein, dass deine Objekte aus ganz vielen Einzelpolygonen bestehen? Leg mal nur ein Unity Würfel in die Szene und schau dir die Werte an. Dann füge mal einen manupulierten Blender-Würfel der Szene hinzu und schau dir die Werte wieder an. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 10. April 2019 Melden Share Geschrieben 10. April 2019 Es sind ja aber auch nicht nur die Schatten. Du hast 18513 Draw Calls, die durch Batching eingespart werden. So etwas geht schlecht, wenn man nicht mindestens 18514 Objekte hat... Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
RealNiclas Geschrieben 11. April 2019 Autor Melden Share Geschrieben 11. April 2019 Okay, nach einiger Zeit ist mir nun aufgefallen, dass ein 3D Modell doch aus sehr vielen Cubes besteht und somit sehr viele Objekte geladen werden. Aber die Sache mit dem Schatten hört sich auch gut an. Werde ich mir auf jeden Fall auch mal anschauen, denn unnötige Schatten müssen ja nicht sein. 😄 Danke für alle Antworten! Gruß: Niclas Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
devandart Geschrieben 12. April 2019 Melden Share Geschrieben 12. April 2019 vor 16 Stunden schrieb RealNiclas: Okay, nach einiger Zeit ist mir nun aufgefallen, dass ein 3D Modell doch aus sehr vielen Cubes besteht und somit sehr viele Objekte geladen werden. Aber die Sache mit dem Schatten hört sich auch gut an. Werde ich mir auf jeden Fall auch mal anschauen, denn unnötige Schatten müssen ja nicht sein. 😄 Danke für alle Antworten! Gruß: Niclas Kleiner Hinweis: man kann Meshes in Blender auch zusammenführen. Z.B. kannst Du alle Objekte in der Blender Szene markieren und dann mit STRG-J alle zu einem Objekt machen. 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.