Вы скармливаете нейросети снимок фигурки, и через несколько минут на экране уже крутится аккуратная 3D‑модель. Всё на месте, даже надпись на груди. Скачиваете файл, открываете слайсер, а он первым делом интересуется, не в метрах ли вы случайно сделали эту красоту. А в файле она размером с маковое зерно.
И это самый безобидный дефект. Почти у каждой второй модели слайсер показывает значок предупреждения. А о некоторых дефектах он прямо не говорит: на превью всё выглядит идеально, а в файле ступни робота висят в воздухе отдельно от ног.
Меня зовут Артём Кузнецов, я AI/ML‑инженер и CTO стартапа, который занимается AI‑технологиями в области 3D‑печати.
Ниже — откуда берутся эти дефекты, если заглянуть под капот генераторов, и как их определять за пару минут, пока стол принтера нагревается. Разбор идёт на уровне сетки и с кодом, так что может пригодиться и тем, кто встраивает генерацию 3D в свой софт.
Тестовый набор: четыре картинки и пять нейросетей
Чтобы не делать выводы по одному случайному примеру, мы собрали небольшой тестовый набор. Каждая картинка в нём проверяет одну известную слабость генераторов, поэтому по результату сразу видно, на чём сломалась модель.
Картинки нарисовала нейросеть FLUX.1 [schnell] по коротким описаниям: так проще получить чистый фон, ровный свет и ровно ту особенность, которую хотим проверить. Это не фото, поэтому дальше я называю их картинками. Для генераторов это лёгкий режим: на снимке с телефона добавятся фон, тени и перспектива.

Почему именно эти четыре:
Картинка | Что в ней трудного | Чем это грозит при печати |
|---|---|---|
Робот | наплечники, отделённые от корпуса, тонкая антенна, раскрытая клешня | генератор может оставить детали отдельными кусками, потерять антенну или склеить пальцы клешни |
Кружка | сквозная ручка и пустота внутри | ручка должна остаться сквозной, а не превратиться во вмятину, а в пустоте может завестись мусор |
Очки | оправа и дужки толщиной с проволоку | тонкое проваливается сквозь сетку генератора или слипается с соседним |
Дракон | перепонки крыльев, шипы на спине, длинный хвост | тонкие стенки и острые кончики выходят тоньше линии сопла или пропадают |
Генераторов взяли пять, и форму все они строят по‑разному. Всех вызывали через API:
TripoSR (Stability AI и Tripo, 2024) — открытая модель: поле на трёх плоскостях (triplane), поверхность строит marching cubes;
TRELLIS (Microsoft) — открытая модель: скрытое представление на разреженной воксельной сетке, поверхность строит FlexiCubes;
TRELLIS.2 (Microsoft) — его свежая версия с другим представлением формы, без поля;
SAM 3D Objects (Meta) — открытая модель, которая восстанавливает отдельные объекты сцены по одной картинке;
Hunyuan3D 3.1 (Tencent) — закрытый сервис, устройство которого не раскрыто.
Как устройство генератора сказывается на дефектах, подробно разберу во второй статье.
Все двадцать моделей мы скачали как есть, без доработки, и проверили по тем же правилам, по которым Bambu Studio решает, показывать ли значок предупреждения (эти правила разобраны ниже). Девять не прошли.

