Скорость дессериализации

Общие вопросы о Unity3D

Re: Скорость дессериализации

Сообщение Roman777 14 сен 2017, 20:49

Tumbalalaika,можно у Вас ещё уточнить небольшой вопрос относительно кода по Вашей сериализации. Я с файлами и их строением не знаком. Зачем мы в самом начале файла оставляем место размером HEADER_SIZE. И на сколько я понял из кода, это место мы ничем не занимаем? Не нашёл именно место, где эта "голова" файла формируется и что именно туда вносится...
Ааа, всё разобрался, сразу что-то не разглядел)
Последний раз редактировалось Roman777 14 сен 2017, 21:35, всего редактировалось 1 раз.
Roman777
UNIт
 
Сообщения: 95
Зарегистрирован: 06 мар 2016, 12:09

Re: Скорость дессериализации

Сообщение Tumbalalaika 14 сен 2017, 21:10

const int HEADER_SIZE = 4 * INT_SIZE;


HEADER_SIZE хранит размер заголовка и нужен только в рантайме. Нужен он для вычисления смещений блоков. В данном случае он равен 4*int_size (128 bytes) так как заголовке файла идут четыре 32битных поля -

vertex block size
indices block size
normals block size
uvs block size.

Таким образом если мы хотим обратиться к блоку с нормалями (normals block) мы вычисляем его смещение по следующий формуле: HEADER SIZE + vertex block size + indices blocks size.

Если вы захотите добавить скажем еще один канал uv то в заголовок придется добавить еще одно значение - uv2 block size, и соответственно HEADER_SIZE станет равным 5 * INT_SIZE.

А вообще конечно
Код чисто для теста, написан "на коленке"


:)
Tumbalalaika
UNец
 
Сообщения: 17
Зарегистрирован: 12 сен 2017, 19:01

Re: Скорость дессериализации

Сообщение Roman777 14 сен 2017, 21:45

Tumbalalaika, благодарю за подробные разъяснения! Почему Вы подчёркиваете, что "только в рантайме"? По сути, десериализация в принципе будет происходить при запущенной программе и запущенном соответствующем коде, нет? (Казалось бы, а когда ещё...?)
Roman777
UNIт
 
Сообщения: 95
Зарегистрирован: 06 мар 2016, 12:09

Re: Скорость дессериализации

Сообщение Tumbalalaika 14 сен 2017, 22:25

Имеется в виду что описание структуры файла "размазано" - часть в коде, часть в самом файле. Если захотите сделать универсальный кодер/декодер файл должен быть полностью самоописывающим, т.е. содержать в себе всю необходимую информацию для его правильной расшифровки. В данном случае можно не писать в коде фиксированный размер заголовка, а указтвать его перед самим блоком. Как-то так:

[HEADER MAGIC NUMBER][HEADER SIZE][HEADER FIELD 0][HEADER FIELD N][DATABLOCK MAGIC NUMBER][DATABLOCK SIZE][DATABLOCK PAYLOAD][ETC...]

В такую структуру уже можно писать все что угодно, код должен будет его лишь распаковывать и применять соотв. операции над блоками с определенными magic number.

Обычно это так делается, особенно в случаях, когда файлы хранят разнородную информацию.
Tumbalalaika
UNец
 
Сообщения: 17
Зарегистрирован: 12 сен 2017, 19:01

Re: Скорость дессериализации

Сообщение Roman777 14 сен 2017, 23:10

Tumbalalaika писал(а):Обычно это так делается, особенно в случаях, когда файлы хранят разнородную информацию.

Вот оно что! Не зря отметил я этот вопрос! Спасибо, стало значительно яснее!
Roman777
UNIт
 
Сообщения: 95
Зарегистрирован: 06 мар 2016, 12:09

Пред.

Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18