Формат файла для статических и анимированных 3D моделей

22

В настоящее время я пишу 3D-игру на C ++ с OpenGL и перехожу к той части, где нужно загружать 3D-модели. Поэтому я ищу популярные форматы файлов и методы для

  • отображать статические сетки и
  • рендеринг анимированных сеток.

Я уже нашел довольно большое количество возможных форматов и техник, таких как анимация ключевых кадров, скелетная анимация, от MD2 до MD5, 3DS, X, Collada и т. Д.

Для простоты я хотел бы использовать формат (и технику), который допускает как статические, так и анимированные сетки. Поэтому мой вопрос: подходит ли один формат для этой задачи и какой вы бы предложили? И чтобы уточнить: мне не нужны супер-плавные анимации или новые функции.

Sidenote: Поскольку я фанат блендера (но не эксперт ;-)), было бы полезно, если бы его можно было использовать с этим - но, конечно, это не должно быть ограничителем шоу, здесь.

stschindler
источник

Ответы:

16

Позвольте мне предложить вам использовать Collada .

Он широко поддерживается инструментами DCC и хорошо стандартизирован. Он поддерживает скелетную анимацию и ... ну, он делает почти все, включая шейдеры и физику - они не будут актуальны для вас.

Анимации на основе вершин, такие как в форматах MDL или MD2, являются более или менее пережитком прошлого. Сегодня большинство анимаций представляют собой скелетные анимации (т. Е. Подумайте, гладко ли сфальсифицированы персонажи), и инструменты создания контента для них оптимизированы.

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

Чтобы загрузить Collada, используйте библиотеки, такие как FCollada или ColladaDOM (не пытайтесь разобрать его самостоятельно, Collada - действительно толстый монстр XML ...). Также есть Open Asset Import Library , которая загружает ~ 25 форматов файлов, включая Collada (и все другие форматы, которые вы упомянули). Это был бы отличный выбор, поскольку он нацелен на разработчиков игр и обеспечивает вывод в формате, подходящем для рендеринга в реальном времени. Но, если честно: я один из его соавторов, поэтому я, вероятно, немного предвзят.

И последнее, но не менее важное : формат файла, который вы используете для импорта ваших активов, не должен определять возможности вашего движка и техник, которые он использует, - скорее, он должен быть наоборот. Является ли ваша анимация сверхгладкой, вопрос не в формате импорта, а в том, какую технику вы используете для анимации сеток и насколько хорошо они моделируются в первую очередь. Формат импорта должен просто помочь вам перенести данные из Blender в вашу игру.

Александр Гесслер
источник
Большое спасибо за ваш подробный ответ. Сегодня я впервые услышал о Collada (по рекомендации друга) и не был уверен, действительно ли он готов к использованию в производственной среде. Я сейчас попробую, спасибо. :-)
stschindler
2
Хороший совет, особенно ссылка на AssImp. Однако я бы не предложил COLLADA, так как никто не может последовательно и правильно поддерживать все это, и он достаточно велик для реальных целей контента. Я бы предложил использовать что-то вроде MD5, которое дает вам скелет и довольно широко реализовано правильно (я думаю). Я бы тоже так легко не отмахнулся от MD2; Есть много примеров моделей для этого, и вы можете тривиально анимировать это дешево (хотя это бесполезно для тряпичных кукол или чего-то еще).
ChrisE
Я просто поиграюсь с разными форматами файлов. Благодаря AssImp это будет легко сделать. MD2 действительно была моей первой идеей, однако, я думаю, ее создание довольно дорого, вместо того, чтобы просто экспортировать нужные кости. Ragdolls в моем случае не нужны, мне просто нужны анимированные модели, без физики.
stschindler
Есть действительно очень плохие экспортеры Collada, но по крайней мере этот формат хорошо документирован, поэтому вы всегда знаете, кого винить :-). MD5 тоже хороший кандидат, но я не знаю, насколько хороши экспортеры Blender. MD2 имеет очень ограниченное представление вершин и страдает от ограничения размера и точности. Я бы на самом деле не использовал его, для этого нет никаких оснований.
Александр Гесслер
wazim.com/Collada_Tutorial_1.htm - довольно хорошее углубленное руководство по загрузке collada, но я все равно рекомендую использовать библиотеку.
Exilyth