Jump to content
Alloder.pro: about Allods with love
Search In
  • More options...
Find results that contain...
Find results in...

New program for writers

We turn from quantity to quality and tell you how we will supplement the Allods Team program with rewards in rubles.

More

The new Updater

Let us to introduce the new addon updater software and to share the details

Read more

Alloder 2.0

We have started the process of project evolve, and this relates not only, and not even primarily of the site's view

Read more

AO Model Parser


Guest Bercut
 Share

Recommended Posts

Всем привет!

Пытался я связаться со SLA, да что-то не вышло ничего :( Так что буду всех остальных мучать.

Начну издалека.

Когда-то давным-давно, а точнее полтора года назад, я спрашивал про конвертер моделей вот в этой теме. Но тогда и SLA был занят просмотрщиком текстур, я почти ничего не знал о "взрослом программировании", а уж остальные как-то не особо дергались, вполне радуясь 3D Ripper DX. Последним приходилось пользоваться и мне до определенного момента. Этот момент крайне прост: 3DRipperDX не умеет нормально дергать анимированные модели. По крайней мере у меня они получались с очень большими искажениями. И вот сейчас, пошарив в инете, мне кое-что удалось узнать о том, как можно читать бинарные файлы. В частности крайне благодарен iOrange за его статью по вскрытию игровых ресурсов

Прежде чем расскажу, что мне, горе-программисту, удалось расковырять на текущий момент, хотелось бы спросить. В теме AO Texture Viewer в планах рассказано о каком-то сюрпризе. Это, случайно, не 3D Model Viewer? :)

Даже если и так, то и по фиг. Итак, что есть на текущий момент.

1) .bin - это zlib-архив. Нормальным программистам это очевидно, мне оказалось не очень :)

2) Структура файла (во многом могу ошибаться, но это работает):

а) Все вертексы идут построчно. Мне встретились три вида строк (разобрал 4 файла):

XZY+UV+4непонятныхбайта - в двух статичных объектах: развернутая книжка, хадаганская баллиста

XZY+UVW+8непонятныхбайт - в одном из анимированных объектов - крысе

XZY+UV+16непонятныхбайт - в модели хадаганки

Что такое "непонятныебайты", не знаю. Это не похоже на вещественное число, поэтому я не уверен, что это какие-то нормали или что-то подобное. Может быть освещение, может быть привязки к скину, может быть что угодно.

б) После размера буфера индексов идут, собственно, сами индексы.

Тут, казалось бы, все просто, бежим по массиву и собираем полигоны. При этом номер вертекса совпадает с номером текстурной координаты, поэтому там на каждый полигон одна запись на то, и на это. В какой-то момент индексы внутри массива начинаются сначала, но, как я понял, не всегда. Так, например, в книжке действительно индексы начинаются сначала. Оказалось, что здесь зашито два объекта: модель нормальная и модель в низком разрешении. В хадаганской баллисте на такой переход прога не наткнулась, поэтому можно предположить, что есть несколько объектов, составляющих одну группу. Тут не уверен и глубоко не проверял, но по UV-сетке видна адская мешанина, что подразумевает как минимум два варианта: либо здесь индексы вершин и текстурных координат не совпадают, либо здесь действительно несколько объектов, и на каждый объект своя текстура. В модели хадаганки я сам еще толком не проверил, но похоже, что в стандартной модели вшиты все варианты голов и причесок.

в) После индексов в статичных объектах идут какие-то отдельные байты неясного назначения, в анимированных, таких как крыса и хадаганка, начинается массив чего-то ядреного. Скорей всего это скелет и, возможно, привязка скина к скелету. Это я пока не смотрел.

г) Я не нашел информацию о текстурах, верней о ссылках на них.

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

Любые помощь и совет приветствуются. Если, конечно, меня не опередили...

Модели (файлы заархивированы. внутри OBJ-файл):

Канийская книжонка. Как видно на этой картинке, здесь присутствуют несколько моделей.

book_full.jpg

Если ручками править OBJ, то можно выделить нормальную модель

book_normal.jpg

Похоже, что тут несколько уровней низкополигональных моделей, потому как вроде основные черты прослеживаются, но явно видна мешанина полигонов.

book_low.jpg

Крыса. Вроде даже неплохо получилась. Хотя в Blender'е почему-то появлялся лишний полигон, идущий от губы до задней левой пятки.

rat.jpg

Хадаганочка. Тут явно прослеживаются кучи разных моделей.

hadagan_female.jpg

Особенно это заметно на голове. Тут все прически...

hadagan_female_head.jpg

Link to comment
Share on other sites

Прошу прощения. Случайно отправил сообщение. Сейчас дополню ссылками на файлы и скринами

Updated: Поправил

Link to comment
Share on other sites

Ого! =) Мне только что линканули ссылку сюда. Когда релиз? :)

Нет, я так и не сделал Model Viever, а "сюрприз" не состоялся потому, что разработчики прикрыли одну лазейку. Сюрпризом должно было стать возрождение всех текстурных модов в русской версии АО, где они не работали аж с версии 1.0.07.

Link to comment
Share on other sites

Quote:
В модели хадаганки я сам еще толком не проверил, но похоже, что в стандартной модели вшиты все варианты голов и причесок.

вероятно, именно это было как раз видно на праздник мистиков, когда очки были в "строенном" варианте.
Link to comment
Share on other sites

Не знаю насчет релиза. Думаю, еще не скоро. Проблем и вопросов с парсером еще очень много, и у меня не слишком быстро движется процесс расшифровки.

Сейчас пока нашел еще один вид строк, обнаружил, что в той же крысе нет третьей текстурной координаты и немного переработал алгоритм получения первой из трех моделей. На персонажах этот алгоритм не работает, и его нужно усложнять. В каждом файле по три модели: хайполи, миддлполи и лоуполи, вот я получаю хайполи (не знаю, как вам, мне другие не нужны :). Не уверен, что это распространяется на персонажей.

Link to comment
Share on other sites

  • 2 weeks later...

Хренопупинка рулит. Через месяца два-три *заговорчески хихикает* как раз очень хотелось бы видеть её готовую в деле.

Link to comment
Share on other sites

  • 2 weeks later...

Thank you for yours answers. I know about 3D Ripper DX and using it to make machinima style videos. I found several problems using this program: it can't catch skeletons and animations, it takes too much time in catching scenes, looking for useful models and its textures, and I had to clean models and bind skeleton to non-default posed model. On the second minute of

you can see some kind of "flying" astral demon. The demon has a few tentacles, which must be animated separately. Its not so difficult to animate one demon. But imagine that there are ten or twenty demons I need to animate. It will drive anyone crazy :) I understand that making maps with 3D Ripper DX is better and easier choice, but it does not work good enough for machinima.

The aim of my parser is getting models with their skeletons and animations for comfortable use in different services or videos, or something else.

And I have a question here. Could you give a link to western websites where I could find machinima style videos from Allods Online? :)

Link to comment
Share on other sites

  • 9 months later...
  • 2 weeks later...

Is anyone still looking into the model format itself, or did everyone go back to use 3dRipperDX and stuff to get things into your-favorite-modeler?

The biggest issue I'm currently facing is separating the different models in there. I'm doing a decent job on estimating points to split, but this only works for the large models (such as the book and its lower detail representation); not for the distinct parts of one model (such as the different hairstyles of a character).

The game must have a way of doing this, a way I've yet to find. All the models seem to have a block 00 (vertex data), 01 (face indices) and 02 (unknown as of yet) - and I believe this block 02 could contain that information. The other blocks (03 upwards) only appear in certain types of models and have a different structure, so it must be either in 02 or somehow encoded in the vertex/face list (the unknown byte/s after each vertex come to mind).

