Render.ru
Поддержать
2Записей
1Следят
12.1 KЗаходов
3DKing

Два месяца спустя: что на самом деле переносится из 3ds Max в Blender

Софт Blender Cycles

Всем привет!

Меня зовут Евгений Литвяков, я занимаюсь архитектурной визуализацией с 2006 года и веду студию baxx.pro.

В конце июня я писал тут статью про NodeFlow Platform - наш инструмент для переноса моделей из 3ds Max в Blender с автоматической конвертацией материалов. Тогда это была совсем свежая бета, и я просил ломать её как угодно.

Вы поломали ))) Спасибо огромное - без этого мы бы половину вещей просто не нашли.

Прошло чуть больше двух месяцев, и изменилось столько, что комментарием под старым постом уже не отделаться. Если совсем коротко: наш инструмент перестал быть «конвертером материалов» и стал платформой. Появился нормальный сайт, переработанный личный кабинет, тарифы, плагин для 3ds Max, аддон для Blender. А главное - сильно поменялся сам подход к тому, как мы конвертируем. Про подход и хочу рассказать подробнее, потому что это и есть самое интересное.

Мы перестали угадывать

Вот главная мысль, ради которой всё это затевалось.

Когда пишешь конвертер «на глаз», логика простая: берём цвет из Corona, кладём в Principled BSDF, крутим шершавость, смотрим в вьюпорт - вроде похоже, поехали дальше. Так работает большинство конвертеров, которые я видел. И именно поэтому так часто получается «вроде то, но не то».

Мы пошли другим путём. Для каждого свойства материала мы сначала разбираемся, как оно реально работает в Corona или V-Ray - что происходит с лучом, как параметр влияет на результат, где движок нормирует значение, а где нет. И только потом воспроизводим это поведение в Cycles.

Разница видна сразу: цветное стекло остаётся цветным, тёмный кофе не становится светлой массой, карбон не превращается в гладкий пластик, а молоко не приезжает чёрным.

И это не проверяется «а ну-ка глянем». На сегодня у нас 76 автоматических проверок на каждую сборку. Часть из них сравнивает результат NodeFlow с оригинальным рендером Corona буквально попиксельно. Если сборка ломает поведение стекла - она просто не выходит.

Признаюсь, поначалу мне казалось, что это перебор. Сейчас понимаю, что без этой обвязки мы бы давно утонули: каждый новый тип материала тянет за собой десяток связей, и без тестов ты чинишь одно и ломаешь три.

Что мы действительно измерили

Несколько историй, которые хорошо показывают, о чём речь.

Стекло. Мы отдельно исследовали объёмное поглощение. Поэтому цвет стекла сохраняется, а его поведение зависит от реальной толщины объекта - как и должно быть. Тонкий бокал и толстая столешница из одного и того же материала выглядят по-разному, и это правильно.

Жидкости. Молоко и другие рассеивающие среды раньше могли приезжать чёрными - классика жанра. Теперь рассеяние и поглощение переносятся отдельно, каждое своим путём.

Кожа и SSS. Радиус рассеяния мы не подбирали визуально. Сняли его рендерными тестами и перевели в модель Blender.

Металлы. Пришлось разбираться, как Corona вообще определяет металлическое поведение. Оказалось, дело не просто в «сильном блеске»: важную роль играет погашение диффузного слоя. Пока мы это не поняли, металлы выходили похожими, но какими-то ватными.

Рельеф. Учитываем Normal, Bump и Displacement, включая особенности Corona, для которых в Blender прямого аналога попросту нет.

Свет V-Ray. Проверили яркость источников во всех шести режимах нормировки. Именно здесь раньше сцена могла становиться в разы темнее оригинала - и человек честно думал, что «конвертер кривой», хотя ломался ровно один коэффициент.

Translucency. Для этого эффекта восстанавливаем необходимую иерархию нодового графа - работает и в Blender 5.1, и в более старых версиях.

Как теперь отправить сцену

Тут появилась вариативность, которой раньше не было.

Прямо из 3ds Max - через наш плагин. Нажали кнопку, сцена уехала на конвертацию.
Через аддон Blender - загрузили архив, получили готовый файл.
Через личный кабинет на сайте - если 3ds Max под рукой нет вообще.

Второй пункт для меня отдельно важен. Изначально вся история упиралась в то, что у тебя должен быть установленный Max. Теперь можно просто закинуть архив.

Что переносится из сцены

Теперь по существу - что именно приезжает в Blender.

Геометрия. Все объекты со своим положением, поворотом и размером. Группы разбираются, модификаторы запекаются в форму. В Blender приходит именно та форма, которую вы видите во вьюпорте 3ds Max.

Текстуры. Файлы карт едут вместе со сценой и автоматически подключаются к материалам. В том числе восстанавливаются русские имена файлов и пути из старых архивов - привет всем, у кого библиотека собиралась лет десять и там есть папка «Дерево_финал_2».

Материалы. Переносится не просто итоговый цвет, а вся структура материала: слоты, карты, маски, смешивания, цветокоррекция, кривые. То есть не «похожий материал», а максимально близкая реконструкция того, что собрал автор.

Свет и камеры тоже приезжают - про них чуть ниже отдельно, там есть нюансы.


Какие материалы поддерживаем

Сегодня NodeFlow знает больше сотни типов материалов и карт. Список длинный, но, думаю, многим он тут нужнее любых слов.

Corona: Physical и Legacy, Light Mtl, Skin, Layered, Blend, Select, Front/Back и другие.

V-Ray: VRayMtl, BlendMtl, 2SidedMtl, LightMtl, FastSSS2, ALSurface, CarPaint, OverrideMtl, MtlWrapper.

Стандартные материалы 3ds Max: Standard, Physical Material, PBR, glTF, Blend, Shellac, Composite, Double Sided, Top/Bottom, Multi/Sub-Object, Shell, XRef, переключатели и Morpher.

Карты. Битмапы со всеми основными настройками: тайлинг, смещение, поворот, гамма, Output и Color Map.

Процедурные: Noise, Cellular, Checker, Gradient, Gradient Ramp, Tiles, Smoke, Marble, Perlin Marble, Splat, Speckle, Dent, Stucco.

Смешивание: Mix, Corona Mix, Mask, Composite - со всеми 25 режимами наложения.

Цветокоррекция: Corona Color Correct и стандартная Color Correction.

Рельеф: Normal, Bump, Bevel, Displacement.

Ещё: AO, VRayDirt, Curvature, Falloff с кривой смешения, Corona Wire, VRayEdgesTex, Triplanar, Mapping Randomizer, MultiTexture, Corona MultiMap, VRayMultiSubTex, Forest Color, RailClone Color, Vertex Color и многое другое.

Свет - тоже переносится

Поддерживаем:

Corona Light - прямоугольник, диск, сфера, цилиндр;
Corona Sun;
V-Ray Light - плоскость, диск, сфера;
V-Ray Sun.

Переносим форму, размер, цвет или температуру в Кельвинах, яркость, положение и направление. В том числе учитываем зеркально отражённые источники - те самые случаи, когда свет раньше мог внезапно «уехать» в другую сторону и вы полчаса думали, что сошли с ума.

И маленькая, но приятная деталь: если источник был выключен в 3ds Max - в Blender он тоже будет выключен.

Камеры - да, тоже

Переносятся Free Camera, Target Camera, Physical Camera, Corona Camera и V-Ray Physical Camera.

Сохраняются:

положение и поворот;
угол обзора;
ближнее и дальнее отсечение;
ортографический режим;
глубина резкости, включая диафрагму и дистанцию фокуса.

А вот shift/tilt, форма боке, экспозиция и баланс белого пока не переносятся. Это уже не геометрия камеры, а настройки проявки изображения - в Blender они живут в другой части системы.

