Рекомендуемый тип 3D-модели для внутриигровой модели персонажа, загружается вручную?

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

Какой тип файла вы рекомендуете использовать? .смешивать? .x, .3ds, .md2 / 3/5, ... ?? Помните, мне бы хотелось что-то с четко определенным форматом, чтобы я мог написать загрузчик без необходимости деобфускации какого-либо случайного формата файла, и он должен поддерживать вышеупомянутые функции. Любая другая информация, которую вы можете предоставить о том, почему вы выбрали его и почему это лучше всего, тоже будет очень полезна!

Спасибо!

РЕДАКТИРОВАТЬ: Я буду писать экспортер Blender MS3D. Когда я закончу, я отправлю это здесь .

А пока см. Мой отмеченный ответ ниже; но с тех пор произошло еще больше. Я не собираюсь обновлять это в соответствии с тем, что я делаю, но в основном я нашел jMonkey Engine, и в нем уже есть импортер ms3d и другие подсистемы, которые я начал писать вручную. Несмотря на элементы графа сцен (вот почему я избегал Java3D), я думаю, что лучше всего будет объединить усилия с ним, так что это то, чем я занимаюсь.

Ответов (5)

Решение

Прежде всего, спасибо двум другим ответившим. Кроме того, basszero, ты был прав насчет файла blend, и мне следовало сначала проверить Википедию! Это почти бесполезный двоичный дамп памяти Блендера.

Вскоре после того, как я написал этот вопрос, я решил пойти дальше и написать загрузчик OBJ, потому что 1) он дал бы мне опыт загрузки формата файла 3D и 2) он казался красивым, часто используемым форматом, но также легко загружаемым. Это оказалось отличным решением, потому что оно заставило меня понять, что я на самом деле не знал разницы между объектом и группой, а также мало знал о материалах. Это помогло мне установить код для этих трехмерных структур.

Оба ответа рекомендуют форматы на основе XML. Мне не нужен формат XML. Я не верю, что это подходящее место для XML. Я считаю, что эти форматы были созданы, потому что XML является гибким, универсальным и легким в создании схем, но это не то, что я ищу. Мне нужен формат, который быстро загружается (XML, условно говоря, нет), он не должен быть гибким или удобочитаемым, и что-то, для чего я могу написать импортер, а не полагаться на библиотеки XML. basszero даже сказал «ценой XML», и он полностью прав; это цена, которая, как мне кажется, не стоит бремени.

Мой загрузчик OBJ готов. Я отделил его от реальных классов модели и реализовал с помощью интерфейса MeshFactory, чтобы в будущем я мог написать другой загрузчик, если захочу ... Таков план. Последние пару дней я проводил больше исследований и остановился на формате ms3d.

Формат ms3d поддерживает скелетную оснастку (суставы) и скелетную анимацию по ключевым кадрам, а также поддерживает карту текстур и альфа-карту. Кроме того, это легко читаемый компьютером двоичный формат, который не тратит впустую пространство (как XML и OBJ) с удобочитаемыми тегами, метками и т. Д.

В Blender, к сожалению, нет (рабочего) скрипта экспорта ms3d, поэтому я напишу для него скрипт сам. К счастью, это несложный процесс, и вы можете прочитать документацию Blender и использовать другие экспортеры в качестве примеров. Мне придется освежить свой Python, но в остальном это кажется очень простым, исходя из того, что я видел в других скриптах.

Со стороны Java все должно быть легко, на самом деле он будет даже проще, чем формат OBJ, потому что ms3d более структурирован. Я нашел спецификации формата ms3d в Интернете в стиле C (гениально!), Так что они невероятно понятны, и у меня нет дополнительных вопросов о формате. Я буду основывать свою реализацию на этой спецификации, хотя позже я могу реализовать свои собственные варианты; это отличная вещь в написании собственного импортера и экспортера, я могу изменять формат по своему усмотрению.

В общем, я решил, что это лучшее решение.

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

Круачан: для меня нет Java3D, я придерживаюсь JOGL. Я действительно владею этой книгой (хотя на данный момент она недоступна), хотя я не помню, как он загружал модели, но я почти уверен, что он использовал загрузчики формата Java3D, которые делают это автоматически. Не то, что я планирую использовать ... Извините!

-Рахит

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

Это может быть немного многословно, но я слышал, что Collada очень хорошо оборачивает 3D-информацию (ценой того, что является XML). Положительным моментом является то, что, вероятно, существует правильное определение схемы, которое вы могли бы передать через JAXB, что привело бы к полноценному синтаксическому анализатору без вашей работы.

Форматы .md * также могут быть хорошей альтернативой. Они от движков iD (q1, q2, q3, q4, doom3) и задокументированы. Они также содержат последовательности анимации.

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

Если вы можете жить только с геометрией или готовы обрабатывать собственное текстурирование, то .obj, вероятно, является наиболее простым и широко поддерживаемым форматом 3D-файлов. Это в основном ascii трехмерного моделирования.

В противном случае я бы склонился к vrml. Он хорошо определен, и есть хоть какой-то код, с которого можно начать. Я успешно загрузил модели vrml в java3D, используя свободно доступный код. Исходный размер файла обычно бывает большим, но это можно решить, используя сжатый формат.

Я бы не рекомендовал .3ds. Единственный раз, когда я работал с ридером для этого формата, был в Delphi Pascal, и он беспорядочный, плохо определенный, сложный для обработки и, как правило, имеет множество `` вариаций '', так что, хотя мне удалось получить мои модели обработки ридера, экспортированные из Сам по себе 3D-MAX просто отлично, он отклонил многие модели из других пакетов, которые утверждали, что были в формате 3DS, но не были должным образом сформированы.

ДОБАВЛЕНО: Также я бы порекомендовал вам взглянуть на Java3D API и книгу О'Рейли « Программирование убийственных игр на Java», поскольку даже если вы не пойдете по пути Java3D, он, вероятно, ответит на многие ваши вопросы.

Ого, чувак, ты собираешься выпустить экспортер ms3d, когда закончишь его? И если да, то как это происходит? Мне действительно нужно достать экспортер, который работает для анимации и который использует Fragmotion, и похоже, что то, что вы делаете, - моя последняя надежда.

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

См. Несколько примеров использования Ogre и Irrlicht здесь: http://gamekit.googlecode.com