Сложнее всего оказались очки: у трёх генераторов из пяти тонкая оправа либо порвалась, либо слиплась. Кружку, робота и дракона испортили по два генератора, и каждый раз это TripoSR и TRELLIS.2. По генераторам картина такая:
Генератор | Не прошли проверку | Самый тяжёлый случай |
|---|---|---|
TripoSR | 4 из 4 | кружка: 93 отдельные части, 612 открытых рёбер |
TRELLIS | 1 из 4 | очки: одна «защемлённая» вершина |
TRELLIS.2 | 4 из 4 | робот: 3163 ребра, на которых сходится больше двух треугольников, 113 частей |
SAM 3D Objects | 0 из 4 | ошибок нет, но в каждом файле россыпь деталей: робот — 23, кружка — 13, дракон — 12 |
Hunyuan3D 3.1 (API) | 0 из 4 | чисто |
Генерации от 6 августа 2026 года, файлы без обработки.
Дальше в примерах в основном робот: на нём видны почти все дефекты.
Как нейросеть достраивает невидимое
Первым я открыл в Bambu Studio как раз этого робота и не сразу понял, почему на столе ничего нет.
На картинке нет третьего измерения. Обратную сторону фигурки нейросеть додумывает по тому, что видела при обучении, и выглядит это вполне убедительно.
Устроены генераторы по‑разному, но большинство строит форму через поле. Для каждой точки пространства нейросеть решает, внутри объекта эта точка или снаружи, а некоторые заодно оценивают расстояние до поверхности. Спрашивают её не обо всех точках подряд, а только об узлах трёхмерной сетки.
Потом по границе между «внутри» и «снаружи» натягивают поверхность из треугольников. Чаще всего это делает marching cubes: алгоритму почти сорок лет, и его потомки работают до сих пор.
Первая проблема в том, что сетка работает как сито. Всё, что тоньше шага ячейки, либо проваливается, либо слипается с соседями.

Вторая проблема в обучении. Многие генераторы учились по плоским картинкам: готовую модель рендерят под разными углами и сравнивают с эталоном. Если у объекта есть дыра, которую не видно ни с одного ракурса, такое обучение её не заметит.
Чего ждёт слайсер
Для печати принтеру нужен герметичный объём, который можно заполнять пластиком слой за слоем. Отсюда жёсткие требования к геометрии файла:
непрерывная оболочка без дыр и щелей;
каждое ребро принадлежит ровно двум треугольникам;
нормали всех граней развёрнуты наружу;
стенки не тоньше двух диаметров сопла (при стандартном сопле 0,4 мм это 0,8 мм);
модель стоит на столе одним целым телом.
Например, Bambu Studio показывает значок предупреждения в списке объектов, если нарушено одно из первых трёх условий или если ему пришлось самому чинить сетку при загрузке. Это видно в его исходниках (TriangleMesh.hpp и GUI_ObjectList.cpp, версия 2.8.4):
// src/libslic3r/TriangleMesh.hpp
bool manifold() const { return non_manifold_edges == 0 && non_manifold_vertices == 0; }
bool has_any_issue() const { return !manifold() || has_open_edges() || has_reversed_faces; }
// src/slic3r/GUI/GUI_ObjectList.cpp
return (stats.has_any_issue() || stats.repaired()) ? "obj_warning" : "";Значок загорается, если в сетке есть рёбра, где сходится больше двух треугольников, «защемлённые» вершины, открытые рёбра или вывернутые грани, либо если слайсер что‑то поправил сам при загрузке (repaired()). А вот про размер, тонкие стенки или висящие элементы значок ничего не скажет.
Пять дефектов на примерах
1. Робот размером с маковое зерно
У всех двадцати моделей набора наибольший размер оказался от 0,85 до 1,38 единицы. Единиц измерения в формате STL нет вообще, там хранятся только числа. Слайсер по умолчанию считает их миллиметрами, и робот получается высотой около миллиметра.
Слайсеры пытаются это исправить. Если объём модели микроскопический, слайсер пересчитывает размер, решив, что файл задан в дюймах или метрах. Но срабатывает это по‑разному: часть моделей превращается в фигурки ростом 2,5 см, а некоторые (например, робот от TRELLIS.2) вдруг вырастают до метра.
Угадывает Bambu Studio по объёму модели. В исходниках (Model.cpp) это две константы:
static constexpr const double volume_threshold_inches = 8.0;
static constexpr const double volume_threshold_meters = 0.008;Объём меньше 8 мм³ — модель считается дюймовой и увеличивается в 25,4 раза, меньше 0,008 мм³ — метровой и увеличивается в 1000 раз. У тринадцати моделей набора объём попал в «дюймовый» диапазон, у семи — в «метровый».

