Как экспортировать из 3д макса в гигант

Обновлено: 04.07.2024

В данном уроке будет рассмотрен экспорт моделей и материалов из пакета моделирования Autodesk 3ds Max.

Для экспорта используется плагин NeoAxis Engine Exporter для 3ds Max. Плагин предназначен для экспорта трехмерных моделей, материалов, анимации, а также сцен, состоящих из нескольких объектов.

Существует альтернативный способ экспорта моделей с помощью редактора импорта моделей. Рекомендуется использовать NeoAxis Engine Exporter, работа с которым описывается ниже.

Результатом экспорта служат файлы следующих типов:

.mesh — формат 3D моделей,
.skeleton — формат для хранения скелета модели,
.highMaterial — материал,
.scene — промежуточный формат хранения сцены для импорта группы объектов в редактор карт.

Установка и настройка

Установка

Для установки экспортера зайдем в папку SDK\Tools\Exporters\3dsMax и запустим приложение NeoAxisEngineExporterInstaller_3dsMax.exe.

С включенной системой контроля пользователей необходимо запускать установщик с правами администратора.

На этом установка завершена и мы можем перейти к настройке экспортера.

Настройка

Запустим 3ds Max. Для удобства разместим кнопку быстрого вызова экспортера в меню вспомогательных функций. Для этого перейдем на вкладку Utilities и нажмем на кнопку Configure Button Sets.

В окне конфигурации в списке вспомогательных функций, расположенном слева, найдем дополнение NeoAxis Engine Exporter и перетащим его на место одной из кнопок в списке справа.

После того как экспортер занял место в списке, нажмем кнопку OK.

Теперь у нас есть быстрый доступ к функциям экспорта из вкладки Utilities. Нажмем на кнопку NeoAxis Engine Exporter. После этого в, появившемся ниже, меню экспортера нажмем на кнопку Configure Export, чтобы перейти к настройкам экспорта.

В открывшемся окне укажем путь к папке Data движка. Для этого нажмем на кнопку ". " в верхней части окна. В появившемся окне выбора директории укажем путь к папке Data. Все экспортируемые объекты будут помещаться в папку Data или вложенные в нее папки. Путь к папке Data является глобальной настройкой экспортера и используется для всех сцен. Все остальные настройки экспорта относятся к определенной сцене и сохраняются внутри .max файла.

Экспорт статичной модели

Приступим к экспорту 3D модели. Для примера будем экспортировать дом.

Сперва откроем вкладку Utilities, в ней вызовем меню NeoAxis Engine Exporter, в котором нажмем на кнопку Configure Export.

Теперь добавим объект сцены в список объектов экспорта. Для этого нажмем на кнопку "+" в левой части окна.

В появившемся окне выберем нужный объект.

У каждого объекта есть список настроек. Оставим настройки по умолчанию и нажмем на кнопку OK, закончив редактирование настроек экспорта.

Настройки экспорта сцены сохраняются одновременно с сохранением сцены и записываются в файле сцены (.max).

Приступим непосредственно к экспорту объектов. В меню экспортера в группе Main нажмем кнопку Export.

В появившемся окне нажмем на кнопку Export!.

Полученный результат можно увидеть в редакторе ресурсов.

Экспорт анимированной модели

В этом разделе мы рассмотрим экспорт из 3ds Max модели со скелетной анимацией. В качестве примера воспользуемся моделью из типа Girl.type, доступной в SDK. Исходную модель Girl.max можно найти в папке SDK\Tools\Exporters\3dsMax\Examples\Girl.

На вкладке Utilities в меню NeoAxis Engine Exporter нажмем на кнопку Configure Export, чтобы открыть окно настроек экспорта.

Добавим объект Girl в список экспортируемых объектов. Выделим Girl в списке Objects. После этого в правой части окна нам будут доступны настройки экспорта объекта.

Т.к. в данной модели используется скелет, выставим свойство Export Skeleton в значение True.

Для экспорта анимаций потребуется настроить список экспортируемых анимаций. Для этого нажмем на кнопку ". " в поле Animations.

Чтобы добавить анимацию в список воспользуемся кнопкой Add. Каждая анимация характеризуется уникальным именем, форматом, начальным и конечным кадрами. Все эти параметры нужно указать для каждой анимации. После того как список анимаций настроен, нажмем кнопку OK.

Закончим редактирование настроек экспорта, нажав на кнопку OK окна настроек.

Для экспорта моделей в меню экспортера в группе Main нажмем кнопку Export. В появившемся окне нажмем кнопку Export!, а после завершения экспорта нажмем на кнопку Close.

Посмотреть на результат экспорта можно в редакторе ресурсов.

Экспорт сцены (группы мешей)

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

В качестве примера экспортируем сцену, состоящую из трех объектов: строения, стога сена и телеги.

Откроем окно настроек экспорта. Для этого на вкладке Utilities в меню NeoAxisEngine Exporter нажмем на кнопку Configure Export.

Добавим все объекты, присутствующие на сцене, в список. В нашем случае это три элемента. Помимо этого, нужно включить режим экспорта сцены. Для этого выделим корневой объект Objects и установим значение свойства ExportScene в значение True.

Т.к. вся информация о положении объектов хранится в файле сцены, объекты должны экспортироваться без учета глобальной трансформации. В связи с этим, для каждого объекта укажем значение False для свойства Apply World Transform.

Сохраним настройки экспорта, нажав кнопку OK. После этого в меню NeoAxis Engine Exporter в группе Main нажмем кнопку Export. Чтобы запустить экспорт объектов и файла сцены, нажмем кнопку Export!.

По завершению экспорта нам остается лишь импортировать сцену в редакторе.

Запустим редактор карт. Вызовем окно выбора файла сцены через меню File -> Scene File Import -> Import objects. В появившемся окне выберем файл Objects.scene.

Объекты сцены из 3ds Max c помощью несколько кликов появляются на карте.

Работа с настройками экспорта

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

Доступные действия описываются ниже:

Import Загрузить настройки экспорта сцены из файла.
Export Сохранить настройки экспорта сцены в файл.
Clear Очистить настройки экспорта сцены.

Полное описание экcпортера

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

Общие настройки

Обратиться к общим настройкам можно, выделив корневой объект Objects в окне настройки экспорта.

Свиток свойств Materials:

Export Materials - Включить/выключить экспорт материалов. Если выбрано значение True, модели экспортируются вместе с назначенным им материалами.
Materials Directory - Путь к директории для файлов с материалами. Указывается относительно директории "Data". Если путь не указан, то материалы экспортируются в папку "Data".
Materials Name Prefix - Префикс, добавляемый в имена материалов. Это свойство рекомендуется использовать для того, чтобы избежать проблемы с повторяющимися именами материалов после экспорта.

Свиток свойств Meshes:

Max TexCoord Channel Count - Максимальное число текстурных каналов у мешей.
Meshes Directory - Путь к директории для экспорта мешей. Указывается относительно директории "Data". Если путь не указан, то меши экспортируются в папку "Data".

Свиток свойств Scenes:

Export Scene - Включить/выключить экспорт сцен. Если выбрано значение True, то вместе с моделями экспортируется промежуточный файл формата .scene, с помощью которого можно быстро импортировать все объекты сцены на карту в редакторе карт.
Scene Scale - Коэффициент масштабирования сцены с объектами. Используется при импорте в редакторе карт.
Scenes Directory - Путь к директории для экспорта файла сцены. Указывается относительно директории "Data". Если путь не указан, то файл сцены экспортируется в папку "Data".

Свиток свойств Textures:

Base Map Format - Формат, в который преобразовываются текстуры моделей при экспорте. Не затрагивает карты нормалей.
Export Textures - Включить/выключить экспорт текстур. Если выбрано значение True, материалы моделей экспортируются вместе с назначенным им текстурами.
Normal Map Format - Формат, в который преобразуются карты нормалей.
Textures Directory - Путь к директории для экспорта текстур. Указывается относительно директории "Data". Если путь не указан, то текстуры экспортируются в папку "Data".

Настройки объекта

Свиток свойств General:

Allow Merge Sub Meshes - Включить/выключить объединение сабмешей. Если выбрано значение True, то сабмеши одной модели объединяются в один при условии, что им назначен одинаковый материал. В качестве сабмеша может выступать объект из группы.
Edge List - Включить/выключить экспорт списка ребер. Если выбрано значение True, то меш экспортируется со списком его ребер. Эти данные необходимы только для стенсильных теней, которые больше не поддерживаются.
Merge Close Vertices - Включить/выключить объединение близко расположенных вершин. Если выбрано значение True, то в целях оптимизации находящиеся близко вершины объединяются в одну. Близко расположенными вершинами считаются такие вершины, расстояние между которыми меньше, чем значение, указанное в параметре Merge Close Vertices Radius.
Merge Close Vertices Radius - Радиус объединения близко расположенных вершин. Если расстояние между двумя вершинами меньше указанного значения, то вершины считаются близко расположенными и могут быть объединены. Используется при включенном параметре Merge Close Vertices.
Sub Directory - Поддиректория для экспорта объекта. Путь указывается относительно общей папки для экспорта мешей. Если значение не указано, то объект быть экспортирован в общую для мешей директорию (см. параметр Meshes Directory общих настроек).
Name - Имя трехмерной модели. Используется как имя файла для меша.
Tangents - Включить/выключить экспорт канала с касательными векторами. Эти данные необходимы для карт нормалей.
Vertex Colors - Включить/выключить экспорт цветов вершин. Если выбрано значение True, то для каждой вершины будет экспортирован её цвет.

Свиток свойств Transform:

Apply World Transform - Включить/выключить применение глобальной трансформации. Если выбрано значение True, то к мешу применяется глобальная трансформация в сцене.
Scale - Коэффициент масштабирования модели.

Свиток свойств Animation:

Animations - Список анимаций модели.
Export Skeleton - Включить/выключить экспорт скелета. Если выбрано значение True, модель экспортируется вместе с файлом скелета.
Frame Step - Шаг, с которым экспортируются кадры анимации. Это значение показывает на сколько кадров анимации в пакете моделирования будет приходиться 1 кадр анимации экспортированной модели.
Morph Interpolation Error - Погрешность интерполяции при подсчете ключевых кадров в морф-анимации. Чем больше значение, тем меньше будет ключевых кадров и соответственно, меньше размер файла модели. Чем меньше значение, тем точнее будет анимация, но и ключевых кадров будет больше. А значит размер файла модели увеличится.

Свиток свойств LODs:

LODs Count - Количество лодов (упрощенных копий с меньшим количеством полигонов) у объекта. Об автоматическом создании лодов можно узнать здесь.
LODs Distance - Дистанция до камеры, после которой начинается следующий уровень LOD.
LODs Reduction - Процент граней, убирающихся на уровне LOD, по отношению к предыдущему.

Свиток свойств Scene Export Only:

Allow Decals - Разрешить/запретить прикрепление декалей к данному объекту. Если прикрепление декалей включено, то декали будут отображаться на объекте (к примеру, следы от пуль, взрывов).
Cast Dynamic Shadows - Включить/выключить генерацию динамических теней от этого объекта.
Cast Static Shadows - Включить/выключить генерацию статических (лайтмап) теней от этого объекта.
Collision - Включить/выключить расчет столкновений с объектом. Если расчет столкновений отключен, то другие физические тела (например, персонажи) будут проходить сквозь объект.
Collision Material Name - Имя физического материала. Допускается указание одного из четырех стандартных физических материалов — Metal, Wood, Rubber, Ice. Также разрешается указывать имена физических материалов, созданные пользователем. Данный параметр влияет на свойства взаимодействия физических тел. К примеру, если при экспорте ящика, выставить в текущем параметре Ice, а в режиме симуляции подойти к нему и толкнуть, то ящик будет кататься и скользить как по льду.
Collision Special Mesh Name - Меш для расчета столкновений. Может использоваться для облегчения расчета столкновений сложных физических объектов. Если указать другой меш, то при столкновениях будет учитываться именно он, а отображаться будет исходная трехмерная модель.
Force Material - Переопределенный материал для объекта. Если имя материала задано, то вместо исходного материала трехмерной модели, будет использоваться материал, имя которого указано в данном параметре.
Receive Static Shadows - Включить/выключить рисование теней на данном объекте. Если указано значение True, то тени, отбрасываемые другим объектами будут рисоваться на данном объекте.
Rendering Distance - Дистанция, после которой объект не будет виден. При значении 0 объект будет прорисовываться всегда.
Render Queue Group - Очередь рендеринга объекта относительно других объектов.
Split Geometry - Включить/выключить автоматическое разрезание меша на маленькие куски. Размер кусков регулируется параметром Split Geometry Size. Это позволяет менеджеру сцены лучше отсекать геометрию, не попавшую на экран. Это параметр полезно использовать только для очень больших объектов. Например, комнат, зданий, внутри которых находится персонаж.
Split Geometry Piece Size - Размер ячеек разрезания. Чем выше значение, тем ячейки крупнее. Используется при включенном параметре Split Geometry.

Настройки сабмеша

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

Свиток свойств General:

Allow Collision - Разрешить/запретить расчет столкновений для данного сабмеша. Если расчет столкновений отключен, то другие физические тела (например, персонажи) будут проходить сквозь данную часть объекта.
Text User Dictionary - Хранилище пользовательских текстовых значений. Позволяет добавить к сабмешу текстовую информацию в виде списка ключ — значение. Применяется для нужд разработчика.
UV Unwrap Channel - Канал текстурных координат с разверткой.

Свиток свойств Geometry:

Invert Normals - Включить/выключить инвертирование нормалей.

Свиток свойств Material:

Override Material - Имя материала для переопределения исходного материала. Если имя задано, то вместо материала сабмеша, будет использоваться указанный в данном параметре материал.

Настройки анимации

При нажатии на кнопку ". " поля Animations в свойствах объекта, появляется окно настройки анимаций. Под настройкой анимаций подразумевается создание и редактирование списка анимаций модели.

Каждая анимация (элемент списка анимаций) обладает следующими характеристиками:

_Name - Имя анимации.
Disable Bones - Список костей, которые нужно исключить из экспорта. Кости в списке перечисляются через символ ';'. Используется только для скелетной и комбинированной анимации.
Format - Формат анимации. Предлагается выбрать между следующими значениями: Skeleton (скелетная анимация), Morph (вершинная анимация), Pose (pose-анимация), SkeletonAndMorph (комбинированная скелетная и вершинная анимация), SkeletonAndPose (комбинированная скелетная и pose-анимация).
Frame Begin - Кадр начала анимации.
Frame End - Кадр окончания анимации.

Экспорт материалов

NeoAxis Engine Exporter поддерживает экспорт основных свойств из материалов 3ds Max. Перечень соответствий приводится в таблице ниже.

Diffuse1Map - Текстура, назначенная параметру Diffuse Color.
DiffuseColor - Если материалу назначена текстура к параметру Diffuse Color, то используется ее Amount. Если текстуры нет, то используется цвет параметра Diffuse Color.
SpecularMap - Текстура, назначенная параметру Specular color.
SpecularColor - Если материалу назначена текстура к параметру Specular Color, то используется ее Amount. Если текстуры нет, то используется цвет параметра Specular Color.
SpecularShininess - Вычисляется самим 3ds Max на основе параметров Specular Level, Glossiness и Soften.
EmissionMap - Текстура, назначенная параметру Self-Illumination.
EmissionColor - Если материалу назначена текстура к параметру Self-Illumination, то используется ее Amount. Если текстуры нет, то используется цвет параметра Self-Illumination, если он назначен, или значение параметра Self-Illumination, если цвет не указан.
NormalMap - Текстура, назначенная параметру Bump.

Кроме того, при экспорте материалов учитывается параметры Opacity и 2-Sided. В материалах NeoAxis Engine на прозрачность влияют два параметра: Blending и альфа-канал параметра DiffuseColor. Blenging включает прозрачность, а альфа-канал у DiffuseColor указывает степень прозрачности. Если включено свойство 2-Sided, то у материала NeoAxis параметр DoubleSided так же будет включен.

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

Например, при проектировании зданий и сооружений для конструкторской проработки, построения моделей и оформления документации используется AutoCAD, а для подготовки качественных фотореалистичных изображений и видеороликов – 3ds Max.

Работа над одним проектом в нескольких программных продуктах сопряжена с необходимостью передачи данных из одной системы в другую. Каждая программа обрабатывает и хранит данные в своем формате, поэтому для передачи данных необходимо выполнять операции экспорта и последующего импорта геометрии и данных. Чертежи и модели в AutoCAD сохраняются в формате DWG, а модели в 3ds Max в файлах MAX, поэтому нельзя просто так открыть модель AutoCAD в 3ds Max, и наоборот.

В этой статье мы рассмотрим способы импорта данных из AutoCAD в 3ds Max и наоборот, импорта из 3ds Max в AutoCAD.

Из AutoCAD в 3ds Max

Из AutoCAD в 3ds Max можно передать как плоские чертежи, так и модели.

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

3ds Max поддерживает прямой импорт геометрии из файлов формата DWG.

Как сделать импорт из AutoCAD в 3ds Max:

  • Построим или откроем готовую модель здания в AutoCAD и сохраним файл в формат DWG. Обратите внимание, что данный файл содержит как плоский чертеж, так и 3D-модель.

Из AutoCAD в 3ds Max

  • Открываем 3ds Max и настраиваем единицы измерения в проекте. По умолчанию в 3ds Max установлена имперская система измерений, а поскольку модель в AutoCAD построена в метрической системе, то и в 3ds Max тоже необходимо установить нужные единицы.

Из выпадающего меню «Customize» выбираем «Units Setup». В появившемся окне в области «Display Unit Scale» устанавливаем «Metric» и выбираем миллиметры.

Затем нажимаем кнопку «System Unit Setup» и устанавливаем «System Unit Scale» в миллиметрах.


  • В меню программы выбираем команду «Import», выбираем формат файла DWG и указываем файл, который необходимо импортировать из AutoCAD.
  • Настраиваем параметры импорта в появившемся окне «AutoCAD DWG/DXF Import Options»

