Das Unity-Fenster "Stats" zeigt die unglaubliche Anzahl von Dreiecken und Eckpunkten an

7

In meiner Unity-Szene habe ich:

  • 7-8 Fässer (mit Deckel) jeweils bei ca. 2-400 Dreiecken.
  • 4 Flugzeuge mit jeweils höchstens 200 Dreiecken
  • Kamera, 3 Lichter, ein FPS-Controller

Wenn ich die Schaltfläche "Status" im unteren linken Ansichtsfenster einschalte, werden "14.1K-Dreiecke und 12.k-Eckpunkte" angezeigt:

Geben Sie hier die Bildbeschreibung ein

Ich habe alles doppelt überprüft, es gibt keine Möglichkeit, dass die Elemente in der Szene so viele Dreiecke ergeben können. Die Fässer in Blender und Unity weisen die oben angegebene Anzahl von Dreiecken auf:

Hier ist ein Blender-Screenshot:

Geben Sie hier die Bildbeschreibung ein

Und hier ist einer von Unity:

Geben Sie hier die Bildbeschreibung ein

Ich habe auch das Hierarchiefenster überprüft, um festzustellen, ob ich nicht versehentlich Dinge dupliziert habe, die möglicherweise über den Dingen liegen (z. B. 100 Fässer, die sich alle an derselben Position befinden, um so auszusehen, als ob nur eines vorhanden wäre) das ist nicht der Fall.

Meine Frage lautet also: Interpretiere ich das Unity-Statistikfenster falsch? Ist es ein Fehler in der Anzahl der gemeldeten Dreiecke? Oder fehlt mir einfach völlig, wie das alles funktioniert?

Shivan Drache
quelle
2
Schalten Sie das Licht aus und prüfen Sie, ob die Zahl steigt oder fällt. Ich denke, es rendert jedes Objekt für jedes Licht beim Vorwärtsrendern. Wenn Sie also eine bestimmte Anzahl von Lichtern haben, multiplizieren Sie die Tris / Verts mit einer signifikanten Menge.
Tetrad
1
@ Tetrad Oh, Mann, das war es. Ich hatte 2 Lichter in der Szene, und wenn ich eines ausschalte, verringert sich die Tri-Anzahl um etwa 4k. (geht von 14.1k bis 11k). Bitte posten Sie Ihren Kommentar als Antwort, damit ich ihn als ausgewählte Antwort auswählen kann.
Shivan Dragon

Antworten:

7

Beim Vorwärtsrendern wird jedes Objekt, das von einer Lichtquelle betroffen ist, für jedes Licht gerendert. Mit zwei Lichtern rendern Sie also doppelt so viele Polygone wie mit einem einzigen Licht.

Darüber hinaus enthält das optimierte Netz, das Unity für Sie generiert / importiert, möglicherweise nicht so wenige Polygone / Verts wie das, was Sie erstellen. Ich denke, es verwendet Dreiecksstreifen und macht viele entartete Dreiecke, so dass es schneller rendert.

Siehe auch:

http://docs.unity3d.com/Documentation/Manual/RenderingStatistics.html

Aufrufe zeichnen Die Gesamtzahl der nach dem Stapeln gezeichneten Netze wurde angewendet. Beachten Sie, dass bei mehrmaligem Rendern von Objekten (z. B. von Pixellichtern beleuchtete Objekte) jedes Rendern zu einem separaten Zeichenaufruf führt.

Tetrad
quelle
0

Zu den gezählten Dreiecken und Eckpunkten gehören auch die Ebene und die beiden schwarzen menschlichen Figuren. Die Flugzeuge von Unity sind in Ordnung, aber wenn Sie möchten, können Sie nur zwei Dreiecke verwenden, um das Flugzeug zu bilden.

  • Erstellen Sie einen neuen Ordner auf der Registerkarte "Projekt", nennen Sie ihn "Editor". Erstellen Sie im Editor ein Boo-Skript und nennen Sie ihn "OptimizedPlane".

  • Erstellen Sie einen neuen Ordner auf der Registerkarte "Projekt" und nennen Sie ihn "Modell".

Kopieren Sie den folgenden Code und fügen Sie ihn ein:

import UnityEngine
import UnityEditor

class OptimizedPlane (Editor): 
[MenuItem('GameObject/Create Other/Optimized Plane')]

static def Init ():
    customPlane as GameObject = GameObject("Optimized Plane")
    meshFilter as MeshFilter  = customPlane.AddComponent(MeshFilter)
    customPlane.AddComponent(MeshRenderer)

    destination as string = 'Assets/Model/OptimizedPlane.asset'
    mesh as Mesh = AssetDatabase.LoadAssetAtPath(destination, Mesh)

    if not mesh:
        mesh = Mesh()
        mesh.name = 'Optimized Plane'

        vertices   as (Vector3) = (Vector3(-1,0,1), Vector3(1,0,1), Vector3(1,0,-1), Vector3(-1,0,-1))
        uv         as (Vector2) = (Vector2(-1,1), Vector2(1,1), Vector2(1,-1), Vector2(-1,-1))
        tangents   as (Vector4) = (Vector4(-1,0,1,1), Vector4(1,0,1,1), Vector4(1,0,-1,1), Vector4(-1,0,-1,1))
        triangles  as (int)     = (0,1,3,3,1,2)

        mesh.vertices = vertices
        mesh.uv = uv
        mesh.tangents = tangents
        mesh.triangles = triangles

        mesh.RecalculateNormals()
        mesh.RecalculateBounds() 
        mesh.Optimize()

        AssetDatabase.CreateAsset(mesh, destination)
        AssetDatabase.SaveAssets()

    meshFilter.mesh = mesh
    Selection.activeObject = customPlane

Spielobjekt> Andere erstellen> Optimierte Ebene

zyeek
quelle
Ja, Sie haben Recht, aber ich habe die Tris aus dem Flugzeug und die ausgeschnittenen Figuren berücksichtigt, und es passt immer noch nicht zusammen. Cooles Skript aber danke. Beats müssen ein Flugzeug in Blender machen, es exportieren, es in Unity importieren, usw. usw.
Shivan Dragon