Формат Xom3D - FAQ, скрипты и плагины
|
|
Сообщений: 1042
|
Опубликовано: 18.08.2009, 13:10:41
Формат Xom3D Разработав формат Xom3d, специально для XomView я решил множество проблем. Но и создал новые... Итак, что из себя представляет формат Xom3d? Это 3DМодель с иерархией групп, трансформацией, материалами, вертексами, нормалями, скинами и костями. Почему не 3ds? Потому что 3ds не сохраняет нормали - сглаживание поверхности. А также иерархию, матрицы, правильную анимацию, скелет и многие вещи нужные для 3D моделей из Worms. Почему не другой формат? Потому что не нашел ничего подходящего. Obj и другие форматы не подходят. Поддержка для редакторов 3dsMax - скрипт на языке MaxScript в 3DSMAX Xom3dLoader.ms загружает и сохраняет *.xom3d старой версии. Blender - скрипт на языке Python в Blender в разработке. (неудобный редаактор)
|
|
|
|
Сообщений: 1042
|
Опубликовано: 20.03.2013, 01:44:00
Какая структура формата 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. Написал данный пост для себя, так как стараюсь возобновить проект...
|
|
|
|
Сообщений: 1042
|
Опубликовано: 20.03.2013, 21:08:03
Какая структура у моделей с костями?
При загрузки модели с костями идет следующее дерево: 1. IN name.xom (XNodeInterion) 2. SK name_skin (XSkin) - скин объединяющий скелет и модель 3. BG name (Bone Group) - набор костей в виде дерева 4. SS name_shape (XSkinShape) - модель с привязкой к костям.
На данный момент существует проблема в правильной постройке скелета из костей BG в 3DSMAX'е... Чтобы правильно вставить кости в модель, нужно сначала поставить кости в первоначальное состояние. Для этого у нас имеется глобальная матрица положения каждой косточки. Затем после привязки этих костей их нужно перестроить в относительное положение... Вот тут у меня тогда и сдали нервы, поэтому я и забросил проект.
|
|
|
|
Сообщений: 3813
|
Опубликовано: 20.03.2013, 21:28:38
AlexBond, алекс, конечно это круто, но зачем?) как то это не оч актуально уже. или чисто для себя? ну и войтека... и еще 1-2х человек, кто решит че-нить сделать)
Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005) Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007) Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
mod.worms.pro - мод Worms Renewation для Worms4
|
|
|
|
Сообщений: 523
|
Опубликовано: 21.03.2013, 11:38:19
Mods make only some people what have passion to do that. Another play this mods and make proud for Makers
|
|
|
|
Сообщений: 1042
|
Опубликовано: 21.03.2013, 23:29:46
firsacho, я конечно понимаю твою позицию, сайт твой уже умер и ничто не сможет оживить w4 модинг, но я и не пытаюсь, просто в очередной раз решил проверить свои силы, для меня тут чисто спортивный интерес, а по поводу актуально это или нет, мне всегда было пофигу, я когда делал сайт для червей это было не актуально, т.к. игру к тому времени уже все забросили, но это меня не остановило.
|
|
|
|
Сообщений: 3813
|
Опубликовано: 22.03.2013, 00:12:57
AlexBond, воистину фанат программирования) кодинг ради кодинга) жаль просто свои силы тратишь так... тебя бы в разрабы какой-нибудь хорошей студии)
Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005) Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007) Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
mod.worms.pro - мод Worms Renewation для Worms4
|
|
|
|
Сообщений: 1042
|
Опубликовано: 13.04.2013, 18:33:28
Список неразрешимых проблем с импортом 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. Как видно из предварительного анализа - это адски сложно выполнимая задача!!!
|
|
|
|