Godot: SurfaceTool normals tidak bisa mulus ketika UV ditambahkan

Dibuat pada 13 Agu 2016  ·  3Komentar  ·  Sumber: godotengine/godot

Diuji pada Godot 2.1 beta dan 2.1 stable, Windows 10 64 bit

Saat menghasilkan permukaan dengan SurfaceTool dan metode add_smooth_group(true) , tidak mungkin untuk mendapatkan normal yang mulus jika UV ditambahkan ke simpul.
Saya menemukan bahwa itu secara khusus terjadi ketika UV tidak meningkat dari satu titik ke titik lainnya. Jadi jika setiap segi empat permukaan memiliki UV dari 0 hingga 1, segi empat akan dirender dengan normal wajah yang keras.
Karena itu saya terpaksa membuat sendiri normal.

Tidak yakin apakah itu bug karena saya yakin itu diterapkan sehingga melakukan itu. Tapi seperti yang saya katakan, itu mungkin untuk memiliki normal yang mulus bahkan dalam kasus itu, jadi ini bisa ditingkatkan.

Repro:
SurfaceToolSmoothShading.zip
Luncurkan adegan utama, lihat permukaan yang dihasilkan di sebelah kiri dengan UV memiliki wajah yang keras, yang di sebelah kanan tidak dan memiliki wajah yang halus, sementara keduanya memiliki kelompok yang halus.

bug confirmed core

Komentar yang paling membantu

Itu masih terjadi:
SurfaceToolSmoothShading.zip

Saya percaya itu terjadi karena SurfaceTool mengasumsikan pemulusan hanya dapat terjadi jika simpul dibagikan, dan untuk dibagikan simpul harus memiliki atribut yang sama. Meskipun benar kasus ini membuat mereka memiliki UV yang berbeda, penghalusan masih mungkin dilakukan dengan dua simpul dengan UV yang berbeda, tetapi memberikan dua normal yang memiliki nilai yang sama.

Semua 3 komentar

HI @Zylann Saya sedang googling mencari cara yang benar untuk menghaluskan kode yang dihasilkan mesh dan saya menemukan ini.
Saya menggunakan godot 3.0.4 dan, menggunakan add_smooth_group seperti Anda, saya membuatnya dengan benar dirender, dengan UV.
[ sunting ] Saya harus mengoreksi diri saya sendiri, masalahnya masih ada, tetapi saya harus menentukan, seperti yang dilakukan Zylann dalam kode, bahwa itu hanya berfungsi jika UV tersebar di mesh, tetapi tidak ketika diulang untuk setiap quad:

# 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 Bisakah Anda (atau siapa pun) mereproduksi bug ini di Godot 3.2.1 atau 3.2.2beta4 ?

Itu masih terjadi:
SurfaceToolSmoothShading.zip

Saya percaya itu terjadi karena SurfaceTool mengasumsikan pemulusan hanya dapat terjadi jika simpul dibagikan, dan untuk dibagikan simpul harus memiliki atribut yang sama. Meskipun benar kasus ini membuat mereka memiliki UV yang berbeda, penghalusan masih mungkin dilakukan dengan dua simpul dengan UV yang berbeda, tetapi memberikan dua normal yang memiliki nilai yang sama.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat