Как импортировать файл im в 3ds max. Создание физической прокси

26.03.2019

















Вступление

Поскольку эта статья родилась из комментария к статье "Заметки о разработке плагина для экспорта геометрии и ещё чуть-чуть" 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, 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 с. - (Учебный курс).

Цикл статей „Создание интерьера в 3ds Max “ посвящен созданию проекта бутика. В данном случае у нас имеется чертеж , выполненный в AutoCAD , который мы хотим использовать в работе в 3ds Max.

Но прежде, чем ипортировать чертеж, мы немного его доработаем.

Создаем замкнутые полилинии контуров стен в AutoCAD

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

В новом слое Walls (стены), используя команду pline (полилиния) обведем стены с внутренней стороны помещения, не забывая размещать вершины, там, где должны быть двери. Чтобы замкнуть полилинию, в коммандной строке вводим close. Затем обведем стены с наружной стороны. Внутри помещения будет перегородка, ее так же обводим. Объекты, которые раньше составляли стены, перегородки, удаляем.

Импортируем чертеж в 3ds Max из AutoCAD

File (верхняя левая кнопка) → Import → Import . Выбираем чертеж в формате.dwg.

Настройки в появившемся окне:

  1. ˅ Rescale (включение маштабирования), Incoming file units - millimeters. Так как в AutoCAD чертеж сделан в мм, его необходимо корректно перевести в метрическую систему.
  2. Из списка Derive AutoCAD Primitives by выбираем Layer (слой).
  3. ˅ Weld nearby vertices (включение опции слияния вершин чертежа), Weld threshold (порог слияния) - 1 mm.
  4. Curve steps(шаги кривой) - 4. Задаем 4, чтобы кривые линии не были ломаными. → Ok.

Для наглядности перейдем в окно Perspective: с помощью ПРАВОЙ кнопкой мыши выбираем окно Perspective, нажимаем клавиши Alt + W.

Убираем все лишние элементы

С помощью инструмента Select by name, выбираем все элементы, которые не относятся к Layer:Walls и к Layer:0 → ok → del.

Сохраним документ: File → Save as.

Даем слою с мебелью новое имя

Выбираем слой с мебелью (л. кн. мыши). Переходим на вкладку Modify (модифицировать). Вместо надписи Layer:0 указываем новое имя слоя Layer:Furniture в верхней строке вкладки Modify.

Включаем привязки 3D

Кнопка Snaps toggle в верхней панели инструментов должна быть нажата. Вызываем окно с настройками привязок нажатием правой кнопкой мыши по этой кнопке. Ставим галочки у следующих привязок: grid points, vertex, midpoint.

Изменяем pivot

Pivot - опорная точка 3d объекта, точка, являющаяся центром поворота и масштабирования объекта. Чтобы изменить положение Pivot у стен, левой кнопкой мыши выбираем стены. Во вкладке Hieararchy (иерархия) → кнопка Pivot → в свитке Adjust pivot нажать кнопку Affect pivot only (влиять только на опорную точку) → кнопка center to object (установить pivot в центр объекта). Важно затем отпустить кнопку кнопку Affect pivot only!

То же самое выполняем для слоя с мебелью.

Л. кн. мыши выбираем слой со стенами. Пр. кн. мыши по кнопке Select and Move вызываем окно Move Transform Type - In. Значения координат по всем осям устанавливаем на ноль.

Стены переместятся в начало координат программы (исчезнут из поля зрения). Тоже самое проделаем с мебелью. Чтобы увидеть наш чертеж, нажимаем горячую клавишу Z (исходное положение объекта). Теперь чертеж лежит на сетке, которая находится в центре системы.

Слой furniture немного переместим по оси X, чтобы мебель не выходила за границы стен. Выключим привязки (они будут мешать в этом случае). Выделяем мебель → нажимаем кнопку Select and Move → наводим мышкой на ось X, так чтобы только эта ось горела желтым → тянем, удерживая нажатой левую кнопку мыши, до тех пор, пока мебель не окажется в пределах стен.

Изменяем параметры сетки

Вызываем окно Grid and Snap Settings (пр. кн. мыши по кнопке Snaps Toggle). Во вкладке Home Grid следующие параметры: Grid Spacing - шаг сетки; Major Lines every Nith Grid Spacing" регулирует, через сколько квадратиков в сетке будут проходить жирные линии; Perspective View Grid Extent - величина сетки, отображаемой в окне перспективы, а именно, сколько будет отображено ячеек от центрального перекрестья сетки в каждом направлении.

При отдалении от объекта шаг сетки увеличивается, при приближении к объекту шаг сетки уменьшается до минимального.

Прячем слой с мебелью

Manage layers → Слой furniture прячем (лампочка у Hide).

В следующей статье мы продолжим работу над проектом.