Нейросеть тут не виновата: по одной картинке не угадать, перед нами статуэтка или памятник. Генератор работает в своих координатах и вписывает объект в куб со стороной около единицы. Лечится это просто: задайте реальный размер по любой оси с сохранением пропорций.
2. Кружка из 93 разрозненных фрагментов
Снаружи кружка от TripoSR выглядит вполне прилично. Но если открыть её в редакторе сетки, обнаружится 93 изолированные детали: сама кружка и ещё 92 мелких осколка внутри неё.
Ни один из этих кусочков не касается стенок, они висят в пустоте. Если высота кружки 8 см, паразитные фрагменты — около миллиметра. Слайсер честно попытается напечатать всё, что окажется крупнее диаметра сопла.

Причина — шум в поле. В пустоте внутри кружки нейросеть время от времени ошибается и отвечает «внутри», а marching cubes аккуратно обтягивает каждую такую ошибку замкнутым пузырём.
Кроме того, в модели 612 открытых рёбер. Больше половины из них — зазоры между треугольниками меньше миллионной доли размера модели: глазу они незаметны, а для слайсера это дыры в геометрии. Остальное — настоящие дыры.
3. Рёбра на четыре треугольника (non‑manifold)
У робота от TRELLIS.2 больше трёх тысяч рёбер, на которых сходятся сразу четыре треугольника вместо двух. Bambu Studio помечает их как ошибку: non‑manifold edges.

Такой дефект возникает на крутых изгибах и стыках деталей. У генераторов, которые строят форму по полю, он появляется, когда соседние элементы сближаются сильнее, чем позволяет шаг сетки. TRELLIS.2 устроен иначе: по описанию модели, его представление формы обходится без поля и нарочно допускает такие рёбра.
Старый TRELLIS на том же роботе выдал чистую сетку, а новая версия, научившись лучше передавать сложные формы, испортила геометрию.
4. Ступни отдельно от ног
У того же многострадального робота ступни отсоединены от ног. Если робот высотой 8 см, они висят в 0,5–0,7 мм от ног и на 0,15 мм не достают до стола. Так же отдельно висит шарик на конце антенны, а рядом с ним в пустоте ещё один элемент.

Слайсер не считает несколько тел в одном файле ошибкой: так устроены, например, шахматные комплекты. После нарезки он предупредит о висящих зонах (floating regions), но то же самое пишет и про чистого робота, у которого просто висят руки. А этого робота Bambu Studio резать отказался вовсе: между кончиком антенны и шариками остался пустой слой.
Если шарики убрать, нарезка пройдёт, но печатать ступни принтер начнёт прямо в воздухе: под ними нет опоры.
Вдобавок этот робот оказался полым внутри. Стенки у него тоньше ширины одной линии, и слайсер напечатает их хрупкой нитью или выбросит.
5. Детали только «в краске»
Самую чистую геометрию выдал Hunyuan3D 3.1: к его файлу у слайсера нет претензий. На превью у робота чёрное забрало, жёлтые глаза и яркие эмблемы. Если отключить текстуру, глаза превращаются в едва заметные бугорки, а от надписи на груди остаётся решётка.

