Godot 2.1ベータ版および2.1安定版、Windows 1064ビットでテスト済み
SurfaceTool
とadd_smooth_group(true)
メソッドを使用してサーフェスを生成する場合、頂点にUVを追加すると、滑らかな法線を取得できません。
UVが1つの頂点から別の頂点に増加していないときに特に発生することがわかりました。 したがって、サーフェスのすべてのクワッドに0から1までのUVがある場合、クワッドはハードフェース法線でレンダリングされます。
このため、私は自分で法線を生成することを余儀なくされています。
実装されたと思うので、バグかどうかはわかりません。 しかし、私が言ったように、その場合でも滑らかな法線を持つことが可能であるため、これを強化することができます。
再現:
SurfaceToolSmoothShading.zip
メインシーンを起動します。左側の生成されたサーフェスでUVが硬い面を持ち、右側の面はそうではなく、滑らかな面を持ち、両方とも滑らかなグループを持っていることを確認します。
こんにちは@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つの法線が与えられます。
最も参考になるコメント
それはまだ起こります:
SurfaceToolSmoothShading.zip
SurfaceTool
は、頂点が共有されている場合にのみスムージングが発生する可能性があり、共有される頂点は等しい属性を持っている必要があると想定しているため、これが発生すると思います。 この場合、UVが異なるのは事実ですが、UVが異なる2つの頂点でスムージングは可能ですが、同じ値を持つ2つの法線が与えられます。