Wie behebe ich dieses seltsame Beleuchtungsproblem?

7

Ich mache ein kleines Spiel in Unity und einige Modelle zeigen sehr hässliche Schattierungen. Die Schattierung sieht normalerweise entlang der Kanten zwischen Dreiecken funky aus. Ich bin ziemlich neu in der Arbeit in 3D; Ich wette, dies ist ein Artefakt der Scheitelpunktbeleuchtung, aber ich bin mir nicht sicher und ich bin mir nicht sicher, wie ich es beheben soll.

Hier sehen Sie das schlimmste Beispiel für dieses Problem: Alt-Text

In dieser Aufnahme ist eine Lichtkarte von geringer Qualität sichtbar, aber ich frage nach den sichtbaren Bändern und seltsamen Formen, die auf der Oberfläche des orangefarbenen Netzes im Vordergrund sichtbar sind. Das Netz wurde in Blender erstellt und UV-abgebildet und verwendet einen standardmäßigen diffusen Shader. Hinter und über der Kamera leuchtet ein Licht. Alle anderen Lichter in der Szene sind ziemlich weit weg. Was mache ich falsch und wie kann ich es besser machen?

BEARBEITEN: Unten ist das Drahtmodell für dieses Modell in Blender.

Alt-Text

Gregory Avery-Weir
quelle
Fügen Sie möglicherweise einen Screenshot des Drahtmodell hinzu. Und warum verwenden Sie Bump Mapping und kein Bump Map? (oder es sieht so aus, als hätten Sie keine)
Notabene
Ich habe ein Drahtmodell hinzugefügt. Es gibt eine Bump Map, aber sie ist absichtlich sehr subtil. Dieses Objekt ist ein paar Meter hoch und das Unebenheitsmuster ist wirklich nur aus der Nähe sichtbar.
Gregory Avery-Weir

Antworten:

6

Es sieht so aus, als ob Ihre Scheitelpunktnormalen durcheinander geraten könnten. Die Normalen jedes Scheitelpunkts sollten senkrecht zu seiner Fläche sein (parallel zu den Flächennormalen, die in Ihrem Drahtgitterbild angezeigt werden), und Sie benötigen separate Scheitelpunkte für die Ecken, einen für jede Fläche, die sich an einer Ecke trifft.

Adurdin
quelle
1
Um Scheitelpunktnormalen in Blender zu korrigieren, wählen Sie alle Scheitelpunkte (A) aus und verwenden Sie "Normalen außerhalb neu berechnen" (Strg + N).
Jon Purdy
adurdin: das hat perfekt funktioniert. Vielen Dank. Purdy: Ich hatte versucht, Normalen draußen neu zu berechnen. Das Problem ist, dass die Scheitelpunktnormalen (ziemlich vernünftig) der Durchschnitt der Gesichtsnormalen waren. Ich musste scharfe Kanten auswählen und dann Scheitelpunkte teilen, um jede zusammenhängende flache Oberfläche vom Rest des Modells zu trennen.
Gregory Avery-Weir
1
Ich denke, die Auswahl von Flat-Shading anstelle von Smooth in Blender (Mesh Tools) hätte ebenfalls funktioniert.
Bummzack
bummzack: Ich sehe diese Option unter keinem der Mesh Tools-Bedienfelder. Es gibt ein "Set Smooth" und ein "Set Solid" unter "Link" und "Materialien", aber es scheint nicht in "Einheit" zu übersetzen. Muss Blender-intern sein.
Gregory Avery-Weir
2

Das sieht nach einem normalen Scheitelpunktproblem aus. Ich habe Blender nicht verwendet. Ich bin mir nicht sicher, welche Optionen Sie haben, um die Normalen direkt auf der Scheitelpunktebene anzuzeigen / zu ändern.

Das erste, was ich zum Testen tun würde, ist, die Vorderseite vom Rest des Objekts abzubrechen und zu prüfen, ob es richtig leuchtet. Wenn das funktioniert, können Sie es einfach als 2 Teile exportieren, Vorder- und Rückseite als ein Objekt und dann Seitenteile als ein anderes.

wkerslake
quelle
Genau das war es. Blender kann keine Scheitelpunktnormalen ändern, daher musste ich die flachen Oberflächen in separate Teilnetze im selben Objekt trennen.
Gregory Avery-Weir
1

Ich weiß, dass dies ein alter Thread ist, aber ich bin darüber gestolpert, sodass möglicherweise jemand anderes von dieser Antwort profitieren kann: Das Problem ist: Sie versuchen, Normalen (glatte Schattierung) über einen Winkel von 90 ° zu interpolieren, was die meiste Zeit dazu führt Probleme.

Hierfür gibt es mehrere Lösungen: 1. Stellen Sie die Schattierung auf flach (T-Menü). 2. Wählen Sie alle Kanten mit einem Winkel> 50 aus (oder höher, spielen Sie ein bisschen herum) und drücken Sie STRG E -> Markieren Sie scharf. Unity kann diese Informationen lesen. Es wird die Vert teilen. Normalen an den markierten Kanten, anstatt zu versuchen, sie zu interpolieren. 3. Verwenden Sie einen Kantenaufteilungsmodifikator, um das Netz tatsächlich in dem von Ihnen angegebenen Winkel zu teilen (ich würde in diesem Fall den oberen empfehlen). 4. Verwenden Sie einen Abschrägungsmodifikator mit einer Tiefe von 2 oder höher. Ich würde diese Option empfehlen, sie macht das Netz etwas höher poly, aber auch realistischer. Markieren Sie entweder die Kanten, die abgeschrägt werden sollen, oder wählen Sie den Winkel als Begrenzungsmodus.

Frederik
quelle
0

Wenn Sie tatsächlich Lightmapping verwenden, verfügt Unity über eine Modellimporteinstellung zum Generieren von Lightmap-UVs, die wahrscheinlich Ihr Problem lösen würde.

Tetrad
quelle