Как экспортировать материал из 3ds max. Убираем все лишние элементы. Изменяем параметры сетки

Экспорт из 3ds max возможен в самые различные форматы. Самые популярные - 3ds, obj, stl и др. Сегодня мы рассмотрим сохранение файла сцены или 3d-модели в такой популярный старый формат, как 3ds.

Немного истории

Этот формат на сегодняшний день считается устаревшим и зародился он еще в такой древней программе, как «3d studio», которая работала еще на DOS. Сейчас такой формат если используется, то только для переноса из одного редактора 3d-графики в другой, либо для сохранения модели и размещения в библиотеках, чтобы пользователи могли использовать их, если не могут открыть файл своей версией редактора. В общем, как альтернатива.

ВАЖНО! Основной минус данного формата в том, что он имеет некоторые ограничения по количеству полигонов, поэтому относительно сложные сцены и объекты в нем сохранить не получится. Для этого лучше подойдет формат с расширением obj.

Как сохранить файл в 3ds

Если вам требуется экспортировать 3d-модель из программы 3ds max в формат 3ds, то для этого необходимо проделать следующие простые действия.

Для начала открываем меню вверху слева и наводим курсор мыши на слово Export.

Теперь, если у вас появилось окошко, как на скриншоте ниже, то снова нажимаем на Export.

После нажатия перед нами появится окошко с открытой папкой с одноименным названием, которая находится по адресу C:\Users\название вашего компьютера\Documents\3dsMax\export, или проще: Мои документы — 3dsMax — export.

Здесь мы даем имя нашему файлу, желательно английскими буквами, т.к. 3ds max не очень любит кириллицу. Теперь выбираем формат (расширение 3DS), как показано на рис.выше. Далее жмем Save и файл сохранится в папке export. Вы можете выбрать любую папку для сохранения, например Desktop (рабочий стол). Открывается файл 3ds обычно через команду Import почти во всех редакторах 3d-графики. С помощью команды Open вы его не откроете, т.к. Open открывает только родные файлы, например, 3ds max открывает этой командой только свои типы файлов с расширением max.

Редактор 3ds Max позволяет осуществлять Import (Импорт) и Export (Экспорт) файлов и объектов. Это дает возможность оениваться геометрическими формами с другими программами, такими как Adobe Photoshop , Adobe Illustrator , AutoCAD и т.д.

При экспортировании файлов программа преобразует сцены с расширением.max в универсальные форматы.3ds или.dwf. Так как данные форматы менее восприимчивы к преобразовию, то часть информации о сцене при преобразовании может измениться либо исчезнуть. Редактор 3ds Max 2013 предупреает об этом при преобразовании. Также он предлагает сохрить координаты текстур.

Для экспортирования файла необходимо выбрать команду Ap- plication button (Кнопка приложения) | Export (Экспорт) и в поившемся диалоговом окне Select File to Export (Выбрать экортируемый файл) выбрать директорию для сохранения, укать тип и имя файла (рис. 4.21).

Рис. 4.21. Экспортирование файла

Рис. 4.22. Импортирование файла

Для импортирования файла следует нажать кнопку приложия и выбрать команду Import (Импорт) . В открывшемся диалоговом окне Select File to Import (Выбрать импортируемый файл) необходимо выбрать формат импортируемого файла и нужный файл, а затем открыть его (см. рис. 4.22). В зависимости от формата импортируемого файла 3ds Max может предложить различные варианты внесения компонентов.

В 3ds Max 2013 имеются широкие возможности импорта. Блодаря технологии Smart Data стал возможен перенос моделей из редактора Autodesk Inventor . При импорте файлов с расширении.iam и.ipt можно выбирать способ импорта (тело или сетоый объект), переносить материалы и источники света, что пволяет получать высококачественные модели без дополнителых манипуляций (рис. 4.23).

Рис. 4.23. Модель крана из Autodesk Inventor

Важной особенностью функций импорта является поддержка 3D-моделей сервиса Google SketchUp (рис. 4.24). Этот сервис пволяет бесплатно скачивать модели реальных архитектурных зданий, интерьеров помещений и отдельных предметов. Диалогое окно импорта позволяет переносить в сцену не только саму модель, но и сопутствующие текстуры (с поддержкой преобразания внешних/внутренних текстур в двухсторонние материалы 3ds Max), камеры и системы освещения (рис. 4.25).

