«Ненормальные» нормали

Подписаться на 3Dtoday
Kosta3D
Идет загрузка
Загрузка
27.09.15
22807
24
печатает на Ultimaker 2
3D-моделирование
25
Типовой диалог с заказчиком, который принес «готовую к печати» модель.
- Вы говорите, что подготовили 3D модель для печати? Но у Вас тут нормали перевернутые…
- Нормали? Какие «нормали»? Вы о чем?

Если Вы знаете, что такое «нормали», то можете дальше не читать – эта статья не для Вас.

Итак, вспоминаем.
Плоскость однозначно определяется тремя точками. Нормаль – это вектор, перпендикулярный плоскости. Направление вектора определяется по «правилу буравчика» (оно же «правило винта», «правило штопора», «правило правой руки» и т.д. – кому что ближе и понятнее).
PREVIEW
Иными словами, если смотреть на треугольник и «обходить» его вершины против часовой стрелки, то вектор будет направлен к нам, а видимая поверхность треугольника называется лицевой. Если обходить вершины треугольника по часовой стрелке, то вектор будет направлен от нас, видимая сторона называется оборотной или изнанкой.

Файлы формата stl описывают твердые тела, поверхность которых является набором треугольников, у которых нормали должны быть направлены наружу - из тела модели
600x200-Sphera-Kub.png
Очень много моделей, которые приносят дизайнеры, непригодны для печати на 3D принтерах из-за «легкомысленного» отношения к нормалям. К сожалению, это заблуждение присуще и начинающим дизайнерам, и дизайнерам, которые уже много лет создают 3D модели, но не сталкивались с 3D печатью на принтерах, а потому у них не было острой необходимости задумываться о нормалях и перевернутых гранях.Далеко не все пакеты 3D моделирования имеют удобные средства отслеживания правильности расположения нормалей и перевернутые грани довольно трудно разглядеть. Вот, например, картинка из SketchUp. Перевернутая грань чуть темнее, чем лицевая (рис. слева).
600x200-Sketchup.png
Вам плохо видно? Мне тоже. Ситуацию можно улучшить, изменив цвет отображения перевернутых граней в настройках SketchUp. Теперь лучше? (рис. справа)Ошибки, возникающие от перевернутых граней, проявляются при соединении/вычитании объектов. На рисунке слева приведены два объекта с разной ориентацией граней (у серого куба правильно – нормали наружу, у желтого неправильно – внутрь). Соединим два куба вместе с небольшим перекрытием. Получился параллелепипед (рисунок справа), который на экране выглядит правильным.
600x200-2-Kuba.png
Давайте попробуем его напечатать на принтере. Как видим, объект «развалился» на две части именно из-за перевернутых граней.
600x200-2-Kuba-Cura.png
Предусмотреть все случаи, когда могут возникать перевернутые нормали (перевернутые грани) невозможно. Но наиболее часто источниками появления перевернутых граней являются:
  • Повороты фигур и последующее выдавливание, а также очередность таких операций
  • Использование разных методов создания объектов в одной модели
  • Ручное «заполнение дырок», образующихся на поверхности на разных этапах моделирования.
Рассмотрим эти случаи подробнее.

Повороты фигур и выдавливание
Создадим модель «условной» арки. Поскольку арка должна получиться симметричной относительно вертикальной оси, то логично нарисовать одну половину, а вторую получить зеркальным отражением первой. Затем соединить обе части.
600x200-Arka-1.png
На рис. A нарисована двумерная фигура для левой части арки. Далее копируем фигуру, зеркально отображаем ее и присоединяем к первой с небольшим перекрытием (рис. B). Обратите внимание: после зеркального поворота у желтой фигуры нормали повернуты в другую сторону! (рис. C). Если теперь выдавить объединенную фигуру на нужную толщину, то левая и правая части будут иметь нормали, направленные в разные стороны - у левой части внутрь тела, а у правой наружу (рис. D).
600x200-Arka-2.png
Внешне модель будет выглядеть абсолютно корректно (рис. E), а принтер напечатает ее вот так (рис. F).
600x200-Arka-Cura.png
Эту ошибку можно было бы избежать следующими способами:
  • После зеркального отображения сначала перевернуть нормали у одной из фигур, а потом выдавить
  • Выдавить до объединения отдельно левую и правую (зеркальную) фигуры и получить два объекта. Затем выделить левый объект и перевернуть нормали наружу, после чего соединить два объекта
  • Не создавать зеркальную фигуру, а выдавить левую фигуру и получить объект. Потом сделать копирование и зеркальный поворот объекта, а затем соединить оба объекта
Разные методы создания объектов
Большинство пакетов 3D моделирования имеют несколько методов создания моделей. Один из них – это проектирование из готовых базовых объектов типа параллелепипед, цилиндр, сфера, конус, призма, тор и т.д. Как правило, при генерации таких объектов разработчики позаботились о том, чтобы нормали у таких объектов были направлены правильно, наружу (рис. слева).
600x200-Primitiv.png
Другой метод – это создание двумерных фигур тем или иным способом и последующее выдавливание по третьей оси или по заданному пути для получения трехмерного объекта (рис. справа). В этом случае направление нормалей зависит и от алгоритмов работы пакета и от последовательности Ваших действий. Например, в нашем пакете при выдавливании фигуры по заданному пути нормали у тела направлены внутрь, а у созданной торцевой грани - наружу.
Если в модели используются оба метода проектирования (а так чаще всего и бывает), то нужно очень внимательно следить за направлением нормалей у отдельных объектов до их объединения.

Ручное «заращивание» дырок поверхности
В различных ситуациях на поверхности модели могут появляться дырки, которые потом необходимо «заращивать» вручную. Такое заращивание также является частым источником ошибок и нужно следить за тем, чтобы направления нормалей вновь созданных граней совпадали с направлением других граней модели. Как правило, если редактирование осуществляется с лицевой стороны поверхности, в соответствии с «правилом буравчика» узлы закрываемой дырки нужно обходить против часовой стрелки.

Существует много программ, которые позволяют находить и исправлять перевернутые грани. Например, netfabb, meshlab, meshmixer и другие. Некоторые программы моделирования имеют встроенные средства проверки поверхности перед экспортом в stl файл. Но для сложных поверхностей алгоритмы этих программ не всегда могут найти и исправить все перевернутые нормали. Поэтому лучше следить за правильным расположением нормалей с самого начала при создании объектов. Ведь все знают, что запутать веревку можно за несколько секунд, а распутывать её потом можно часами.

Если Вы хотите сами подготовить модель для печати на 3D принтере, то рекомендуем установить у себя на компьютере любую программу для 3D-печати, например, Cura (последняя стабильная версия на момент написания статьи v.15.04). Загрузите в нее Вашу модель и посмотрите послойно, как будет печататься Ваша «полностью подготовленная к печати» модель.

И если Ваш принтер вместо прямоугольной рамки (рис. слева) собирается печатать вот такую ерунду (рис. справа),
600x200-End.png
не спешите кричать, что компьютер «глючит» или что принтер «сошёл с ума». Посмотрите внимательно – может у Вашей модели «ненормальные» нормали?

Желаем успехов!
А.М.
Коста 3D

Подписаться на 3Dtoday
25
Комментарии к статье

Комментарии

27.09.15 в 16:37
3
Полностью подпишусь только пару моментов -
Нормальные 3д моделеры про нормали знают. Это влияет на рендер и отражательные способности.
Иногда все делаешь правильно но часть софтин при экспорте нормали переворачивают
27.09.15 в 16:58
0
А еще некоторые слайсеры могут аккуратно нарезать даже кривую stl-ку, а некоторые - нет :evil:
27.09.15 в 19:37
0
Если нормали после экспорта не на месте - ответственность рано на софтины перекладывать...
У меня на памяти много модулей экспорта/импорта писались криворукожопыми студентами - которые слово нормаль начинают понимать ток на последних курсах когда им это вдолбят в головы...