Обратите внимание на параметры «Auto-smooth adjacent faces» и «Curve steps», которые отвечают за сглаживание кривых. Конкретные их значения сильно зависят от геометрии, которую вы хотите импортировать, и подбираются индивидуально в каждом конкретном случае.


    • После завершения импорта мы получим в 3ds Max точно такую же геометрию, как и в AutoCAD, но уже во внутреннем формате.


    Не забывайте, что все твердотельные модели AutoCAD преобразовались при импорте в сеточные тела


    Если вы хотите импортировать в 3ds Max плоский чертеж AutoCAD, то сначала убедитесь, что вся геометрия чертежа создана с помощью полилиний и сплайнов, а не разрозненных отрезков и дуг. Для преобразования отрезков и дуг в полилинии используйте команду ПОЛРЕД.

    Теперь, когда мы импортировали модель из AutoCAD в 3ds Max, то можем сохранить все данные во внутреннем формате 3ds Max – в файле с расширением MAX.

    Из 3ds Max в AutoCAD

    Любую модель, построенную в 3ds Max, можно экспортировать в AutoCAD.

    В AutoCAD нет инструмента прямого импорта данных из файлов MAX, поэтому модель 3ds Max необходимо сначала преобразовать в формат DWG, 3D Studio или Autodesk FBX.


    Рассмотрим процесс экспорта модели из 3ds Max в AutoCAD через формат DWG:


    • Создаем модель в 3ds Max или открываем готовую, а затем экспортируем ее в формат DWG.

    В меню приложения выбираем команду «Export» и указываем формат AutoCAD DWG

      • Настраиваем параметры экспорта в появившемся окне «Export to AutoCAD File». Обратите внимание, что можно экспортировать как всю модель («Entire Scene»), так и выбранные элементы («Selected Objects»)


        • Переходим в AutoCAD и стандартными командами открываем полученный файл DWG


        Как видите, импорт из 3ds Max в AutoCAD прошел корректно, вся геометрия, включая назначенные цвета, полностью преобразовалась. Как уже отмечалось ранее, 3ds Max работает только с сеточными телами, поэтому и импортированные в AutoCAD тела представляют из себя сети.

        Заключение

        Задача передачи данных из AutoCAD в 3ds Max и обратно возникает часто, особенно при работе над сложными архитектурно-строительными проектами. Передать геометрию из одной программы в другую очень просто, нужно лишь знать некоторые особенности, о которых мы рассказали в этой статье.

        Но есть несколько особенностей, которые нужно знать:

        Первое - масштаб объекта (Scale).

        Для одного статичного объекта не имеет большого значения – равен масштаб единице или нет, а вот для нескольких объектов, а так же для динамических и кинематических твердых объектов изменение масштаба приведет к не правильным результатам. Масштаб изменяется всегда, когда Вы сжимаете или растягиваете объект, но привести значения Scale к 1 не составляет никакого труда.


        Выделите объект и выполните Modify > Freeze Transformations, все трансформации обнулятся.
        Так как файлы Майя и файлы i3d всегда идентичны по размеру, после экспорта объекта в файл i3d и подгонки там его размеров – можно выставить те же значения в майе, заморозить трансформации и уже от правильно отмасштабированного объекта строить модель дальше.

        Второе – имя объекта или группы и история.

        Чтобы потом не плутать в i3d файле в огромном списке объектов (половина из которых уже не существует) регулярно «убивайте» историю: Edit > Delete by Type > History, а чтобы поменять имя объекта на более значимое, откройте в Майе Outhliner, двойным щелчком на откройте строку имени, поменяйте его и сохраните изменение (Enter).

        Пивоты объектов очень часто расположены не там где нам нужно. То дверь крутится вокруг собственного центра, то колеса вокруг центра сетки. Конечно, все расставляют пивоты на свои места (напомню: жмем W > insert и тащим изменившийся манипулятор куда нужно). Но, при экспорте в i3d вдруг обнаруживается, что пивоты всех объектов находятся в центре координатной сетки. Конечно, можно создать в GE группу, вставить в нее объект и подогнать его в группе так, чтобы при перемещении группы он вращался вокруг нужной точки. А можно избежать этих «танцев с бубнами» если во время конвертирования прибить все пивоты в майя-файле к своим местам.
        Выделите объект, откройте окно экспорта и выберите в третьей вкладке Tools нажмите кнопку FreezeToPivot.
        Откройте предпросмотр и выделяя объекты убедитесь, что все пивоты на своих местах.

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

        Вкратце, в статье пойдет речь о нюансах, с которыми вы (хотите или нет) обязательно столкнётесь при написании плагина экспорта из 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. Отрицательное масштабирование.

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

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

        Иногда проблемы возникают из-за незнания интерфейса 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().

        Читайте также: