Godot: 添加 UV 时 SurfaceTool 法线无法平滑

创建于 2016-08-13  ·  3评论  ·  资料来源: godotengine/godot

在 Godot 2.1 beta 和 2.1 stable、Windows 10 64 位上测试

使用SurfaceTooladd_smooth_group(true)方法生成曲面时,如果将 UV 添加到顶点,则不可能获得平滑的法线。
我发现当 UV 没有从一个顶点增加到另一个顶点时,它会特别发生。 因此,如果曲面的每个四边形都有从 0 到 1 的 UV,则四边形将使用硬面法线进行渲染。
因此,我被迫自己生成法线。

不确定这是否是一个错误,因为我相信它已实现,因此它会这样做。 但正如我所说,即使在这种情况下也可能具有平滑的法线,因此可以增强这一点。

复述:
SurfaceToolSmoothShading.zip
启动主场景,看到左边的UVs生成的表面有硬面,右边没有,有光滑的面,而两者都有一个smooth group。

bug confirmed core

最有用的评论

它仍然发生:
SurfaceToolSmoothShading.zip

我相信它会发生,因为SurfaceTool假设平滑只能在共享顶点时发生,并且要共享的顶点必须具有相同的属性。 虽然这种情况确实使它们具有不同的 UV,但仍然可以使用具有不同 UV 的两个顶点进行平滑,但提供具有相同值的两个法线。

所有3条评论

@Zylann我正在谷歌搜索以寻找平滑代码生成的网格的正确方法,我偶然发现了这一点。
我正在使用 godot 3.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 的两个顶点进行平滑,但提供具有相同值的两个法线。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

ndee85 picture ndee85  ·  3评论

mefihl picture mefihl  ·  3评论

bojidar-bg picture bojidar-bg  ·  3评论

testman42 picture testman42  ·  3评论

EdwardAngeles picture EdwardAngeles  ·  3评论