minuschki Geschrieben 20. September 2021 Melden Share Geschrieben 20. September 2021 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 More sharing options...
Sascha Geschrieben 20. September 2021 Melden Share Geschrieben 20. September 2021 Moin Normals 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 More sharing options...
minuschki Geschrieben 22. September 2021 Autor Melden Share Geschrieben 22. September 2021 Hallo Sascha Danke für deine Erklärung! Wenn ich deinen Input richtig interpretiere, sollten also: mesh.RecalculateNormals ();mesh.RecalculateBounds(); ausreichen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 22. September 2021 Melden Share Geschrieben 22. September 2021 Kommt halt darauf an, was du haben willst Hau's im Zweifelsfall rein und schau, ob das Ergebnis stimmt. 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.