Экспорт модели из 3ds Max

Материал из BestWay wiki
Перейти к: навигация, поиск

Общие сведения


При первом экспорте новой модели для нее создается файл описания (.def), который в дальнейшем не перезаписывается во избежание потери настроек. Все остальные файлы, создаваемые плагином, перезаписываются без предупреждения. Файлы текстур перезаписываются только в том случае, если при экспорте исходная текстура имеет более позднее время модификации. Для получения правильных пропорций модели в игре, необходимо установить в 3DMAX единицы измерения в метры (Customize->Units Setup: Display Unit Scale: Meters). Не меняйте System Unit Scale (Кнопка System Unit Setup) – это приведет к неправильному масштабу. System Unit Scale должен оставаться 1 Unit = 1 Inch. Перед экспортом модели необходимо убедиться, что все текстуры, участвующие в экспорте, доступны для чтения и назначены используемые текстурные каналы. Проще всего в этом убедиться, отрендерив сцену. При этом не должно выдаваться никаких предупреждений, касающихся текстур и материалов. Исключение составляют материалы и текстуры, используемые на скрытых при экспорте или вспомогательных костях, для которых не экспортируется мэш. Некоторые часто возникающие ошибки при моделировании и способы их устранения описаны в разделе FAQ.



Структура сцены для экспорта одной или нескольких моделей


Объекты, относящиеся к одной модели, должны быть слинкованы в дерево. Корневая кость, идентифицирующая модель, не должна иметь родительского линка. Локальная ориентация этой кости должна совпадать с ориентацией системы координат 3DSMAX, а ось X направлена в сторону «лицевой» части модели. В этой корневой кости обязательно должны быть прописаны в “Properties->User defined” (далее просто в параметрах) следующие строки:

Type=<тип игрового объекта>
Model=<каталог модели внутри ресурсов игры>

Пример: модель будет записана в папку «{Путь к ресурсам игры}/entity/flora/tree/aspen»

Type=entity
Model=entity/flora/tree/aspen

Каждому объекту (node в терминах 3DSMAX) сопоставляется кость в иерархии скелета модели. Исключение составляют объекты типа shape и полигональные объекты, в параметрах которых написано ключевое слово Volume. Группа объектов (group) идентифицируется как одна кость. Плагин позволяет экспортировать несколько моделей из одного .max-файла. Отдельная модель идентифицируется корневыми объектами в сцене, в которых прописаны параметры Type и Model. Если корневая кость не участвует в анимации, то ее координаты в сцене не имеют значения. Важно: ориентация корневой кости должна соответствовать ориентации системы координат 3DSMAX. Если некоторая кость должна содержать полигональный вид (мэш), то в параметрах соответствующего объекта или группы необходимо прописать ключевое слово Poly. Рекомендуется использовать Dummy или Point helper для задания кости без полигонального вида. Если часть объектов в иерархии, относящейся к модели, является вспомогательной для моделирования, то перед экспортом такие объекты необходимо скрывать во избежание предупреждений или экспорта лишних костей. Все объекты, относящиеся к одной модели, должны иметь уникальные имена. Исключение составляют объекты внутри групп. Для объемов допускается использовать суффикс “_vol”, который автоматически отбрасывается при экспорте. Например, объем с именем “Body_vol” будет экспортирован как “Body”.

Важно

При экспорте не учитываются флаги наследования трансформации, поскольку в игре все трансформации передаются от родительского к дочернему объекту.

Замечание

Регистр букв в названиях всех параметров необходимо учитывать. После последнего параметра обязательно сделать пустую строку



Полигональные виды


Для того, чтобы в игре получить кость, имеющую полигональный мэш, необходимо в параметрах соответствующего объекта или группы указать Poly. Это могут быть стандартные объекты или объекты типа Editable mesh или Editable poly (полученный любым доступным способом, главное, чтобы конечный мэш был представим в виде треугольников). Поддерживается экспорт мэшей с модификатором Skin. При этом контрольных костей должно быть не более 255. Из всех костей, действующих на вершину, выбираются две наиболее влияющие. Следует учитывать это при распределении весов. Для задания материалов, используемых на полигональных видах, используется специальный тип материала EclipseMtl, предоставляемый в виде отдельного плагина.



Материалы


Для задания текстур, EclipseMtl использует в качестве дочернего один из стандартных материалов (Standard, Blend, RGB Multiply). Тип материала Standard является основным, и используется для подавляющего большинства материалов. Диффузная (основная) текстура берется из настроек диффузной текстуры стандартного материала. Если материал использует бамп и/или спекулярную карту, то соответствующие текстуры берутся соответственно из настроек bump и specular level стандартного материала. В текущей версии не поддерживаются спекулярные материалы без маски. Подробнее о типах материалов.

Флаг Premultiplied Alpha игнорируется. Формат исходных файлов текстур может быть любой, поддерживаемый 3DSMAX, однако рекомендуется использовать напрямую поддерживаемые игрой форматы BMP и TGA и DDS (последний предпочтителен, поскольку позволяет управлять MIP-уровнями и компрессией). Процедурные текстуры не поддерживаются. Так же не поддерживается генерация текстурных координат “Planar from World XYZ”. Поддерживается экспорт анимированных текстур (avi, gif), при этом они преобразуются в последовательность кадров в формате bmp. Следует заметить, что анимированные текстуры могут занимать значительный объем видеопамяти и заметно дольше загружаются. Рекомендуется использовать текстуры размером сторон степени 2 (2, 4, 8, 16, 32, 64, 128, 256, 512, 1024). При этом текстура не обязательно должна быть квадратной. Возможно использование и текстур других размеров, но при этом если текстура не объединяется с другими при загрузке в игре, будет нерационально расходоваться видеопамять за счет доращивания текстуры до размеров степени 2.

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

Важно

Всегда используйте разрешение текстуры не больше, чем видимое разрешение в реальной игровой сцене. Ни в коем случае нельзя использовать Cropping/Placement, поскольку текстура всегда экспортируется полностью и в результате получится некорректное текстурирование.



Инверсная кинематика


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

IKType={prizmatic|revolute|socket}
IKTerminate -- указывает, что эта кость последняя в цепочке кинематики

Чтобы установить пределы IK необходимо в параметрах объекта написать следующее: Для призматической привязки (1 единица = 1/20 = 0,05 метра):

IKMin=<минимальное смещение относительно базового положения>
IKMax=<максимальное смещение относительно базового положения>
IKSpeed2=<максимальная скорость перемещения,  метров  в секундуб по-умолчанию 0.25 м/с>

Для вращательной привязки:

IKMin=<минимальный угол поворота базового положения в градусах>
IKMax=<максимальный угол поворота базового положения в градусах>
IKSpeed=<максимальная скорость поворота, градусы в секунду, по-умолчанию 30?/с>

Следует отметить, что ограничение (-45?, 45?) противоположно ограничению (45?, 315?), а ограничение (45?, -45?) считается ошибочной и рассматривается как (-45?, 45?). Для socket-привязки:

IKLimit=<угол> -- угол конуса в градусах, ограничивающего socket-кинематику



Объемы (volumes)


Объемы для взаимодействия задаются полигональными объектами, в которых вместо Poly указан параметр Volume. Для объемов не создается отдельная кость, поэтому они должны быть прилинкованы к другому объекту (это может быть любой объект в иерархии модели), вместе с которым объем должен изменять свою ориентацию и/или положение. Объемы должны удовлетворять нескольким условиям: Объект должен быть выпуклым. Не допускается результирующее непропорциональное или зеркальное масштабирование. Под словом «результирующее» подразумевается, что недостаточно, чтобы только локальная трансформация объема была корректной. Вся цепочка до корневой кости в этом случае не должна содержать отзеркаливаний или непропорционального масштабирования. Не допускается объектная (Pivot only) трансформация. Для стандартных объектов типа Sphere, Box, Cylinder не допускается никакая трансформация кроме как изменением соответствующих параметров. Рекомендуется использовать простые геометрические объекты Sphere, Box, Cylinder везде, где это возможно для задания объема. При этом объект не должен быть преобразован в Editable mesh или Editable poly. В противном случае объем экспортируется как наиболее медленный (в смысле затрат на расчет взаимодействия в игре) полигональный объем. Параллельно с объемом плагин может автоматически создать зону препятствия для движения (obstacle). Для этого в параметрах объекта необходимо написать Obstacle. Зона рассчитывается путем проецирования соответствующего объема на плоскость земли. Если сгенерированная зона не устраивает, то ее необходимо создать вручную, удалив при этом из параметров объема слово Obstacle.

Важно

Всегда проверяйте объемы, полученные в результате экспорта, в редакторе включением режима отображения объемов Alt+V.



Зоны (zones)


