Почему нормальный вектор необходим для файлов STL?
STL - самый популярный формат файлов 3d-моделей для 3d-печати. Он записывает треугольные поверхности, которые составляют 3d-форму.
Я прочитал спецификацию формата файла STL. Это довольно простой формат. Каждый треугольник представлен 12 числами с плавающей точкой. Первые 3 определяют вектор нормали, а следующие 9 определяют три вершины. Но вот один вопрос. Трех вершин достаточно, чтобы определить треугольник. Вектор нормали можно вычислить, взяв перекрестное произведение двух векторов (каждый указывает от вершины к другой).
Я знаю, что нормальный вектор может быть полезен при рендеринге, и, включив нормальный вектор, программе не нужно вычислять нормальные векторы каждый раз, когда она загружает одну и ту же модель. Но мне интересно, что произойдет, если программное обеспечение для создания преднамеренно включает неправильные нормальные векторы? Будет ли это давать неправильные результаты в программном обеспечении рендеринга?
С другой стороны, 3 вершины говорят все о треугольнике. Включение нормальных векторов допустит логические конфликты в информации и увеличит размер файла на 33%. Нормальные векторы могут быть вычислены программным обеспечением рендеринга за разумное количество времени, если это необходимо. Так почему формат должен включать это? Формат был создан в 1987 году для стереолитографической 3D-печати. Было ли тогда вычисление нормальных векторов дорогостоящим для компьютеров?
Я читал в ветке, что Autodesk Meshmixer игнорирует нормальный вектор и треугольник графа в соответствии с вершинами. Неправильный вектор нормали, кажется, не меняет результат. Почему для файлов стереолитографии (.STL) требуется, чтобы каждый треугольник имел нормальный вектор?
1 ответ
По крайней мере, при использовании Cura для нарезки модели направление нормали поверхности может иметь значение. Я регулярно сталкиваюсь с STL-файлами, которые выглядят просто как находящиеся при визуализации как сплошные объекты в любом средстве просмотра, но поскольку некоторые грани имеют неправильное направление нормали поверхности, слайсер "думает", что область (обычно вогнутая), которая должна быть пустой, является часть внутренней части, и слайсер создает "верхний слой", покрывающий детали вогнутой области. (И это было с STL, экспортированным из файла Meshmixer, который был импортирован из некоторого источника SketchUp).
FWIW, Meshmixer имеет инструмент FlipSurfaceNormals, чтобы помочь справиться с этим.