т.е. чисто теоретически можно попасть на ситуацию когда экспорт именно в нужный формат написан некачественно...
27.09.15 в 17:29
3
В начале пути сам с этим столкнулся и долго думал, почему модель криво сласится :) теперь всегда проверяю нормали в редакторе. К примеру Кура более терпима к моделям, а вот Slic3r очень привередлив.
27.09.15 в 19:41
1
С точки зрения нарезки нормали только помогают определить какую зону нужно делать заливкой а какая зона является внешним пространством от модели, не все слайсеры имеют глобальное представление о модели в целом - по этому и возникают такие косяки...
Чем умнее слайсер тем более подробную информацию он имеет при построении каждого слоя...

Сложно сказать - являются ли опенсорсные слайсеры типа сликра или куры - действительно произведениями инженерной мысли или просто велосипедом с кучей заплаток, только чтобы не развалить основную логику...
27.09.15 в 20:06
1
Я так для себя не обнаружил идеального Слайсера, что хорошо одному - другому смерти подобно :)
28.09.15 в 01:04
2
Дельная статья! Спасибо! Хоть пока и не сталкивался с такими проблемами, - моделю в солиде - но теперь буду знать если что )
Правда даже не представляю где там в солиде это можно посмотреть... )
28.09.15 в 02:27
2
Так после Солида таких косяков вроде и не бывает. По крайней мере все модели, которые из Солида мне приносили в печать, годные были.
А вот после SketchUP или 3DMax там иногда после слайсинга такое "решето" вместо модели получается :)
14.12.17 в 23:42
1
За скетчапом только глаз да глаз... на секунду зазевался, а он тебе уже шарик наизнанку вывернул и сидит довольный
17.12.17 в 05:42
0
после SW иногда бывает - в материалайз проверяю, попадаются пересекающиеся треугольники и двойные поверхности.
хотя их быть не должно в принципе - проблема в модуле экспорта в STL
28.09.15 в 08:50
1
Спасибо за полезную информацию, моделю в компасе, тоже не сталкивался с таким явлением.
28.09.15 в 08:51
1
Спасибо! Полезно. Теперь как с этим бороться, пожалуйста)))
28.09.15 в 14:26
0
в 123D Design пока тоже не сталкивался с такими проблемами.. хотя ничего сложного не делал еще)
28.09.15 в 20:28
0
Возможно для кого то и гениальна эта статья, но всё что я создавал в Rhinoceros 4 и Rhinoceros 5 ни чего подобного не происходило. Даже для поверхностей, которые отображаются с нормалями хоть во внутрь хоть наружу. STL файл в рино отображается как сетка и отображения нормалей отсутствует как таковое понятие для сетки, по мне это не корректность отдельных 3d программ при преобразовании детали в STL.
29.09.15 в 00:21
3
Я не работал в Rhino, но засомневался, что там вообще нет понятия нормали для полигональной сетки. Решил поискать и вот нашел в help для Rhino4:

Flip (Перевернуть)
Переворачивает направление нормалей объект.
Шаги:
  • Выделите объекты.
    В командной строке будет сообщено, у скольких объектов перевернуто.
Примечания
  • Закрытые составные поверхности не могут иметь направления нормалей поверхности, обращенные внутрь.
  • Направления кривых и поверхностей влияет на результат многих команд создания поверхностей и Булевых операций. Если в результате Булевой операции Вы получаете неожиданные результаты, как например, объединение вместо вычитания, попробуйте перевернуть направление нормалей одной или обеих поверхностей.


Панель Инструментов Analyze (Анализ) > Flip Direction (Перевернуть Направление) (Щелчок правой кнопкой мыши)
Панель Инструментов Main2 (Основная 2) > Flip Direction (Перевернуть Направление) (Щелчок правой кнопкой мыши)
Панель Инструментов Mesh (Полигональная Сетка) > Flip Mesh Normals (Перевернуть Нормали Полигональной Сетки ) (Щелчок правой кнопкой мыши)
Панель Инструментов STL Tools (Инструменты для Стереолитографии) > Flip Mesh Normals (Перевернуть Нормали Полигональной Сетки ) (Щелчок правой кнопкой мыши)

В Меню отсутствует
Также есть команда Dir показать/скрыть нормали

Кроме того есть куча средств для исправления нормалей