Зоны для взаимодействия задаются плоскими объектами типа Shape. При этом объекты обязательно линкуются к корневой кости, поскольку в игре не поддерживается трансформация зон кроме как трансформацией всей модели. Для экспорта зоны в параметрах соответствующего объекта указывается ключевое слово Obstacle (зона непроходимости) или Area (прочие зоны). Для того, чтобы зона перемещалась и поворачивалась с моделью в игре, в параметрах объекта необходимо указать Rotate. Если необходимо учитывать только перемещение, то в параметрах вместо Rotate указывается Move. Если указать Static, то зона никак не будет реагировать на изменение положения и ориентации модели. Как правило, тип трансформации зоны указывается Rotate. Зоны должны удовлетворять нескольким условиям: Зона должна быть выпуклой. Не допускается объектная (Pivot only) трансформация. Для стандартных объектов типа Circle или Rectangle не допускается трансформация кроме как изменением соответствующих параметров. Рекомендуется использовать простые геометрические объекты Circle или Rectangle везде, где это возможно для задания зоны. В противном случае зона экспортируется как наиболее медленная (в смысле затрат на расчет взаимодействия в игре) полигональная зона.

Важно

Всегда проверяйте зоны, полученные в результате экспорта (в том числе и автоматически сгенерированные), в редакторе включением режима отображения зон Alt+A.



Анимация


Перечень анимаций задается для каждой модели отдельно и сохраняется в сцене. Стандартно все анимации привязываются к базовой кости скелета, однако могут быть анимации, привязанные к любой другой кости. Эта привязка сугубо логическая, зависящая от использования анимации в игре, и не влияет на то, какие кости могут быть в ней задействованы. Для каждой анимации задаются: диапазон ключевых кадров, перечень костей, участвующих в анимации, название анимации, название файла, в который будет записана анимация, коэффициент масштабирования скорости проигрывания. В кости, к которой привязана анимация задается один или несколько (по одному на каждую анимацию) параметров Animation, AnimationResume или AnimationAuto в формате: Animation=<имя анимации>,<именованное выделение>,<начальный кадр>-<конечный кадр>[,<имя файла анимации>][,<скорость проигрывания в игре в % от 50 кадров/сек>] AnimationAuto вместо Animation означает, что данная анимация будет автоматически запущена циклически при появлении модели в игре. Использование пробелов не допускается, если пробел не является частью имени (не рекомендуется). AnimationResume вместо Animation означает, что данная анимация требует поддержки возобновления после приостановки, иначе анимация может быть либо проиграна до конца, либо перезапущена сначала. Задание именованного выделения с объектами, участвующими в анимации, является необходимым условием возможности одновременной работы нескольких анимаций на одной модели. При этом, никакие две одновременно запущенные анимации не могут использовать одну и ту же кость, поскольку результат получится непредсказуемый. Следует иметь это ввиду при создании выделений для анимаций. Так же не стоит включать в выделение лишние кости, не участвующие в анимации во избежание возможных конфликтов в процессе игры с инверсной кинематикой. Имя файла, в который записывается анимация, совпадает по-умолчанию с именем анимации. Однако, часто необходимо экспортировать несколько анимаций с одинаковым именем, но относящимся к различным костям (например, анимации с именем «break» для покомпонентного разрушения). Для этого и введена возможность указания файла анимации. Пример 1: анимация с именем start, анимируемые объекты берутся из именованного выделения chassis, анимация расположена в кадрах с 10 по 25 в шкале анимации, установить скорость проигрывания по-умолчанию 35% от скорости 50 кадров в секунду, записать анимацию в файл start.anm.

Animation=start,chassis,10-25,35

Пример 2: анимация с именем stop, анимируемые объекты берутся из именованного выделения chassis, анимация расположена в кадрах с 26 по 40 в шкале анимации, установить скорость проигрывания по-умолчанию 35% от скорости 50 кадров в секунду, записать анимацию в файл stop_body.anm.

Animation=stop,chassis,26-40,stop_body,35

Анимация может быть двух видов: скелетная -- анимируются матрицы трансформации костей, и мэшевая -- анимируется сам полигональный вид. Допускается произвольное совмещение обоих типов анимаций. Так же допускается использование мэшевой анимации на скиновых мэшах. По-умолчанию подразумевается скелетная анимация, при этом возможные изменения в мэше игнорируются. Если для объекта необходимо учитывать анимацию вершин, то в параметрах этого объекта следует написать CommonMesh. Чаще всего такой вид анимации используется на группах, постольку все объекты группы объединяются в один мэш, и необходимо, например, сделать анимацию разрушения этой группы. Следует использовать мэшевую анимацию рационально, по возможности заменяя ее скелетной путем разбиения группы на несколько групп, поскольку такая анимация занимает гораздо больший объем памяти, дольше загружается и, что важнее всего, требует модификации буфера вершин в процессе игры. Допускается создание анимации любыми средствами 3DSMAX, поскольку анимация экспортируется покадрово (не по ключам), путем сравнения состояния объекта в последовательных кадрах. Некоторые ограничения накладываются на мэшевую анимацию. Для мэшевой анимации отслеживается изменение состояния вершин (позиция, цвет, нормаль, текстурные координаты), причем вершины идентифицируются и объединяются (при обнаружении двух с абсолютно одинаковым содержимым) по нулевому кадру на шкале анимации. При этом следует понимать, что автоматически объединенные в 0-м кадре вершины в дальнейшем в анимации рассматриваются как одна вершина, что может привести к некорректной анимации в игре, если в анимации эти вершины изменяются неодинаково. Такие вершины необходимо принудительно разделить по позиции, цвету, материалу, текстурным координатам или группе сглаживания (последнего может быть недостаточно, если смежные треугольники копланарны)..

Важно

Никакие две анимации, использующие один и тот же объект, не должны пересекаться по кадрам.



Часто Задаваемые Вопросы


Q) При экспорте возникла ошибка, после которой 3DSMAX перезагрузился. Повторный экспорт привел к тому же результату. A) Обычно это является следствием некорректной структуры модели, которая не определяется при предварительном контроле плагином. Вот некоторые из них:

  • Линки объектов внутри группы к объектам вне этой группы. Внимательно поверьте правильность линковки, возможно заново перегруппировав и слинковав объекты. Так же иногда модели, конвертированные из более ранних версий 3DSMAX, имеют разрушенный канал вершинной альфы. Такое лечится только созданием объекта с нуля.
  • Пересекающиеся по кадрам анимации, использующие один и тот же объект. Внимательно проверьте диапазоны анимаций и используемые при этом выделения.

Q) После экспорта модели в игре часть полигонов модели не видно. A) Такое в подавляющем большинстве случаев происходит из-за нулевой альфы в вершинах. Даже если альфа изначально была правильной (100 %), то в процессе редактирования 3DSMAX ее часто теряет. Выделите все вершины такого мэша и установите значение альфы в 100 или те значения, которые необходимы в случае использования полупрозрачности. Иногда, при конверсии текстур из форматов, отличных от BMP и TGA плагину не удается получить корректные значения цвета пикселей. При этом текстура экспортируется как полностью черная. Следует удалить такую текстуру, отрендерить сцену (интерфейс текстуры при этом корректно восстанавливается) и повторить экспорт.

Q) После экспорта модели в игре часть полигонов модели абсолютно черная. A) См. второй случай предыдущей проблемы.

Q) После экспорта в игре некоторые объемы модели имеют некорректное положение. A) Не допускается изменение Pivot’а для объемов. Восстановите исходное положение и ориентацию Pivot’а и верните объем в нужное положение перемещением и поворотом объекта.

Q) При экспорте плагин выдает ошибку «Матрица для объема 'ХХХ' неортогональная или содержит масштабирование» или «Матрица для объема 'ХХХ' содержит зеркальное масштабирование». A) Неортогональность часто возникает при применении видовых трансформаций масштабирования , когда система координат вида не соответствует локальной системе координат объекта. Вообще, для объемов не допускается использования функции масштабирования или отзеркаливания. Подробнее см. раздел «Объемы для взаимодействия».

Q) При экспорте плагин выдает ошибку «Матрица для кости 'ХХХ' не ортогональна или содержит неодинаковое масштабирование по осям». A) Неортогональность часто возникает при применении видовых трансформаций масштабирования , когда система координат вида не соответствует локальной системе координат объекта. Непропорциональное масштабирование объекта так же не допускается. Если это необходимо, примените такую трансформацию в режиме редактирования мэша. Большинство ошибок масштабирования и отзеркаливания решаются следующим образом:

  1. Создается новый объект, например Box.
  2. Созданный объект преобразуется в Editable mesh.
  3. Совмещаем Pivot по позиции и ориентации (с учетом возможного некорректного масштабирования или отзеркаливания) с Pivot’ом исправляемого объекта.
  4. Делаем Attach к нему мэша исправляемого объекта.
  5. Удаляем в полученном мэше элемент Box.
  6. Восстанавливаем имя и линковку полученного нового объекта.