Рис. 4.24. Страница сервиса Google SketchUp

Рис. 4.25. Модель церкви Santa Maria del Pulg в 3ds Max 2013

Еще одной важной особенностью 3ds Max является поддержка функций сохранения в формате предыдущих версии 3ds Max без потери данных сцены. Благодаря этому стал доступен поступа-

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

Источник: Харьковский, Александр Викторович, 3ds Max 2013. Лучший самоучитель / А.В. Харьковский. - изд. 4-е, доп. и перераб. - Москва: Астрель, 2013. - 480 с. - (Учебный курс).


















Вступление

Поскольку эта статья родилась из комментария к статье "Заметки о разработке плагина для экспорта геометрии и ещё чуть-чуть" Glorg"a, пожалуйста начните чтение с оригинальной статьи , а я обойдусь без вступления:)

Вкратце, в статье пойдет речь о нюансах, с которыми вы (хотите или нет) обязательно столкнётесь при написании плагина экспорта из 3DS MAX.

Базовые понятия

Система координат

Обратите внимание, как ориентированы оси системы координат в 3DS MAX, и сравните системой, используемой в DirectX.

Рисунок 1. Системы координат 3DS MAX и DirectX.

Мало того, что вверх направлена ось Z, а не Y, так в 3DS MAX еще и используется правосторонняя (right-handed), а не левосторонняя (left-handed) система координат, как в DirectX.

Если этого не учитывать, отэкспортченный персонаж в игре будет лежать на полу.

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

Для того чтобы не путаться, проще всего при экспорте поменять местами оси Y и Z. Таким образом, если в игре персонаж должен бежать вдоль оси Z, то аниматор в 3DS MAX должен анимировать его вдоль оси Y – очень простое правило.

Для того чтобы поменять оси местами, нужно просто поменять местами компоненты Y и Z в позициях вершин и нормалях. Но при этом при экспорте анимации, каждую матрицу 3DS MAX необходимо умножить спереди и сзади на матрицу перемены осей (), чтобы вернуть позицию обратно в систему координат 3DS MAX для анимации, а потом опять в нашу систему координат.

Матрица перемены осей выглядит следующим образом:

При инвертировании, матрица не изменяется.

Полностью все выглядит так:

Матрицы объекта и узла (Node)

В документации к 3DS MAX есть раздел "Must Read Sections by Plug-In Type". Так вот, его действительно нужно прочитать! В частности, там объясняется, что такое матрица узла (node) и объекта (object).

Вся сцена в 3DS MAX представлена иерархией узлов. Когда мы создаем кубик (box) - мы создаем узел (INode) и объект (IObject), на который этот узел ссылается.

Центр локальной системы координат объекта (pivot), который мы видим в интерфейсе 3DS MAX - это визуальное представление матрицы узла. Матрицу узла можно получить методом INode->GetNodeTM().

Кроме того, объект может быть смещен относительно узла с помощью матрицы объекта. По умолчанию матрица объекта - единичная, но ее можно изменить, двигая pivot.


Рисунок 2. Включение режима преобразования pivot"а.

Когда мы двигаем pivot, 3DS MAX изменяет одновременно и матрицу узла, и матрицу объекта так, чтобы визуально геометрия оставалась на том же месте.

Полная формула преобразования геометрии в мировое пространство выглядит так:

Напрямую получить матрицу объекта невозможно. Можно получить матрицу преобразования геометрии в мировое пространство (INode->GetObjectTM()), и помножить ее справа на инвертированную матрицу узла.

Non-uniform scale

Non-uniform scale(масштабирование с разными коэффициентами по осям, NUS) - это зло. Это настолько большое зло, что в ранних версиях 3DS MAX при включении этого режима выскакивало предупреждение. Но в последний версиях 3DS MAX его убрали (наверное потому, что художники его все равно не читали:).

NUS рождает две следующие проблемы:

1. Для преобразования нормалей необходимо использовать inverse transpose матрицу.

Обычно, в играх для преобразования нормалей используется та же матрица, что и для преобразования позиций, только с обнуленным смещением. В случае с NUS это не работает:


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

Если для преобразования позиций используется матрица M, то для преобразования нормалей необходимо использовать . Впрочем, можно просто считать нормали уже после преобразования позиций.

Обычно проблему NUS можно решить путем выделения из матриц масштабирования, и применения его к координатам вершин (таким образом удается избавиться от масштабирования вообще). К сожалению, это не избавляет от второй, фундаментальной проблемы.

2. Если к кости применен NUS, то при вращении она сжимается.

Вообще-то, до того, как модель дошла до стадии экспорта, проблемы уже должны были возникнуть у аниматоров, и они обязаны были вернуть модель назад моделеру:).

Поскольку в матрице узла содержится неравномерное масштабирование, то при вращении кости она описывает эллипс, а не круг. Поскольку в играх анимация кости сохраняется только в виде положения и вращения (кватернионы), то анимация в игре не будет соответствовать анимации в 3DS MAX.

Другими словами, NUS - это зло, и ваши художники должны следить, чтобы матрицы узлов не содержали его. Если нужно выполнить неравномерное сжатие, его нужно выполнять над вершинами геометрии (vertices sub-object), а не над узлом.

Матрицы также могут содержать искривление осей (переход к неортогональной системе координат). К счастью, добиться этого стандартными методами 3DS MAX очень сложно, поэтому такие случаи редки (используйте метод Matrix3->Orthogonalize()).

Отрицательное масштабирование

3DS MAX позволяет указывать отрицательное масштабирование.


Рисунок 4. Отрицательное масштабирование.

Эффективно это масштабирование+отражение по одной из осей. Если объект отражен или отмасштабирован с отрицательным коэффициентом, то нужно поменять порядок следования вершин в треугольнике (отразить нормаль). Проверить это можно, проанализировав матрицу:

bool RF2_Export_FaceNeedFlip(INode *Node, float time) { Matrix3 m = (Node->GetObjectTM (time)); return (DotProd(CrossProd(m.GetRow(0),m.GetRow(1)),m.GetRow(2))<0.0)?1:0; };

Спрятанные объекты

Иногда проблемы возникают из-за незнания интерфейса 3DS MAX. На самом деле, вы - программист, и знать 3DS Max не обязаны, но все же...

3DS MAX позволяет прятать (hide) объекты. Это очень полезная функция, и художники часто этим пользуются. Чтобы у вас не возникало проблемы, когда в отэкспорченной сцене появляются какие-то непонятные объекты, которых в 3DS MAX вроде бы нет, вам нужно знать, что 3DS MAX позволяет спрятать объекты тремя разными способами.

1. Спрятать выделенные объекты с помощью контекстного меню:


Рисунок 5. Контекстное меню (вызывается правой кнопкой мыши).

Для того, чтобы показать все объекты сцены, спрятанные этим способом, нужно выбрать в том же меню "Unhide all".

2. С помощью слоев:



Рисунок 6. Окно Layer Manager (вызывается Tools->Layer Manager).

3. С помощью панели Display:


Рисунок 7. Панель Display options.

Объект, спрятанный любым способом, не будет отображаться в окнах ViewPort и в списке объектов. Сам плагин не различает способа скрытия; в нем можно использовать единый метод INode->IsHidden().

Спрятанные треугольники


Рисунок 8. Панель face sub-object.

Кроме целых объектов, 3DS MAX позволяет скрывать отдельные треугольники. Плагин может запросить статус треугольника методом Face->Hidden().

Создание и экспорт объектов из 3ds Max

Описание

С помощью этой статьи вы научитесь создавать простые объекты и экспортировать их из 3ds Max в.cgf.

Этот урок предполагает, что пользователь понимает основы 3ds Max, такие как пользовательский интерфейс и создание простой геометрии.

Подготовка объекта

Структура папки

Объект

Для начала, создайте простой box (коробка) в 3ds Max, метр на метр. Поскольку Sandbox использует метрическую систему для того, чтобы измерить расстояния, вы можете использовать сантиметры в 3ds Max.

  • Центр объекта в 3ds Max будет соответствовать центру объекта в движке.
  • Удостоверьтесь, что вашему объекту назначены группы сглаживания. Движок назначит группу сглаживания для любых полигонов, иначе это может привести к нежелательным визуальным результатам.
  • Удостоверьтесь, что у вашего объекта есть координаты текстурной карты (UVW mapping).
  • Вы можете использовать любые стеки модификатора на своем объекте, они не будут затрагивать экспорт, и ваш объект успешно экспортируется в движок.
  • Чем больше полигонов, которые имеет ваш объект, тем дольше он будет экспортироваться, хотя экспорт вообще проходит очень быстро.
  • Ваш объект должен быть либо редактируемой сеткой (Editable Mesh) либо редактируемой поверхностью (Editable Poly).

Создание материала для объекта

Чтобы использовать текстуры и шейдер эффекты, объект нуждается в материале. Материалы сохранены в.mtl-файлах. В этой части урока мы создадим материал в 3ds Max и научимся передавать, информацию в.mtl-файл, где это можно будет отредактировать позже с помощью редактора материалов (Material Editor) в SandBox"е.

1. Откройте редактор материалов в 3ds Max.

2. Выберите новый материал, нажмите на "Standard" и измените тип материала на "Multi/Sub-Object".

3. Установите подматериальный счет на 3. Движок поддерживает до 32 подматериалов. Чем больше подматериалов использует объект, тем сильней уменьшается производительность. Поэтому лучше всего найти способ удерживать чилов подматериалов настолько низко, насколько это возможно.

4. Дайте материалу и всем подматериалам название. Когда вы создадите материальный файл, эти названия будут переданы. Название материала, которое вы назначаете на объект в 3ds Max, должно быть таким же как и название самого материального файла. Мы назовём материал "Testbox" и создадим материальный файл с названием "Testbox.mtl"

5. Откройте каждый подматериал, и в “Shader Basic Parameters” измените тип шейдера на “Crytek Shader”. Вы должны использовать только Crytek Shader для ваших объектов. Другие типы шейдеров не будут работать правильно после экспорта. Если у вас возникли проблемы, пожалуйста проверьте, что все плагины установлены правильно.

Вы увидите новый раскрывшийся список рядом с "Physicalization". Этот список задает пути для работы материалов в движке. Пока, нам только интересны два из них; Default и Physical Proxy.

  • Default - нормальный материал. Вы будете использовать его для большинства материалов. Он ничего не меняет.
  • Physical Proxy - специальный материал, который вы можете использовать для физикализированной (Physicalized) геометрии. Этот параметр применяется с физикализированной геометрией, но при рендере его не видно.

6. Третий подматериал должен быть с параметром “physics proxy” (объясню позже). Откройте этот подматериал и измените тип Physicalization на “Physical Proxy NoDraw)”.

Нажмите на флажок "Physicalization" рядом со свитком. Это будет физикализируемым материалом в движке. Если этот флажок не будет поставлен, то ваш объект не будет физикализирован, а это значит что объект ни с чем не будет физически взаимодействовать в игре.

Если ваш объект имеет отдельную физическую прокси (physics proxy), то данная геометрия не должна быть в физикализирована.

7. Нам нужно назначить текстуру каждого подматериала за исключением подматериал physics proxy, который будет невидимым и использоваться только для соединения.

Перейдите к первому подматериалу и в свитке Maps выберите Diffuse Color Map "Bitmap".

Найдите текстуру, которую вы будите использовать. Все текстуры (за исключением Flash текстуры) должны быть либо в формате TIF, либо в формате DDS, подходящими для CryENGINE.

Теперь, подберите изображение для Bump Normals Map. Не забудьте приписать суффикс "_DDN", иначе текстура не будет работать как normalmaps. Эта текстура будет вашей картой нормалей. Использование карты нормалей конечно не обязательно, но желательно.

Повторите эти шаги и со вторым подматериалом. Используя различные текстуры.

Назначение материала на объект

1. Назначьте свой мультиматериал на объект.

2. Измените ID материала одних полигонов на 1, а других на 2. Убедитесь, что объект не имеет материальных идентификаторов вне числа подматериалов, которые имеет мультиматериал. При наличии текстур они будут отображаться как "Replace Me".

Создание физической прокси

В сложных многополигональных объектах, как правило, используется вспомогательная сетка называемая physics proxy . Физикализированные объекты в игровом мире можно связать друг с другом и больше полигонов, эти объекты будут иметь более интенсивные физические расчеты. Поэтому с physics proxy вы можете иметь больше полигонов насколько это возможно.