Что происходит после импорта в Blender

Многие думают, что конвертация - это «перегнали материалы и всё». На самом деле после импорта работы не меньше. Вот что делает наш аддон:

Собирает материалы на нодах Cycles - с текстурами, масками, смешиваниями и правильным цветовым пространством.
Приводит сложные графы в порядок: раскладывает по смысловым блокам и подписывает - Base Color, Roughness, Normal и так далее. Чтобы в ноды можно было залезть руками и не поседеть.
Приводит геометрию в порядок: убирает лишние custom normals и жёсткие рёбра, применяет масштаб, сохраняет положение объектов, включает Shade Auto Smooth.
Назначает материалы по слотам - даже там, где FBX не смог передать слот напрямую.
Подставляет текстуры из обменной папки или скачивает их вместе с результатом.
Сопоставляет UV-каналы. В 3ds Max карта может быть привязана к номеру канала, а Blender работает с именами - NodeFlow связывает эти две системы.
Создаёт свет и камеры, сохраняет готовую сцену.
Формирует подробный лог. Если что-то не удалось перенести точно - это будет указано по имени материала и слота.

И ещё одна вещь, которую просили чаще всего: можно импортировать несколько ассетов в один Blender-файл. Повторный импорт не заберёт материалы и текстуры у предыдущего, даже если у двух моделей совпадают имена шейдеров и файлов. Кто хоть раз собирал интерьер из десятка скачанных моделей - поймёт, о чём я.

А где пока есть приближения?

Не хочу делать вид, что всё уже решено. Есть места, которые пока воспроизводятся приближённо:

форма блика у части материалов V-Ray;
слой «хлопьев» у автокраски;
цилиндрический источник Corona;
купольный и mesh-источник V-Ray.

О таких случаях мы честно пишем в логе конвертации - чтобы вы сразу знали, куда посмотреть внимательнее, а не искали подвох по всей сцене.

Отдельная история - процедурные карты. Noise в 3ds Max и Noise в Blender используют разные алгоритмы. Мы сохраняем характер и масштаб узора, но не обещаем совпадение каждого пикселя. Обещать такое было бы просто нечестно.

Вообще, честный лог - недооценённая вещь. Инструмент, который молча делает «примерно так», хуже инструмента, который говорит: вот тут я не уверен, проверь.

Что дальше

Планов, как обычно, больше, чем часов в сутках.

Прямо сейчас в работе - обратная конвертация: Blender → 3ds Max. Об этом просили ещё в комментариях к прошлой статье, и я тогда ответил «интересно, надо попробовать». Попробовали. Делаем. Получается полноценный мост в обе стороны, а не улица с односторонним движением: у Blender своя огромная экосистема ассетов, и тащить её в Max сейчас так же больно, как раньше было наоборот.

В планах - конвертация в Unreal Engine и Unity 3D. Тема, которую тоже подсказали в комментариях. Чем дальше, тем очевиднее: задача не в том, чтобы соединить два конкретных пакета, а в том, чтобы научиться понимать материал как структуру и уметь пересобрать его в любой целевой системе.

Вместо итога

Мы постепенно строим систему, которая понимает, что находится внутри сцены, проверяет сама себя и старается воспроизвести не только внешний вид, но и логику исходного материала. Со всеми оговорками, честными логами и списком того, что пока получается приближённо.

Огромное спасибо всем, кто тестирует, пишет о багах, присылает свои поломанные сцены и не стесняется говорить «у меня вот тут ерунда получилась». Именно из этих сообщений и вырос последний апдейт.

Буду рад ответить на любые вопросы в комментариях.

115
Комментарии:1
по поступлению
315
0
Мятный Дворецкий
02.09.2026 10:21
Серебряный спонсор

Блин, текст ИИ писал, паттерны написания иишные, это конечно становиться нормой, но как их вижу становится грустно.