Bercut: How did you get to XZY, instead of XYZ? I frequently get flipped normals and stuff if I do that, along with the models lying down instead of standing up. Using XYZ fixes this, altho the 3dsmax importer has options for both Flip Normals and Flip YZ.

And have you found out anything about those "непонятныхбайт" after the vertices? They're not strictly limited to the 3 you list, and seem to be derived from the amount of vertices (altho this sounds a bit strange and error-prone). I've found good matches by simply assuming 9 floats per vertex when the amount of vertices read is divisible by 9; 8 floats if its divisible by 8 etc. (with the /8 case being the only one with UVW values, while the others only use UV coordinates).

Link to comment
Share on other sites

  • 3 weeks later...

Hi, BhaaL! Sorry for keeping a long silence. I just had to finish my new machinima-style video :)

About XZY normal I can't tell you much. I've seen that trouble. I believe that its a problem of importing OBJ-format into Maya or 3DS Max. But I'm not sure. To solve this in my case I just turned on both-side faces and unlinked transparency in materials with DDS textures. Somewhere it works with transparency.

About "unknownbytes" I can't tell you much as well. I didn't understand what it is. There are few different types of objects. I've found four types. My code looks like this (sorry, comments are not right XD ):

Code:
//X+Z+Y+U+V+unknown = 4+4+4+4+4+4 = 24

if (lenVertex % 24 == 0)

{

 strType = "static";

}

//X+Z+Y+U+V+W+unknown+unknown+unknown = 4+4+4+4+4+4+4+4+4 = 28

if (lenVertex % 28 == 0)

{

 strType = "pirate_barkas";

}

//32

if (lenVertex % 32 == 0)

{

 strType = "creature";

}

//X+Z+Y+U+V+unknown+unknown+unknown+unknown = 36

if (lenVertex % 36 == 0)

{

 strType = "character";

}

I'm not sure about W-coordinate, but my prog doesn't fail in some types of objects on converting that value to float, but I can't say the same about those "unknown" bytes. They are not always float or always are not float :)

About splitting models. I don't know the truth. But for my parser I'm using an algorithm which tries to find falling values of indexes from maximum to 1,2,3. That doesn't work in all cases. And the second algorithm I took as prototype from Blender scripts which allows merging different models with vertexes and edges with same coordinates. I believe that there is a third way. It's a huuuuuge file pack.bin where you can find links to textures, files with descriptions, etc. But no one didn't parse it yet :)

Link to comment
Share on other sites

Aww, too bad...for now, I'm just doing the same:

- See if the amount of vertices is divisble by 9, 8, 7 or 6 to determine the amount of unknowns and whether its UV or UVW coordinates (for the %8 part)

- Try to split when the face index drops to index 1 again

Apart from the fact that 00/01/02 blocks are present in all models and 03 upwards only in few of them (altho pretty much type specific, such as ship models or character models), I didn't find out much more than whats already in this thread :(

I was also poking around SLAs Texture Viewer to see how textures are encoded, in order to create something like a model viewer; but the code is far too messy right now and pretty much stuck as bin2obj converter...might put that up on github or somewhere if I get around to clean it up a bit.

Link to comment
Share on other sites

  • 10 months later...

Up necro topic.

Доброго времени суток всем.

Ни у кого не появилось каких-либо идей с вытаскиванием анимации или хотя бы костей из ресурсов? http://www.machinimadev.com/products/ - тут ребятки научились открывать несколько файлов геометрии из текущего клиента, но, похоже, на это всё.

Link to comment
Share on other sites

Не реклама, а овер9кая попытка скоммунздить часть ресурсов из аллодов с целью создания фанатской игрушки по ним.

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

UPD: посмотрел машиниму, на которую ссылку давал - у них что-то сырое, они лишь несколько моделей научились просматривать + только модели даже без текстур. По крайней мере для клиента последней версии, хз для какой версии программа написана.

Edited by Nuada
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

By using our site you agree to the Terms of Use