Сложные proxy также могут привести к некорректному поведению во время столкновений. Proxy также используется для взаимодействия с игроком.

С physics proxy объект всегда должен быть с "закрытой" сеткой, и не должен иметь открытых ребер. Открытые края могут вызвать различные проблемы с физическим взаимодействием, а также может вызывать уменьшение производительности поэтому следует избегать их, по возможности.

1. Сделайте копию окна сетки на уровне элемента

2. Назначение "Proxy" sub-material ID к нему. Он теперь будет действовать в качестве physics proxy.

Создание файла материала

1. Откройте CryENGINE 2 экспортер в Utility. Это хорошей идеей будет добавить кнопку для экспортера в список кнопок Utility, если вы собираетесь использовать его не раз.

2. В нижней части окна утилы можно найти свиток "Material".

Убедитесь, что вы находитесь в корневом уровне вашего материала в MAX. Это означает, что вы не должны просматривать какой-либо из подматериалов, а просто в multimaterial. Если вы находитесь в каком-либо из подматериалов при создании файла.mlt, файл будет содержать только то, что содержит подматериал, и ничего больше.

3. Нажмите на кнопку "Create Material". Это позволит открыть окно редактора материалов в SandBox. Теперь, в MAX снова нажмите на кнопку "Create Material". Вам будет предложено ввести имя для нового файла MTL. Убедитесь, что это имя совпадает с именем материала в MAX.

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

Закройте окно редактора материалов.

Экспорт из 3ds Max

1. 1. В разделе Object Export выберите объект и нажмите на кнопку "Add Selected" под пустым списком. Вы можете выбрать несколько объектов одновременно.

2. Щёлкните по синей кнопке "Export Nodes". Это позволит экспортировать объект. Он будет создан в той же папке, где расположен файл MAX. Вы можете просмотреть эту папку, нажав на кнопку "Explore ...".

Ваш объект будет иметь то же имя, что и Max-файла (Testbox.cgf). Вы можете назвать свой объект как угодно, проверьте галочку "Export File per Node" под Geometry Export Options и переименуйте объект.

Просмотр объектов в SandBox

1.Запустите SandBox и загрузите уровень.

2. Нажмите на кнопку "Brush" на панели инструментов справа.

3. Найдите ваш объект.

4. 4. Перетащите объект на уровень.

Дополнительная информация

Извлечение/назначение материалов

Вы можете просмотреть материал объекта путем открытия редактора материалов (кнопка "M" на клавиатуре или нажмите кнопку на панели инструментов, которая выглядит как синий кружок, или воспользуйтесь меню View).

Нажмите на третью кнопку слева в верхней части окна редактора материалов, выглядит как голубой ящик. Так вы перейдёте к просмотру материала выбранного объекта.

Вы можете назначить любой материал на объект, выбрав материал (всегда выбирайте корень материала, не подматериал) и нажмите левую кнопку на панели инструментов редактора материалов ("Assign material to selection").

Включение теней

Вы можете включить тени для объекта. Нажмите кнопку "CastShadowMaps" флажок в свойствах объекта.

Тестирование объекта игре

Вы можете перейти в режим игры, нажав SHIFT + G, или с помощью меню Game.

Если вы использовали параметр "Physicalize" в максе на proxy материал (и предположим, что вы создали proxy, если вы так сделали, то physicalize может быть любой материал, который вы захотите), вы или любые другие игровые объекты будут взаимодействовать с вашим объектом.

Кнопка "Reload" в brush parameters могут быть использованы для обновления CGF файла. Таким образом, вы можете внести в него изменения в MAX, экспортировать и быстро увидеть результат в редакторе.

Примечание: вы увидите, что объекты использующие параметр physicalized не обновляются (если они были изменены), после нажатия кнопки "Reload". Вы можете обойти эту проблему путем удаления объекта и использования Undo (Ctrl + Z или отменить кнопкой). Physicalized геометрии также автоматически обновляется, когда уровень загружается снова.

Консольная команда "P_Draw_Helpers 1" покажет physicalized геометрии. Установка этого параметра на 0 отключает её.

Консольная команда "E_Debug_Draw 1" (и другие номера, за 10) будет отображать различные виды полезной информации об объектах, такие как количество полигонов, количество материалов и т.д.