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

StackOverflow https://stackoverflow.com/questions/585769

  •  06-09-2019
  •  | 
  •  

Вопрос

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

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

Спасибо!

Редактировать:Я буду писать экспортер Blender MS3D.Когда я закончу, я опубликую это здесь.

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

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

Решение 2

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

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

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

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

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

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

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

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

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

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

-Рахит

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

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

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

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

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

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

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

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

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

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

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

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

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