Вопрос

В настоящее время я работаю над созданием конвейера на основе импорта для моей инди-игры, используя Maya ASCII .ma в качестве исходного формата и мой собственный формат для физики и графики в качестве выходных данных.Я сохраню такие вещи, как атрибуты диапазона движения внутри Maya, например, для шарнирного соединения.Другие типы параметров, которые требуют большого количества настроек, попадают в отдельные исходные файлы (возможно, .ini для таких вещей, как масса, константы пружины, мощность физических движков и тому подобное).

Таким образом, входными данными являются one .ma и one .ini, а выходными данными, среди прочего, являются один файл .physics и несколько файлов .mesh (по одному файлу .mesh на геометрию / материал).

Я также, вероятно, собираюсь использовать Python 3.1 для переформатирования данных, и я уже нашел некоторый код LGPL 2.1, который читает базовый Maya ASCII.Вероятно, я также буду использовать Python для запуска платформы во время разработки.Игра разработана на C ++.

Есть ли во всем этом что-нибудь, против чего вы бы посоветовали?Краткое изложение того, что может быть ошибочным:

  • Конвейер на основе импорта (не на основе экспорта)?
  • Maya (не 3DS)?
  • Maya ASCII .ma (не .mb)?
  • .ini (не .xml)?
  • Разделение атрибутов движения в Maya и атрибутов "freak-tweak" в .ini (не все в Maya)?
  • Python 3.1 для построения данных (не встроенный C ++)?

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

Это было полезно?

Решение

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

  • Maya .ma (по крайней мере, до текущего v.2010) создан mel.Mel является полным по Тьюрингу, но способ описания иерархической сцены в терминах узлов намного более прост, чем “код”.
  • Добавьте обработку ошибок как можно раньше, иначе вы пожалеете позже.
  • Вам приходится обрабатывать множество различных узлов, где преобразования, безусловно, самые неприятные.Другие типы включают сетки, материалы (многих различных типов), “движки шейдеров” и файлы (такие как текстуры).
  • .ma описывает только формы и настройки;но очень редко определяет необработанные вершины.Я решил сохранить небольшой скрипт “экспорта” внутри .ma, чтобы избежать необходимости генерировать все примитивы точно так же, как Maya.Оглядываясь назад, можно сказать, что это был правильный путь.В противном случае вы должны быть в состоянии делать такие вещи, как
    1. “Создать сферу”,
    2. “Переместить мягкое выделение с радиусом такой-то отсюда туда”, и
    3. “Переместить вершину на 252 единицы xyz” (при этом все вершины определены неявно).
  • Maya определяет полигоны для сеток;возможно, вы захотите преобразовать rt в треугольники.
  • Все параметры, которые существуют на узле определенного типа, определены либо явно, либо неявно.Вы должны знать их значения по умолчанию (когда они неявно определены),
  • По сути, объект определяется с помощью преобразования, сетки и примитива.Преобразование является родительским для сетки.Преобразование содержит масштабирование, поворот, перевод, сводные переводы и еще кое-что.Сетка ссылается на примитив и наоборот.Примитив имеет тип (“Поликуб”) и размеры (“ширина, высота, глубина”).
  • Узлы могут иметь “множественное наследование”.Например, mesh, созданный несколько раз, имеет одну mesh (и один примитив), но несколько родительских элементов (преобразований).
  • Преобразования узлов вычисляются следующим образом (см. Maya xform документ для получения дополнительной информации):

vrt = getattr("rpt")
rt = mat4.translation(vrt)
...
m = t * rt * rpi * r * ar * rp * st * spi * sh * s * sp
  • Я строю свой движок на основе физики, поэтому игровой движок хочет, чтобы сетки размещались на физических фигурах, но при моделировании я хочу, чтобы все было наоборот.Это для того, чтобы сохранить его универсальным для будущих приложений (“сетки без физики”).Это крошечное решение причинило мне серьезную боль в процессе трансформации.Линейная алгебра получила освежение в памяти.Проблемы при масштабировании, вращении, перемещении и сдвиге;как ни крути, с меня это хватит.
  • Я создал свой инструмент импорта на cgkitэто анализатор Maya.Спасибо Маттиасу Баасу!
  • Если вы собираетесь сделать что-то подобное, я настоятельно рекомендую вам заглянуть в мой преобразователь прежде чем писать свой собственный.Этот “маленький” проект занял у меня три мучительных месяца, чтобы довести его до базового рабочего состояния.

Другие советы

Как общий формат сериализации, доступный как для чтения, так и для записи человеком, имеет отличную поддержку Python (и, хорошо, Любой языковая поддержка действительно), возможно, вы захотите рассмотреть возможность использования YAML или JSON поверх ini-файлов или XML.

XML может быть приемлемым в вашем случае, если вы никогда не генерируете файлы вручную.

Одним из преимуществ JSON и YAML является набор текста:оба формата анализируются вплоть до списков Python, словарей, значений с плавающей точкой, целых чисел...В основном:вменяемые типы python.

Кроме того, если вы не уверены, что каждая библиотека, которую вы когда-либо будете использовать, работает на 3.1, вам может потребоваться некоторое время придерживаться 2.x из-за проблем с доступностью библиотеки.

Вам следует рассмотреть возможность использования конвейера на основе экспорта или стандартизированного формата файла, такого как OBJ или COLLADA, вместо повторной реализации синтаксического анализатора .ma и репликации всех внутренних компонентов Maya, необходимых для его интерпретации.

Формат .ma /.mb не предназначен для чтения какой-либо программой, кроме самой Maya, поэтому Autodesk не прилагает никаких усилий для упрощения этого процесса.Чтобы разобрать его на 100% правильно, вам нужно было бы реализовать весь язык сценариев MEL.

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

Обратите внимание, что Maya может быть запущена в "безголовом" режиме, когда она загружает сцену, выполняет MEL-скрипт и существует без загрузки графического интерфейса.Таким образом, нет никаких проблем с его использованием в автоматизированных системах сборки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top