Testé sur Godot 2.1 beta et 2.1 stable, Windows 10 64 bits
Lors de la génération d'une surface avec SurfaceTool
et la méthode add_smooth_group(true)
, il est impossible d'obtenir des normales lisses si des UV sont ajoutés aux sommets.
J'ai trouvé que cela se produit spécifiquement lorsque les UV n'augmentent pas d'un sommet à un autre. Donc, si chaque quad d'une surface a des UV allant de 0 à 1, le quad sera rendu avec des normales de faces dures.
À cause de cela, je suis obligé de générer moi-même des normales.
Je ne sais pas si c'est un bogue parce que je crois qu'il a été implémenté, donc il le fait. Mais comme je l'ai dit, il est possible d'avoir des normales lisses même dans ce cas, donc cela peut être amélioré.
Reproduction :
SurfaceToolSmoothShading.zip
Lancez la scène principale, voyez la surface générée à gauche avec les UV a des faces dures, celle de droite n'en a pas et a des faces lisses, tandis que les deux ont un groupe lisse.
HI @Zylann Je
J'utilise godot 3.0.4 et, en utilisant add_smooth_group comme vous l'êtes, je le restitue correctement, avec UV.
[edit] Je dois me corriger, le problème est toujours là, mais je dois préciser, comme Zylann l'a fait dans le code, que cela ne fonctionne que si les UV sont répartis sur le maillage, mais pas lorsqu'ils sont répétés pour chaque 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 Pouvez-vous (ou quelqu'un d'autre) toujours reproduire ce bug dans Godot 3.2.1 ou 3.2.2beta4 ?
ça arrive encore :
SurfaceToolSmoothShading.zip
Je crois que cela se produit parce que SurfaceTool
suppose que le lissage ne peut se produire que si les sommets sont partagés, et pour être partagés, les sommets doivent avoir des attributs égaux. S'il est vrai que ce cas leur donne des UV différents, le lissage devrait toujours être possible avec deux sommets avec des UV différents, mais donnant deux normales ayant la même valeur.
Commentaire le plus utile
ça arrive encore :
SurfaceToolSmoothShading.zip
Je crois que cela se produit parce que
SurfaceTool
suppose que le lissage ne peut se produire que si les sommets sont partagés, et pour être partagés, les sommets doivent avoir des attributs égaux. S'il est vrai que ce cas leur donne des UV différents, le lissage devrait toujours être possible avec deux sommets avec des UV différents, mais donnant deux normales ayant la même valeur.