Godot: SurfaceTool-Normalen können nicht glatt sein, wenn UVs hinzugefügt werden

Erstellt am 13. Aug. 2016  ·  3Kommentare  ·  Quelle: godotengine/godot

Getestet auf Godot 2.1 Beta und 2.1 Stable, Windows 10 64 Bit

Beim Generieren einer Fläche mit SurfaceTool und der Methode add_smooth_group(true) ist es unmöglich, glatte Normalen zu erhalten, wenn UVs zu Scheitelpunkten hinzugefügt werden.
Ich habe festgestellt, dass dies insbesondere dann passiert, wenn die UVs nicht von einem Scheitelpunkt zum anderen zunehmen. Wenn also jedes Quad einer Oberfläche UVs von 0 bis 1 hat, wird das Quad mit Hartflächennormalen gerendert.
Aus diesem Grund bin ich gezwungen, selbst Normalen zu erzeugen.

Ich bin mir nicht sicher, ob es ein Fehler ist, weil ich glaube, dass es implementiert wurde, also tut es das. Aber wie gesagt, es ist auch in diesem Fall möglich, glatte Normalen zu haben, sodass dies verbessert werden kann.

Repro:
SurfaceToolSmoothShading.zip
Starten Sie die Hauptszene, sehen Sie, dass die generierte Fläche links mit UVs harte Flächen hat, die rechte nicht und glatte Flächen, während beide eine glatte Gruppe haben.

bug confirmed core

Hilfreichster Kommentar

Es passiert immer noch:
SurfaceToolSmoothShading.zip

Ich glaube, es passiert, weil SurfaceTool davon ausgeht, dass die Glättung nur stattfinden kann, wenn Scheitelpunkte geteilt werden, und um geteilt zu werden Scheitelpunkte müssen gleiche Attribute haben. Obwohl es in diesem Fall zutrifft, dass sie unterschiedliche UV-Werte haben, sollte das Glätten mit zwei Scheitelpunkten mit unterschiedlichen UV-Werten immer noch möglich sein, aber zwei Normalen mit demselben Wert ergeben.

Alle 3 Kommentare

HI @Zylann Ich habe auf der Suche nach dem richtigen Weg
Ich verwende Godot 3.0.4 und mit add_smooth_group, wie Sie es sind, bekomme ich es mit UV korrekt gerendert.
[Bearbeiten] Ich muss mich korrigieren, das Problem ist immer noch da, aber ich muss wie Zylann im Code angeben, dass es nur funktioniert, wenn UV über das Mesh verteilt wird, aber nicht, wenn es für jedes Quad wiederholt wird:

# If UVs are spread, normals are smooth.
  var t00 = Vector2(p00.x, p00.z) / Vector2(sx,sy)
  var t10 = Vector2(p10.x, p10.z) / Vector2(sx,sy)
  var t11 = Vector2(p11.x, p11.z) / Vector2(sx,sy)
 var t01 = Vector2(p01.x, p01.z) / Vector2(sx,sy)

@Zylann Können Sie (oder jemand anderes) diesen Fehler in Godot 3.2.1 oder 3.2.2beta4 noch reproduzieren?

Es passiert immer noch:
SurfaceToolSmoothShading.zip

Ich glaube, es passiert, weil SurfaceTool davon ausgeht, dass die Glättung nur stattfinden kann, wenn Scheitelpunkte geteilt werden, und um geteilt zu werden Scheitelpunkte müssen gleiche Attribute haben. Obwohl es in diesem Fall zutrifft, dass sie unterschiedliche UV-Werte haben, sollte das Glätten mit zwei Scheitelpunkten mit unterschiedlichen UV-Werten immer noch möglich sein, aber zwei Normalen mit demselben Wert ergeben.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen