Jump to content
Unity Insider Forum

Mesh: mesh.RecalculateNormals(); // mesh.RecalculateTangents(); // mesh.RecalculateBounds();


minuschki

Recommended Posts

Hallo zusammen

Ich habe eine Frage zu "mesh.Recalculate". Sollte man, nachdem ich ein Mesh per Skript von Grund auf kreiert habe oder bei einem bestehenden Mesh die Vertices in der y-Achse verschoben habe, ein "mesh.Recalculate" durchführen?

Wenn ja: mesh.RecalculateNormals(); oder mesh.RecalculateTangents(); oder mesh.RecalculateBounds(); oder alle drei?

ps. Dem Mesh wurde auch ein MeshCollider hinzugefügt, der nach der Manipulation geupdatet werden soll. Zudem hat das verwendete Material neben dem Albedo auch eine Normal Map. Ich erwähne das nur, falls das einen Einfluss auf die Verwendung der "mesh.Recalculate"-Varianten haben könnte. Eigentlich sind mir die Funktionen der einzelnen Varianten nicht ganz klar und die Erklärungen der Unity-Hilfe sind auch eher dürftig.

Danke für eure belehrenden Inputs!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin

bznNk.jpgNormals sind die Vektoren, die von der Fläche weg zeigen. Der Vektor kann extra angegeben werden, damit sie sich von den eigentlichen Normalen unterscheiden können. Eine Kugel besteht ja auch aus Flächen mit Kanten dazwischen; wenn man die Normalen allerdings alle vom Mittelpunkt wegzeigen lässt, dann wird die Lichtberechnung so beeinflusst, dass man die Kanten nicht mehr sieht.

Wenn du Unity die Dinger automatisch berechnen lässt, kommt halt nicht unbedingt das raus, was du haben willst. Manchmal willst du direkt ein Array befüllen, das genau so groß ist wie das Vertex-Array und da selbstgemachte Normalenvektoren reinschmeißen.

Tangenten sind da seltener ein Problem. Die Frage ist da eher, ob du sie brauchst. Die üblicheren Shader brauchen alle gar keine Tangenten.

Und Bounds, da kannste nix mit falsch machen. Ist halt die AABB, also die Box, die dein Mesh umschließt, mit deren Hilfe Culling und sowas gemacht wird. Wenn du das in einem Spiel mal gesehen hast, das ein Objekt am Bildschirmrand verschwindet, obwohl es eigentlich noch im Bild ist; da waren die Bounds falsch. Richtige Bounds zu haben ist daher wichtig, und wenn dein Mesh nach dem Update eine merkbar andere äußere Form hat, dann kannst du die gerne automatisch neu berechnen lassen. Wenn nicht (wenn dein Mesh z.B. einfach nur ein bisschen wabert), dann kannst du dir die Rechenleistung aber auch sparen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...