Протестировано на Godot 2.1 beta и 2.1 стабильной, Windows 10 64 бит
При создании поверхности с помощью SurfaceTool
и метода add_smooth_group(true)
невозможно получить гладкие нормали, если к вершинам добавлены UV.
Я обнаружил, что это происходит, когда UV-развертка не увеличивается от одной вершины к другой. Таким образом, если каждый четырехугольник поверхности имеет UV-развертку от 0 до 1, четырехугольник будет визуализирован с нормалями твердых поверхностей.
Из-за этого я вынужден сам генерировать нормали.
Не уверен, что это ошибка, потому что я считаю, что она была реализована, поэтому она это делает. Но, как я уже сказал, даже в этом случае можно получить гладкие нормали, так что это можно улучшить.
Репродукция:
SurfaceToolSmoothShading.zip
Запустите основную сцену, увидите, что сгенерированная поверхность слева с UV-разверткой имеет твердые грани, правая - нет и имеет гладкие грани, в то время как обе имеют гладкую группу.
Привет @Zylann. Я
Я использую godot 3.0.4 и, используя add_smooth_group, как вы, я получаю его правильно с UV.
[править] Я должен исправить себя, проблема все еще существует, но я должен указать, как это сделал Зиланн в коде, что это работает, только если 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, но с получением двух нормалей, имеющих одинаковое значение.
Самый полезный комментарий
Еще бывает:
SurfaceToolSmoothShading.zip
Я считаю, что это происходит потому, что
SurfaceTool
предполагает, что сглаживание может происходить только в том случае, если вершины являются общими, и чтобы они были общими, вершины должны иметь одинаковые атрибуты. Хотя это правда, что в этом случае они имеют разные UV-развертки, сглаживание должно быть возможно с двумя вершинами с разными UV, но с получением двух нормалей, имеющих одинаковое значение.