Godot: UVが追加されると、SurfaceToolの法線は滑らかになりません

作成日 2016年08月13日  ·  3コメント  ·  ソース: godotengine/godot

Godot 2.1ベータ版および2.1安定版、Windows 1064ビットでテスト済み

SurfaceTooladd_smooth_group(true)メソッドを使用してサーフェスを生成する場合、頂点にUVを追加すると、滑らかな法線を取得できません。
UVが1つの頂点から別の頂点に増加していないときに特に発生することがわかりました。 したがって、サーフェスのすべてのクワッドに0から1までのUVがある場合、クワッドはハードフェース法線でレンダリングされます。
このため、私は自分で法線を生成することを余儀なくされています。

実装されたと思うので、バグかどうかはわかりません。 しかし、私が言ったように、その場合でも滑らかな法線を持つことが可能であるため、これを強化することができます。

再現:
SurfaceToolSmoothShading.zip
メインシーンを起動します。左側の生成されたサーフェスでUVが硬い面を持ち、右側の面はそうではなく、滑らかな面を持ち、両方とも滑らかなグループを持っていることを確認します。

bug confirmed core

最も参考になるコメント

それはまだ起こります:
SurfaceToolSmoothShading.zip

SurfaceToolは、頂点が共有されている場合にのみスムージングが発生する可能性があり、共有される頂点は等しい属性を持っている必要があると想定しているため、これが発生すると思います。 この場合、UVが異なるのは事実ですが、UVが異なる2つの頂点でスムージングは​​可能ですが、同じ値を持つ2つの法線が与えられます。

全てのコメント3件

こんにちは@Zylannコードで生成されたメッシュをスムーズにする正しい方法を探していたところ、これに遭遇しました。
私はgodot3.0.4を使用しており、add_smooth_groupをそのまま使用して、UVを使用して正しくレンダリングしています。
[編集]自分で修正する必要があります。問題はまだありますが、Zylannがコードで行ったように、UVがメッシュ全体に広がっている場合にのみ機能し、すべてのクワッドで繰り返された場合には機能しないことを指定する必要があります。

# 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あなた(または他の誰か)はまだGodot 3.2.1または3.2.2beta4でこのバグを再現できますか?

それはまだ起こります:
SurfaceToolSmoothShading.zip

SurfaceToolは、頂点が共有されている場合にのみスムージングが発生する可能性があり、共有される頂点は等しい属性を持っている必要があると想定しているため、これが発生すると思います。 この場合、UVが異なるのは事実ですが、UVが異なる2つの頂点でスムージングは​​可能ですが、同じ値を持つ2つの法線が与えられます。

このページは役に立ちましたか?
0 / 5 - 0 評価