Составные поверхности или полигональные сетки могут иметь несогласующуюся ориентацию граней.
Используйте команду Dir (Направление) для отображения нормалей граней. У должным образом ориентированного твердого тела нормали будут указывать наружу.
Эта полигональная сетка имеет несогласующиеся нормали.

Для изменения нормалей на некоторых гранях составной поверхности
  1. Используйте команду Explode (Разорвать) или команду ExtractSrf (Извлечь Поверхность) для изоляции проблемных граней.
  2. Используйте команду Dir (Направление) на индивидуальных гранях для ориентирования нормалей должным образом.
  3. Используйте команду Join (Объединить) для восстановления составной поверхности.
Для изменения нормалей на неориентированной полигональной сетке
Исправленная полигональная сетка с согласованными нормалями, обращенными наружу.
29.09.15 в 06:09
0
Примечания
Закрытые составные поверхности не могут иметь направления нормалей поверхности, обращенные внутрь.
А я про что говорил? Вы что, при 3d печати используете деталь с открытой поверхностью?
Для эксперимента, создал рамку, разбил на поверхности, направления нормалей во внутрь, объединил, преобразовал. В stl всё прекрасно отображается в слайсере и не в одном, значит это проблема отдельных 3d программ но не для Rhinoceros.
29.09.15 в 14:33
1
Если все внутрь, то слайсеры обычно для простых объектов правильно понимают. А вы попробуйте часть внутрь, а часть наружу и объединить. Вот тогда и должно получиться то, что на последнем рисунке.
30.09.15 в 12:15
1
Рино очень коварная в отношении нормалей программа, нужно в настройках цветом обозначать перевернутые плоскости, я обозначаю красным цветом и называю такие места мясом наружу.
30.09.15 в 11:55
1
В статье забыли написать важный момент - длина вектора нормали равна единице.
30.09.15 в 19:21
1
Абсолютно правильно и полностью согласен! Но не "забыл", а просто "умолчал", ибо этот факт, на мой взгляд, не имеет особого значения в контексте данной статьи. :)
30.09.15 в 12:21
0
Немного непонятно о чем статья, о том что как плохо когда клиент приходит с моделью и заказывает выращивание в полимере не проверив на ошибки 3d файл? Клиент и не обязан вылечивать модель в Мэджиксе, это задача оператора принтера. Задача организации занимающейся 3d принтингом проверить модель перед запуском, вылечить ошибки и выдать готовую модель.
30.09.15 в 20:29
4
Клиент и не обязан вылечивать модель...
Конечно, не обязан. Проблема в другом. Заказчик приносит по его мнению "подготовленную для печати модель" и уверен, что через пару часов уйдет с напечатанной "штуковиной". И тут выясняется, что ее еще надо "лечить" часов эдак 5, а то и больше. Ну, эту работу он должен оплатить? Должен.
Хуже того: в сложных случаях бывает, что вообще вылечить невозможно или проще нарисовать заново, чем лечить это "чудо".
А статья была написана для тех, кто не знает, что такое нормали и как перевернутые грани влияют на результат печати. Нам показалось, что это знание кому-то будет полезно. И еще статья о том, что эти ошибки проще и дешевле избегать при создании объектов модели, чем потом распутывать и лечить собранную модель. Вот, как-то так...
15.11.16 в 00:21
0
Поддерживаю полностью, даже хочу подчеркнуть модель для 3d печати обязана быть с правильными нормалями, модель с неправильными нормалями моделью для 3d печати не является.
12.10.15 в 15:08
0
В blander если не знать о такой штуке то можно крупно накосячить, учитывая что он обычно не показывает куда повёрнута грань. Обычно это происходит даже не при экструдировании а при создании этой самой грани из точек или рёбер.

Для написания комментариев, пожалуйста, авторизуйтесь.

Читайте в блогах

Сборка Creality CR-10S

Тест на излом прутка PLA, ABS, SBS, HIPS и PET-G

Самодельный 3D принтер из CD/DVD приводов

Калибровка Anycubic Photon не по феншую

3D Print Expo. Впечатления новичка.

Форк Fribot Helix: H-Bot или CоreXY, все оси на MGN12, область печати 300х200х300