[ Обновленные темы · Новые сообщения · Участники · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Формат Xom3D - FAQ, скрипты и плагины
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Формат Xom3D
Разработав формат Xom3d, специально для XomView я решил множество проблем. Но и создал новые...

Итак, что из себя представляет формат Xom3d?
Это 3DМодель с иерархией групп, трансформацией, материалами, вертексами, нормалями, скинами и костями.

Почему не 3ds?
Потому что 3ds не сохраняет нормали - сглаживание поверхности. А также иерархию, матрицы, правильную анимацию, скелет и многие вещи нужные для 3D моделей из Worms.

Почему не другой формат?
Потому что не нашел ничего подходящего. Obj и другие форматы не подходят.

Поддержка для редакторов
3dsMax - скрипт на языке MaxScript в 3DSMAX Xom3dLoader.ms загружает и сохраняет *.xom3d старой версии.
Blender - скрипт на языке Python в Blender в разработке. (неудобный редаактор)


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Какая структура формата Xom3D?

1. Заголовок "X3D" 4 bytes - формат файла Xom3D
2. Заголовок "IN" 3 bytes - сокрощенно от XNodeInterion
3. Дерево из объектов XNode
 a) количество объектов  Childs 2 bytes
 b) сами объекты XNode

Структура объекта XNode:
1. XType 3 bytes - тип объекта, может быть: XN, GO, BG, SS, SH
2. XName - имя объекта PChar
3. TransType - тип трансформации 1 byte
 a) TTMatrix матричная - matrix3 (3x4 float) 48 bytes
 b) TTVector векторная - Pos (float3) Rot(float3) Size (float3) - 36 bytes
 c) TTJoint связка - Pos (float3) Rot(float3) JointOrient(float3) RotOrient(float3) Size(float3) InvBoneMatrix(float3) 72 bytes

Структура для SS,SH // XSkinShape XShape
1. Faces - массив треугольников //XIndexSet
 a) num - количество 2 byte
 b) face - три индекса точек vertex 2*3 byte
2. Vertex - массив координат точек //XCoordSet
 a) Num - количество 2 byte
 b) Vert - вектор (float3) 4*3 byte
3. Normals - массив нормалей //XNormalSet
 a) On -  наличие нормалей 1 byte
 b) Normal - вектор (float3) 4*3 byte
4. Color -  массив цветов //XColorSet
 a) On -  наличие цветов 1 byte
 b) color - цвет  1*3 byte
5. TextCoord - массив текстурных координат //XTexCoordSet
 a) On -  наличие координат 1 byte
 b) textcoord - координата UV 2 * 4 bytes
6. Material - материал объекта //XMaterial
 a) On -  наличие 1 byte
 b) name - название материала PChar
 c) ambient - color 3 bytes
 d) diffuse -  color 3 bytes
 e) specular -  color 3 bytes
 f) selfIllumColor -  color 3 bytes
7. Image - текстура //XImage
 a) On -  наличие 1 byte
 b) name - название файла PChar

Для SS //XSkinShape
8. Bones - кости объекта
 a) numbones - количество костей 2 bytes
 b) bonename - имя кости Pchar
9. Weight - массив весов //XWeightSet
 a) VertexWeight - вес numbones*4 bytes

Для остальных типов:
1. Childs - дерево из XNode
 a) количество объектов  Childs 2 bytes
 b) сами объекты XNode

Как видно формат Xom3D не является четко структурированным, ведь XNode может иметь разную структуру. Сложность в том, чтобы создать правильную систему костей для анимированных объектов, ведь они имеют Joint структуру, которую невозможно перевести в Bone... По этому проект заглох...

P.S. Написал данный пост для себя, так как стараюсь возобновить проект...


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Какая структура у моделей с костями?

При загрузки модели с костями идет следующее дерево:
1. IN name.xom (XNodeInterion)
2. SK name_skin (XSkin) - скин объединяющий скелет и модель
3. BG name (Bone Group) - набор костей в виде дерева
4. SS name_shape (XSkinShape) - модель с привязкой к костям.

На данный момент существует проблема в правильной постройке скелета из костей BG в 3DSMAX'е...
Чтобы правильно вставить кости в модель, нужно сначала поставить кости в первоначальное состояние. Для этого у нас имеется глобальная матрица положения каждой косточки. Затем после привязки этих костей их нужно перестроить в относительное положение... Вот тут у меня тогда и сдали нервы, поэтому я и забросил проект. :D


 
firsacho
Админы
Сообщений: 3813
Реп: 84 / Инв: 15
AlexBond, алекс, конечно это круто, но зачем?) как то это не оч актуально уже.
или чисто для себя? ну и войтека... и еще 1-2х человек, кто решит че-нить сделать)




Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005)
Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007)
Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)

mod.worms.pro - мод Worms Renewation для Worms4
 
Woitek
Проверенные
Сообщений: 523
Реп: 57 / Инв: 11
Mods make only some people what have passion to do that. Another play this mods and make proud for Makers :)
 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
firsacho, я конечно понимаю твою позицию, сайт твой уже умер и ничто не сможет оживить w4 модинг, но я и не пытаюсь, просто в очередной раз решил проверить свои силы, для меня тут чисто спортивный интерес, а по поводу актуально это или нет, мне всегда было пофигу, я когда делал сайт для червей это было не актуально, т.к. игру к тому времени уже все забросили, но это меня не остановило.

 
firsacho
Админы
Сообщений: 3813
Реп: 84 / Инв: 15
AlexBond, воистину фанат программирования) кодинг ради кодинга) жаль просто свои силы тратишь так... тебя бы в разрабы какой-нибудь хорошей студии)



Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005)
Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007)
Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)

mod.worms.pro - мод Worms Renewation для Worms4
 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Список неразрешимых проблем с импортом Xom3D:

1. Проблемы при создании нового дерева объектов:
- не раскодированы некоторые данные XBinModifier, XChildSelector, XBone, XOglTextureMap
- проблема универсальности формата (структура данных WF,W3D,W4,WUM отличается)
- сложность создания с нуля контейнеров, т.к. не известны назначение не раскодированных данных.
- не возможность сохранить придаточные данные(не известные и не имеющие аналогов) во время экспорта от 3DSMAX.

2. Проблемы при копирования данных в старое дерево:
- XBone имеет слишком много линков и очень сложно организовать правильную структуру дерева.
- сложность переноса упрощенной структуры туда и обратно
- наличие клонов в ветвях дерева (ссылок на один и тот же контейнер, пример один материал для разных объектов)
- очень сложный процесс конвертации данных между такими структурами как: TContainer -> TMesh -> Xom3D ->MaxModel, и обратный перенос.

3. Проблемы в импорте в 3DSMAX:
- проблема с ориентацией координат (XYZ, в игре ось Y высота, а в 3DSMAX - ось Z ) , необходимость конвертации матрицы.
- отсутствие аналога Joint костей (кости редактора Maya)
- скудные знания в MaxScripts
- проблема получения обратной матрицы костей у модификатора Skin
- отсутствие аналога XChildSelector (для включения и выключения объектов при анимации)
- проблема с нормалями
- проблема с параметрами OpenGL для материала

Для чего нужен Xom3D?
Для того чтобы можно было менять модели с костями, т.к. формат 3DS не поддерживает кости.

Идеи как вставить свою модель со скелетом в игру:
- использовать 3DSMAX и экспорт в Xom3D
- найти другой формат с поддержкой костей и адаптировать его
- написать свой редактор костей...

P.S. Как видно из предварительного анализа - это адски сложно выполнимая задача!!! facepalm


 
  • Страница 1 из 1
  • 1
Поиск: