Как предотвратить z-файтинг в OpenSCAD?
Z-fighting-это артефакт 3D-рендеринга копланарных поверхностей (т. е. треугольников, расположенных в одной плоскости и перекрывающих друг друга).
Это может произойти в режиме предварительного просмотра OpenSCAD при выполнении операции difference()
или union ()
. В случае разницы ()
артефакты рендеринга могут помешать заглянуть в отверстие в объекте. В режиме "компиляция и визуализация" в OpenSCAD нет проблем с z-борьбой. Но поскольку для визуализации объекта в этом режиме может потребоваться некоторое время, это не является практическим решением во время разработки.
Как лучше всего избежать z-боев?
Если ответ включает в себя изменения в моем коде OpenSCAD, я хотел бы видеть идиоматический ответ / установленное соглашение кодеров OpenSCAD, если оно существует.
@tanius, 👍12
1 ответ
Лучший ответ:
Общий совет в сообществе OpenSCAD заключается в том, чтобы "расширить ваши сокращения и внедрить ваши объединения" (источник). Артефакты рендеринга-это одно, а скорее просто раздражение; однако z-fighting также может вызывать неожиданные ошибки во время экспорта STL (до сих пор я сам этого не испытывал, просто где-то читал об этом).
Таким образом, вы должны очень незначительно изменить размеры своих объектов (0,01
мм работает нормально), чтобы:
- для
соединения ()
существует объем перекрытия между деталями - для
разницы ()
пересечение имеет объем как внутри, так и снаружи пересекаемой части
Теперь вы можете настроить как размер, так и положение ваших деталей, чтобы сохранить математически точные размеры для результирующей детали. Но я обнаружил, что для целей 3D-печати такая точность не стоит того, потому что она так сильно усложняет формулы.
Вместо этого я настраиваю положение или размер детали в зависимости от того, что проще в каждом случае. Мера в окончательной конструкции будет отклонена на 0,01 мм, что не имеет значения.
И я сохраняю смещение 0,01 мм в переменной под названием ничего
(где-то подобрал это и мне понравилось ...). Это делает расчеты интуитивно понятными.
Пример
Чтобы создать цилиндр и вырезать отверстие на половину его глубины, я бы сделал следующее:
//!OpenSCAD
nothing=0.01;
height=40;
difference(){
cylinder(h=height, r=20, center=true);
translate([0, 0, height/4 + nothing])
cylinder(h=height/2, r=15, center=true);
}
Теперь отверстие ничего=0,01
меньше половины цилиндра – это неточность, которую я принимаю.
(Примечание: Если у вас не установлен OpenSCAD, вы также можете попробовать приведенный выше код в Интернете, скопировав и вставив его в OpenJSCAD. Включите комментарий magic в первую строку, чтобы переключить его на синтаксис OpenSCAD.)
- Существует ли простой способ разделения моделей в OpenSCAD?
- OpenSCAD linear_extrude из многопутевого импорта svg
- .STEP/.F3D to .Файл SCAD?
- Как указать начало вращения в openscad
- Библиотека OpenSCAD для пустого пространства/отверстий
- OpenSCAD "not valid 2-manifold" полезная информация
- Рендер OpenSCAD (F6) завершается ошибкой "ERROR: CGAL error in CGAL_Nef_polyhedron3()"
- Создание "куска пирога" в OpenSCAD?
Ваш ответ - это тот, который я бы опубликовал для этого вопроса. Вы добавляете параметр "ничего", в то время как я использую "addabit = 0.1" для большинства действий z., @fred_dot_u
Это может улучшить генерацию STL. OpenSCAD имеет две системы рендеринга. Первый используется для быстрого отображения кода. Вторая намного медленнее и должна выполняться перед созданием STL. По моему опыту, первый подвержен этой проблеме со слоями нулевой толщины, но второй более точен и не подвержен этой проблеме. Ваш опыт может отличаться, но я не создавал плохие STL-файлы для изображений с этим артефактом отображения., @cmm
@cmm То же самое здесь, я также до сих пор видел z-fighting только в режиме предварительного просмотра. Проблема STL-это то, что я подхватил где-то еще. Я четко обозначил это различие в ответе сейчас., @tanius
Вы можете увеличить высоту объекта на *ничего*, чтобы получить идеальную деталь., @Cem Kalyoncu
Я также видел, что эта переменная называется "терпимость", что лично я нахожу менее забавным, но более описательным., @user31389
Я видел, как слово «eps» означает «эпсилон» — математический произвольно малый интервал, используемый для пределов и интегрирования., @Dave X