Jump to content
Unity Insider Forum

Probleme mit prozedural erstelltem Model


GaRv3

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...