Jump to content
Unity Insider Forum
GaRv3

Probleme mit prozedural erstelltem Model

Recommended Posts

Hallo zusammen,

ich hab gerade ein Problem bei der Darstellung von in Unity erstellten Models.

Hier ein Screenshot eines einfachen Würfels:

image.png.568ade6b12638c990edded90f1146aa6.png

Links: Eigenes Model
Mitte: Unity Primitive Cube
Rechts: Blender Cube

Ich erstelle die Vertices, setze die UV-Koordinaten, erstelle die Polygone und weise alles zu:

Mesh mesh = new Mesh();

mesh.Clear();
mesh.vertices = vertices;
mesh.uv = uvs;
mesh.triangles = tris;

mesh.RecalculateBounds();
mesh.RecalculateTangents();
mesh.RecalculateNormals();
mesh.name = "RockMesh";

meshFilter.mesh = mesh;
meshCollider.sharedMesh = mesh;

Das Material ist bei allen identisch.

Jemand spontan ne Idee, wo der Fehler liegt? Komme irgendwie nicht drauf.

Vielen Dank und beste Grüße
GaRv3

Share this post


Link to post
Share on other sites

Könnte an den Normals liegen, schau mal die Modelle im Inspector, dort hast du unten "Normals & Tangents", vergleich mal die Werte.

Share this post


Link to post
Share on other sites

Hmm, okay. Ich glaub, ich hab den Fehler gefunden. Sowohl der von Blender importierte, als auch der Primitive Cube haben 24 Vertices. Also hat jede Ecke ein Vertice pro angrenzendem Face. Dann werden die Normalen entsprechend berechnet und es entstehen die scharfen Kanten. Ich habe mit 8 Vertices (eins je Ecke) gearbeitet. Daher stehen die Normalen immer diagonal zum Face und der Shader versucht, das ganze abgerundet zu Schattieren.

Share this post


Link to post
Share on other sites

Ich weiß nicht wie es mit generierten Objekten aussieht, aber bei der Modellierung hat man die Möglichkeit, Kanten die scharf gerendert werden soll zu definieren. Somit hat man die Möglichkeit zwischen Phong-Shading und Flat-Shading zu unterscheiden. Wenn meine Modelle scharfe Kanten bekommen sollen, werden keine extra Vertices dafür erstellt, daher modelliertechnisch betrachtet hast du mit den 24 etwas gemogelt. Ich kann dir aber nicht sagen, ob das in der Engine wieder irgendwo umgerechnet wird - bin nur modellierer.
Dieser Shadingeffekt kommt aber auf jeden Fall vom Phong-Shading.

Share this post


Link to post
Share on other sites

Naja, die Antwort ist ja schon gefunden worden.

Es gibt zu jedem Vertex einen Normalenvektor. Wenn du einen optimierten Cube generierst, hat der 8 Vertices, für jede Ecke einen. Allerdings kann der Normalenvektor jedes Vertices nur in eine Richtung zeigen, sodass eine abgerundete Kante bei der Lichtberechnung entsteht. Um harte Kanten zu haben, braucht jede Ecke jeder Fläche jeweils einen eigenen Normalenverktor. Und dafür braucht jede Ecke auch ihren eigenen Vertex. Man muss also auf jede Ecke drei Vertices packen (für jede angrenzende Fläche eines), damit jede Fläche an jeder Ecke einen eigenen Normalenvektor bekommt.

10241-ybtff.jpg

Macht also 8 * 4 = 24 Vertices statt 8.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×