Jump to content
Unity Insider Forum

Viele Blender Objekte laden


RealNiclas

Recommended Posts

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

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

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

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

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

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

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

Archiviert

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

×
×
  • Neu erstellen...