Russian Qt Forum
Ноябрь 22, 2024, 21:09 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Запись данных анимации  (Прочитано 6921 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Август 16, 2015, 09:45 »

Добрый день

Приложение "A" занимается анимацией 3D объектов, создает файлы данных и посылает их приложению "B" которое занимается только рендером кадров. Пользователь решает сколько кадров будет послано, возможно он захочет сохранить каждый в свой файл чтобы разослать их по сети всем нодам где стоит "B". Но чаще пользователь не располагает такими ресурсами и хочет просто отрендерить напр 1000 кадров на той же локальной машине. Ну вся 1000 в один файл и сливается.

3D объектов может быть много, поэтому прямолинейная запись "каждый кадр с нуля" быстро приводит к файликам 20, 30, а там и 50Gb. Необходимость "логической упаковки" очевидна, ведь анимирована лишь небольшая часть данных (обычно неск % и меньше). Грубо говоря в 99% случаев 1000 раз пишется одно и то же.

Как же сделать более умное сохранение?

Спасибо
Записан
Bepec
Гость
« Ответ #1 : Август 16, 2015, 14:45 »

На примере гифа?
Записываются только изменения в кадре, остальная часть берётся с предыдущего кадра и так далее. Примитивная, но действенная оптимизация.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Август 17, 2015, 09:32 »

На примере гифа?
Записываются только изменения в кадре, остальная часть берётся с предыдущего кадра и так далее. Примитивная, но действенная оптимизация.
Образное, художественное мЫшление - это конечно хорошо, но интересуют (мелкие) технические подробности, как же "взять с предыдущего"...
Записан
Bepec
Гость
« Ответ #3 : Август 17, 2015, 12:56 »

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

PS проблемы не вижу, хотя мб не вижу всей картины, так раскройте мне глаза.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Август 17, 2015, 13:26 »

Сравнение 2 кадров уже сложно? Я не специалист, но в курсе, что любое видео это просто ...
Приложению "B" посылаются не пиксели, а сериализованные объекты/структуры из которых оно уже делает то самое "видео"
Записан
Bepec
Гость
« Ответ #5 : Август 17, 2015, 13:39 »

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

Если же со структурами - хз. Не представляю себе механизмов рендеринга и сами структуры. Потому и совета дать не смогу.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Август 17, 2015, 14:14 »

Если же со структурами - хз. Не представляю себе механизмов рендеринга и сами структуры. Потому и совета дать не смогу.
А Вам и не нужно их представлять, это просто структуры для которых определены методы записи в поток. Псевдокод
Код
C++ (Qt)
struct CObjectExample {
 Point GetPosition( int frameIndex );
 Color GetColor( int frameIndex );
 ....
 void Send2Render( int frameIndex, Stream & stream )
 {
   stream << GetPosition(frameIndex) << GetColor(frameIndex) << .....
 }
};
 
Имеется пусть 100 экземпляров такого типа. Создаем файл на 1000 кадров анимации. Положили frameIndex = 1. Записали все 100 экземпляров. Потом frameIndex = 2, опять записали все 100. И так до frameIndex = 1000. В рез-те 99% записанного - повторы. Да, Position и Color могут быть разными для разных frameIndex, но это бывает редко (относительно общего числа данных и объектов)
Записан
Bepec
Гость
« Ответ #7 : Август 17, 2015, 15:03 »

Тут надо именно знать структуру, её наполненность информацией. В принципе самый простой выход архивирование - оно само определит повторы и если сможет сожмёт их.
Если же разницы незначительные, но непоследовательны, то вполне возможно вывести свой формат сериализации.

К примеру 100 структур с начальными параметрами записываются в начало файла. Далее следуют блоки кадров, в которых указаны изменяемые параметры для каждой структуры.

Но опять надо знать структуру, чтобы оценить и выбрать правильный подход.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Август 17, 2015, 15:41 »

В принципе самый простой выход архивирование - оно само определит повторы и если сможет сожмёт их.
Практически не жмет, так часто бывает когда данные float/double. Видимо шаг между повторами слишком велик. С др стороны архивирование лишает читающего возможности seek'ать по файлу. На этой затее можно смело ставить крест.

Но опять надо знать структуру, чтобы оценить и выбрать правильный подход.
Ну а что изменится если вместо 2 параметров я приведу неск сотен как оно есть на самом деле? Только то что я устану писать? Улыбающийся

Если же разницы незначительные, но непоследовательны, то вполне возможно вывести свой формат сериализации.

К примеру 100 структур с начальными параметрами записываются в начало файла. Далее следуют блоки кадров, в которых указаны изменяемые параметры для каждой структуры.
Число объектов для рендера может меняться от кадра к кадру. Как в общем виде идентифицировать какой структуре соответствует изменение? И вообще как такой файл будет читаться?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Август 17, 2015, 16:07 »

[OFF]
Часто приходится слышать, мол,  "вот надо знать все детали/подробности", только тогда, "после тщательного обдумывния" можно спроектировать хорошую архитектуру. На мой взгляд, это имеет больше минусов чем плюсов, "слишком долгое обдумывание" обычно, как ни странно, завершается решениями "от фонаря". Это просто неумение абстрагироваться и желание схватиться за соломинку той или иной детали  Улыбающийся 
[/OFF]
Записан
Bepec
Гость
« Ответ #10 : Август 17, 2015, 17:18 »

Я вам привел 3 способа. Мелочи реализации не затрагивались, но вы акцентируете на них внимание.

И напоследок всё же отвечу на ваши вопросы:
Сикать по файлу со своим "архивированием" будет можно, приведя блоки кадров к фиксированной величине. Хотя то, что стандартный архиватор не подходит - это плохо.
Расшифровка данных займёт минимальное количество времени.(~1-14мс на кадр, если не меньше)
Идентификация по номеру структуры.

[OFF]Когда идёшь по непроложенному пути, надо пробовать. Предложили идею - попробовал. Ещё идея - попробовал. И лишь потом делать вывод, исходя из результатов. А забивать идею, указывая на мелочи реализации (которые даже студент 4 курса может самостоятельно написать), это лицемерие. [/OFF]

PS ваши "этого вам знать не надо" лишает человека полного видения картины. А когда высказывается предложение, вы, видя полную картину, видите и недостатки. Хотя для частичного решения проблемы решение идеально.

PPS устраняюсь из диалога, спорьте с самим собой.
« Последнее редактирование: Август 17, 2015, 17:20 от Bepec » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Август 18, 2015, 10:47 »

Когда идёшь по непроложенному пути, надо пробовать. Предложили идею - попробовал. Ещё идея - попробовал. И лишь потом делать вывод, ...
О боже, "непроложенный путь", идеи, выводы... Улыбающийся Смотрите "шкурным" взглядом (ну или "профессиональным", это то же самое). Сколько стоит эта задача? Сколько на ней можно заработать? Очень немного - см первый пост. Во-первых есть вариант где создание больших объемов все же неизбежно, а во-вторых, это всего лишь экономия места на диске - не бог весть что.  Неделя для такой задачки слишком много, это нужно сделать за 3-4 дня максимум. Недавно видел где-то типа
Цитировать
Фул тайм ребята 120+
Тогда за 2 дня - и без всяких вопросов. Тоже мне, "ребята"  Улыбающийся
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #12 : Август 18, 2015, 15:28 »

Гнилая задача, на самом деле... Нам кое-что подобное нужно сделать в ближнем будущем - есть куча конфигураций, которые могут отличаться лишь парой параметров. Архиватор особо не поможет, т.к. данные и так бинарные. Нам нужно будет их не только эффективно хранить, но и автоматически определять разницу и отображать в человекочитаемом виде. Пока есть несколько идей, но все они выглядят очень затратными. Но, скорее всего, все сведется к разбиению данных на секции и сравнение однотипных параметров. Как-то так, в общем.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #13 : Август 18, 2015, 17:01 »

Гнилая задача, на самом деле...
Верно  Улыбающийся Если хотите расскажу как я сделал
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #14 : Август 19, 2015, 18:08 »

Было бы интересно узнать Улыбающийся
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.072 секунд. Запросов: 23.