Если печатать одним пластиком, цвета не будет: принтер повторяет только форму. Всё, что на исходной картинке нарисовано плоско (глаза, логотипы, узоры), генератор переносит в текстуру, а не в рельеф. С AMS цвет можно перенести в пластик, но плоское так и останется плоским, и фигурка выйдет глаже, чем на превью.
Проверка кодом
Всё, что выше, можно проверить самостоятельно. Почти все числа из таблицы в начале статьи считает вот такой скрипт на Python с библиотекой trimesh (проверено на версии 5.1):
import sys
import numpy as np
import trimesh
# Читаем файл как есть: trimesh только склеит вершины с одинаковыми координатами
mesh = trimesh.load(sys.argv[1], force="mesh")
# Сколько треугольников сходится на каждом ребре
uses = np.bincount(mesh.edges_unique_inverse)
# Отдельные части: куски, которые не связаны ни одной общей вершиной
parts = trimesh.graph.connected_components(mesh.edges_unique, nodes=np.unique(mesh.faces))
print("габарит, единиц: ", np.round(mesh.extents, 2))
print("открытых рёбер: ", int((uses == 1).sum()))
print("рёбер на 3+ треуг.: ", int((uses > 2).sum()))
print("отдельных частей: ", len(parts))На кружке от TripoSR и роботе от TRELLIS.2 он выдаёт ровно то, что стоит в таблице:
$ python check_mesh.py mug_triposr.stl
габарит, единиц: [0.69 0.89 0.69]
открытых рёбер: 612
рёбер на 3+ треуг.: 0
отдельных частей: 93
$ python check_mesh.py robot_trellis2.stl
габарит, единиц: [0.72 1. 0.48]
открытых рёбер: 8
рёбер на 3+ треуг.: 3163
отдельных частей: 113Из пяти дефектов выше скрипт показывает четыре: размер, мусор и открытые рёбра, рёбра на четыре треугольника и отдельные куски. Что ступни висят над столом, он не скажет: это видно только после нарезки. Детали «в краске» видно только глазами, а «защемлённую» вершину, как у очков от TRELLIS, скрипт не заметит: для этого нужна проверка посложнее.
Экспресс‑проверка за пять минут
Большинство таких дефектов можно найти ещё до печати, если идти по порядку:
Посмотрите на модель без текстуры: откройте STL в любом просмотрщике, цвета в нём нет. Чего нет в рельефе, того не будет и в пластике.
Откройте модель в слайсере и наведите курсор на значок предупреждения в списке объектов. Bambu Studio показывает, сколько в модели открытых рёбер и сколько ошибок он исправил сам.
Задайте размер по одному известному измерению, с сохранением пропорций. Если слайсер сам пересчитал модель из дюймов или метров, проверьте, что получилось.
Щёлкните по модели правой кнопкой и выберите Split → To objects. Если она рассыпалась на десятки мелких осколков, внутри почти наверняка мусор.
Нарежьте модель и пройдитесь ползунком слоёв в превью. Если какой‑то элемент (например, ступни или шарик антенны) начинается в воздухе, принтер будет «лить пластик в никуда».
Мелкие дефекты можно исправить сразу в слайсере: в Bambu Studio и PrusaSlicer на Windows есть починка по правому клику. Для серьёзных случаев есть Blender (панель 3D Print Toolbox) и MeshLab.
Только следите, чтобы вместе с мусором автопочинка не «откусила» роботу пальцы или антенну. А висящие в воздухе ступни никакой инструмент автоматически не приклеит — их придётся двигать руками.
Что получилось на двадцати моделях
Девять моделей из двадцати не прошли проверку слайсера, и восемь из этих девяти дали два генератора: TripoSR и TRELLIS.2. Новая TRELLIS.2 сломала все четыре модели, старая TRELLIS — одну. Самые чистые файлы у Hunyuan3D 3.1, но мелкие детали у него живут в краске. А размер не угадал ни один генератор: за них его угадывает слайсер.
В следующей статье разберём, почему у каждого генератора свой «почерк» дефектов и как по устройству нейросети заранее понять, где она сломает модель. А в третьей заглянем под капот слайсеров: что именно они проверяют и как модель может сломаться в момент сохранения файла.
P. S. Если у вас есть модель из нейросети, которая не печатается, напишите в комментариях, каким генератором она сделана и что с ней не так. Самые интересные случаи разберу в следующих статьях.

Комментарии 0