Зачем менять Tripo и Meshy на локальный TRELLIS.2
TRELLIS.2 от Microsoft превращает картинку в 3D-модель прямо на домашнем ПК. В кейсе на Habr она работает на машине с RTX 5060 Ti 16 ГБ, и число прогонов ограничено только вашим терпением, а не балансом аккаунта. Этого хватило, чтобы напечатать два светильника: орочий череп, который светится изнутри, и планету-литофанию на подставке из корней.
Экономика простая. У Tripo тариф Pro стоит около $20 в месяц и даёт примерно 200 моделей, у Meshy примерно $20 за 1000 кредитов, то есть до 100 моделей. Локальный запуск убирает счётчик генераций, зато переносит на пользователя доводку меша: без обработки результат редко становится готовым файлом для печати.
Два светильника в кейсе показывают два разных сценария. Череп отвечает на вопрос, где нейросеть нужна: органика со сложным силуэтом и мелкими отверстиями. Планета показывает обратное: гладкую сферу с рисунком проще посчитать формулой. В обоих случаях основное время уходит на инженерию, а не на саму генерацию.
Что умеет TRELLIS.2 и где её предел на 16 ГБ VRAM
Модель принимает изображение и выдаёт трёхмерную геометрию, все вычисления идут локально. Верхнюю границу здесь задаёт не желание, а видеопамять: режим 1536_cascade не уместился в 16 ГБ на этапе декодирования. Это не ошибка установки и не сломанный конфиг, а честный лимит железа. Рабочий вариант в кейсе - 1024_cascade.
Источник не называет точную версию TRELLIS.2 и полную конфигурацию ПК помимо видеокарты и объёма VRAM. Условия лицензирования тоже не раскрыты: слово «бесплатно» в кейсе относится к запуску на своём железе, а не к любым сценариям применения. Перед коммерческим использованием модели лицензию стоит проверить отдельно.
Сколько реально экономит отказ от подписки
Считайте не абстрактную выгоду, а свой объём работы. Подписка Tripo Pro за ~$20 в месяц покрывает около 200 моделей, Meshy за те же ~$20 даёт 1000 кредитов, то есть до 100 моделей. Если делать один светильник в месяц, локальный путь окупается не деньгами, а свободой экспериментов: можно перебрать десять вариантов формы и не смотреть на тариф.
Второй фактор - время. Генерация занимает минуты, обработка меша и подготовка к печати могут съесть вечер. Локальная схема выигрывает, когда вы печатаете регулярно и готовы разбираться с вокселизацией. Подписка выигрывает, когда нужен готовый результат без ручной возни.
Как устроены платные конвейеры и где в них остаётся ручная работа, видно на соседнем материале проекта: путь 10 лоуполи-ассетов от Seedream 5.0 Pro до 3D в Meshy и Neural4D. Генератор отвечает за стиль, доработка всё равно ложится на человека.
Режимы 1536_cascade и 1024_cascade: что влезает в 16 ГБ
Цифры из кейса дают ориентир для планирования. Прогон в 1024_cascade без текстур занял 181 секунду с пиком 12 ГБ, на выходе получилось около 24 млн треугольников. На карте с 16 ГБ остаётся запас в 4 ГБ, и он не бесконечный: часть памяти забирают система и сам пайплайн.
Почему 1536_cascade упирается в память на декодировании
Генерация идёт по этапам, и память расходуется неравномерно. Пик приходится на декодирование, когда промежуточные представления разворачиваются в геометрию высокого разрешения. Режим может не влезть даже при свободной памяти на предыдущих шагах: на декодировании её уже не хватает.
Практический вывод: начинайте с 1024_cascade, следите за пиком памяти и не гонитесь за максимальным разрешением. Для печати светильника сверхплотная сетка выигрыша не даёт, а время и VRAM расходует заметно. Бенчмарков других видеокарт источник не приводит, так что переносить эти цифры на другую GPU без собственной проверки не стоит.
24 млн треугольников: что с этим делать дальше
24 млн треугольников для печати избыточны. Такой меш тяжело открыть в слайсере, он тормозит булевы операции и плохо поддаётся ремонту. Это сырьё для следующего шага: вокселизации и перестроения поверхности в тело с нужной толщиной стенки.
Простое уменьшение полигонов задачу не решает. Если меш не замкнут, слайсер не понимает, где внутренняя сторона, и печатает стенку непредсказуемо. Дальше в кейсе как раз решается задача, как получить замкнутую оболочку и при этом сохранить лицо.
От сырого меша к печатному телу: почему обычное замыкание убивает лицо
Первый светильник - орочий череп, который светится изнутри. Нейросеть дала форму, дальше началась инженерия. Наивный путь выглядит логично: взять сырой меш и замкнуть его в сплошное тело, чтобы получить замкнутый объём для печати.
На черепе этот приём сработал плохо. Замыкание закрыло глазницы и височные отверстия плоскими заплатками, и лицо стало чужим. Для светильника это критично: пустоты в черепе и есть то, через что проходит свет и что делает силуэт узнаваемым.
Как работает build_preserved_shell.py
Скрипт меняет логику обработки. Вместо заливки внутреннего объёма он вокселизует только поверхность: вокруг исходной геометрии наращивается узкая полоса материала, и из неё заново извлекается сетка. Внутренняя полость не заполняется, поэтому глазницы и височные окна остаются открытыми.
Последовательность такая:
- Сырой меш от TRELLIS.2 загружается как источник поверхности.
- Поверхность вокселизуется: вокруг геометрии строится объёмное представление.
- Вокруг поверхности наращивается узкая полоса материала заданной ширины.
- Из полученного объёма заново извлекается сетка, уже замкнутая и пригодная для нарезки.
Конкретные параметры вокселизации в источнике не разобраны, их придётся подбирать под масштаб модели. Слишком крупный шаг съест мелкие детали, слишком мелкий даст тяжёлую сетку и долгую обработку. Логика для светильника правильная: нужна оболочка с открытыми деталями, а не сплошная масса. Скрипт лежит на GitHub вместе с инструкцией, так что последовательность можно повторить на своей модели.
Если геометрию после генерации нужно править вручную, пригодятся приёмы из кейса про 3D-модель, собранную в Blender через Claude и GPT: там разобраны итерации правки формы и сжатие готового файла.
Ошибка с уходом оболочки ниже нуля и обрезка по плоскости
После утолщения вылезла другая проблема. Часть оболочки ушла ниже нуля, и при переносе модели на стол опорное кольцо поднялось примерно на 1,2 мм. Принтер начинал бы печать не с него, и первый слой лёг бы в воздух или в случайную точку.
Помогла обрезка по плоскости: лишнее срезается, и модель снова опирается на стол всей опорной поверхностью. В источнике описание обрывается на этом месте, поэтому точные параметры плоскости и порядок действий не раскрыты. Принцип остаётся общим: после любого утолщения проверяйте минимальную координату по Z и при необходимости подрезайте модель плоскостью, а не сдвигайте её вверх.
Когда нейросеть не нужна: планету-литофанию считаем формулой
Второй светильник строится противоположным способом. Планета-литофания: рисунок меняет внутреннюю поверхность гладкой сферы, а снаружи остаётся ровный шар. Генерировать такую форму нейросетью бессмысленно, её проще посчитать.
Формула толщины стенки из яркости
В кейсе заявлен подход, где толщина стенки считается из яркости карты по формуле:
0.8 + (1.0 - brightness) * (3.0 - 0.8)
Диапазон получается от 0.8 до 3.0 мм. Проверим на краях: при brightness = 1.0 множитель обнуляется и остаётся 0.8 мм, при brightness = 0.0 выходит 0.8 + 3.0 - 0.8 = 3.0 мм. Светлый участок карты даёт тонкую стенку и пропускает больше света, тёмный даёт толстую стенку и держит свет.
Формулу из описания кейса текст источника не подтверждает: в доступном фрагменте её нет. Воспринимайте выражение как заявленный автором подход и подбирайте диапазон под свой материал и принтер. Для PLA и PETG рабочие толщины различаются, а слишком тонкая стенка на большой сфере начнёт просвечивать раньше, чем хотелось бы.
Почему для гладкой сферы генерация избыточна
Формула даёт предсказуемую гладкую геометрию и точный контроль толщины в каждой точке. Нейросеть на такой задаче добавила бы шум, лишние полигоны и неопределённость: пришлось бы отдельно проверять, не поплыла ли сфера и не появились ли вмятины.
Правило простое. Органика и сложные силуэты (череп, листва, фактуры) - территория TRELLIS.2. Регулярная геометрия (сфера, цилиндр, плашка с рисунком) - территория формулы и параметрического скрипта. В кейсе оба подхода соседствуют, и это самая полезная часть материала: инструмент выбирается под форму, а не наоборот.
Инженерные ловушки светильника: посадка, поддержки, нарезка
Печать светильника отличается от печати статуэтки. Здесь важны посадочные места, путь света и отсутствие лишних опор внутри тонкой стенки. В кейсе собрано несколько решений, которые стоит разобрать отдельно.
Посадка шара между корнями через smoothstep
Планета сидит на подставке из корней, и стык двух форм требует аккуратности. smoothstep даёт плавный переход вместо резкой границы: ветви разводятся вокруг сферы без разрывов и артефактов, поверхность остаётся непрерывной. Без такого сглаживания в месте контакта появляются ступеньки и тонкие стенки, которые ломаются при печати.
Точные коэффициенты в источнике не приводятся. Общий принцип: параметр сглаживания задаёт ширину зоны перехода, и подбирать его нужно по масштабу модели, чтобы корни не сходились у шара в комок.
Отдельный приём - вычитание объёма движущегося шара при установке. Деталь садится в посадочное место без пересечений: из подставки вычитается объём, соответствующий траектории шара, и он входит в паз без натяга. Способ удобен, когда нужен зазор под клей или свободную посадку.
Наклонная полка вместо поддержек и проверка sparse infill
Поддержки внутри плафона печатать неудобно: их трудно удалить, а следы остаются на видимой поверхности. Наклонная полка решает задачу иначе: геометрия строится так, что каждый следующий слой опирается на предыдущий, и поддержки не нужны. Уклон закладывается на этапе моделирования, зато экономит материал и время на зачистку.
Вторая ловушка прячется в нарезке. Проверьте, что в стенке плафона нет sparse infill: разреженного заполнения, которое при подсветке просвечивает пустотами и полосами. В предпросмотре слайсера стенка должна быть сплошной по всей толщине, с плотным периметром и без пустот между линиями.
Чек-лист перед печатью:
- опорная плоскость ровная, модель стоит на столе без смещения по Z;
- стенка плафона нарезана сплошной, sparse infill в ней отсутствует;
- поддержки не попадают на видимые поверхности и внутрь полости;
- толщина стенки выдержана в выбранном диапазоне по всей высоте;
- посадочные места дают нужный зазор, деталь собирается без натяга.
Эти решения взяты из одного авторского кейса, а не из отраслевого стандарта. Проверяйте их на своей геометрии и своём принтере.
Повторяем кейс: скрипты, STL и инструкция на GitHub
Скрипты, пример карты и инструкция выложены на GitHub, готовые STL - в релизе. Главная проблема повторения снята: последовательность не нужно восстанавливать по тексту, файлы уже собраны. Подготовить стоит картинку с чётким силуэтом, локальную установку TRELLIS.2 и слайсер.
Пошаговый маршрут от картинки до печати
- Подготовьте изображение с читаемым силуэтом. Для органики важен ракурс, где видны отверстия и мелкие детали.
- Запустите TRELLIS.2 локально в режиме 1024_cascade. Ориентир по RTX 5060 Ti 16 ГБ: около 181 секунды и пик 12 ГБ.
- Прогоните меш через build_preserved_shell.py, чтобы получить замкнутую оболочку с открытыми деталями.
- Проверьте минимальную координату по Z и при необходимости обрежьте модель плоскостью: после утолщения опорное кольцо может уехать вверх примерно на 1,2 мм.
- Нарежьте модель и проверьте стенку на отсутствие sparse infill, а также расположение поддержек.
- Напечатайте, установите деталь в посадочное место и проверьте подсветку.
Для планеты маршрут короче: вместо генерации строится сфера с толщиной стенки по формуле, дальше идут нарезка, печать и проверка света.
Кому подходит локальный TRELLIS.2, а кому проще остаться на подписке
Локальный путь имеет смысл, если есть GPU с запасом видеопамяти, как RTX 5060 Ti 16 ГБ в этом кейсе, и вы готовы доводить меш скриптами. Второе условие важнее первого: без вокселизации и проверки геометрии сырой результат редко доходит до принтера в приличном виде.
Подписка Tripo или Meshy проще, когда нужны готовые модели без ручной инженерии, а объём работы невелик. Платите ~$20 в месяц, получаете свой лимит генераций и не думаете о декодировании, пиках VRAM и вокселизации.
Ограничения локального варианта стоит назвать прямо. 1536_cascade не уместился в 16 ГБ, сырой меш требует обработки, а часть деталей кейса (точные параметры обрезки по плоскости, коэффициенты smoothstep, формула толщины) в источнике не раскрыта или не подтверждена. TRELLIS.2 - рабочий бесплатный инструмент, но не кнопка «сделать светильник». Он убирает счётчик генераций и оставляет инженерию вам.
Начать проще с одного объекта и одного режима: 1024_cascade, затем build_preserved_shell.py, затем нарезка с проверкой стенки. Когда маршрут пройден на черепе, планета по формуле собирается уже за вечер.