Как сделать запись и воспроизведение "демки на движке" ?
Модератор: Модераторы
Как сделать запись и воспроизведение "демки на движке" ?
В общем нужно примерно отслеживая время записать весь поток событий в файл и воспроизвести с возможностью перемотки и остановки (что по идее вроде и просто но на практике сходу сделать не вышло ).
По идее так как задача отнюдь не уникальная где-то должен быть набор готовых компонентов но найти что-то подходящие пока не получилось .
Зы
В моем проекте "Цифрова оптика" есть возможность записи и воспроизведения состояния, но это разумеется, не то что нужно мне сейчас ( как-то пробовал сделать там "анимацию" из набора "сэйвов состояния" вместо кадров но это как-то криво работает дискретно и без "ощущения полета" ) .
По идее так как задача отнюдь не уникальная где-то должен быть набор готовых компонентов но найти что-то подходящие пока не получилось .
Зы
В моем проекте "Цифрова оптика" есть возможность записи и воспроизведения состояния, но это разумеется, не то что нужно мне сейчас ( как-то пробовал сделать там "анимацию" из набора "сэйвов состояния" вместо кадров но это как-то криво работает дискретно и без "ощущения полета" ) .
Re: Как сделать запись и воспроизведение "демки на движке"
Alex2013 писал(а):В моем проекте "Цифрова оптика" есть возможность записи и воспроизведения состояния, но это разумеется, не то что нужно мне сейчас ( как-то пробовал сделать там "анимацию" из набора "сэйвов состояния" вместо кадров но это как-то криво работает дискретно и без "ощущения полета" ) .
запись состояния это то, что тебе нужно.
при воспроизведении списка состояний, тебе просто нужно интерполировать результат, и тогда будет "ощущения полёта", потому что всё будет плавно.
Естественно, сохранять состояние "целиком" может быть избыточным. Но это уже вопрос к "движку".
Если в "движке" есть некоторые данные, которые можно надёжно интерполировать опираясь на предыдущее значение + время, тогда такие данные не нужно сохранять на "каждое состояние", а только в те моменты, когда эти данные меняются.
Как в видео кодировке, есть "ключевой кадр" (который по сути - картинка целиком), есть последующие слайды, которые "только изменения к ключевом".
Общий подход прост:
* снимать состояние на каждый "кадр" ("тик", "апдейт") движка
* сохранять те данные, которые невозможно надёжно интерполировать
* те данные, которое можно интерполировать, сохранять только с тем "кадрами", когда значение данных меняется/задано впервые.
Re: Как сделать запись и воспроизведение "демки на движке"
Читаю и суть вопроса не совсем ясна, что в конце. Наверно шифр для избранных. Можно записать "демку движения" двумя способами:
1. Запись положений камеры и потом в той же программе проигрывание ее положений, без участия пользователя, просто зная временные интервалы. Как в Counter-Strike
2. Запись видео файла. Тут балаган из записи положений камеры, записи чистого видео покадрам, и его кодированию последующему кодеком. И в конце зависание с перегрузкой памяти.)))
1. Запись положений камеры и потом в той же программе проигрывание ее положений, без участия пользователя, просто зная временные интервалы. Как в Counter-Strike
2. Запись видео файла. Тут балаган из записи положений камеры, записи чистого видео покадрам, и его кодированию последующему кодеком. И в конце зависание с перегрузкой памяти.)))
Re: Как сделать запись и воспроизведение "демки на движке"
Sharfik писал(а):Читаю и суть вопроса не совсем ясна, что в конце. Наверно шифр для избранных.
Ну извиняюсь что "не в стихах"...
Если еще не понятно, то объясню более конкретно :
Сейчас я пишу управляемую 3D/VR техно демку, а раз она управляемая значит не содержит заранее заданного сценария, а это и хорошо и плохо . Хорошо, потому что с ней можно провозится "в ручном режиме" и вообще использовать как полезную утилиту, но плохо если я хочу просто показать "возможности технологии" и похвастаться достижениями. А поскольку технодемка постепенно усложняется, то сходу четко показать ее возможности чем дальше тем сложнее (Получается эдакий "орган" на котором нужно сходу "слабать мурку" )
Да, для "простого 3D" можно просто записать с экрана ролик ....

(Запуск оп клику.)
Но во первых, это местами проблемно (в программе уже сейчас несколько окон с настройками + есть неизбежная потеря качества ) а вторых демка рассчитана на поддержку VR, что вообще делает "плоскую" запись изрядно бессмысленной, а если пытаться записывать "сферическое стерео" это еще сложнее и файлы выходят чудовищными по размеру + такой ролик не позволит показать работу программы в целом .
Вывод прост: нужно сделать запись и воспроизведение "полетов фантазии " в самой программе .
Добавлено спустя 44 минуты 21 секунду:
Скалогрыз, спасибо за отзыв и участие в мозговом штурме !
скалогрыз писал(а):Alex2013 писал(а):В моем проекте "Цифрова оптика" есть возможность записи и воспроизведения состояния, но это разумеется, не то что нужно мне сейчас ( как-то пробовал сделать там "анимацию" из набора "сэйвов состояния" вместо кадров но это как-то криво работает дискретно и без "ощущения полета" ) .
запись состояния это то, что тебе нужно.
при воспроизведении списка состояний, тебе просто нужно интерполировать результат, и тогда будет "ощущения полёта", потому что всё будет плавно.
В принципе мысль годная . Но как это совместить с кучей настроек и переключений режимов во "внешнем интерфейсе" программы большой вопрос.
Естественно, сохранять состояние "целиком" может быть избыточным. Но это уже вопрос к "движку".
Если в "движке" есть некоторые данные, которые можно надёжно интерполировать опираясь на предыдущее значение + время, тогда такие данные не нужно сохранять на "каждое состояние", а только в те моменты, когда эти данные меняются.
Количество данных не проблема( Все равно сильно меньше записи видео ) проблема в переключение режимов и изменениях настроек, часть которых к "движку" вообще не относятся . То есть просто записывать координаты камеры и состояние движка может быть недостаточно.
Как в видео кодировке, есть "ключевой кадр" (который по сути - картинка целиком), есть последующие слайды, которые "только изменения к ключевом".
Общий подход прост:
* снимать состояние на каждый "кадр" ("тик", "апдейт") движка
* сохранять те данные, которые невозможно надёжно интерполировать
* те данные, которое можно интерполировать, сохранять только с тем "кадрами", когда значение данных меняется/задано впервые.
По моем большая часть реализаций "записи ролика на движке" делается существенно проще! Просто записывается не состояние движка, а поток данных идущий от клавиатуры мышки и т.д., а при воспроизведении записанный поток тупо подменяет реальный. (Запись состояния нужна только одна и исключительно для задания верной "стартовой позиции" )
Последний раз редактировалось Alex2013 05.04.2021 11:06:20, всего редактировалось 2 раза.
Re: Как сделать запись и воспроизведение "демки на движке"
в движке нужен слой абстракции в котором управляющие воздействие - нажатие кнопки, то се, переводятся в действия типа игрок идет из точки а в точку б, при этом используется тотже механизм что и для других интерактивных элементов типа монстров, действия привязаны к tick-ам - временным меткам. все процессы в сцене протекают путем обработки таких действий. при записи демки сохраняются ключевые состояния (с какойто периодичностью) и поток действий между ними.
Добавлено спустя 6 минут 2 секунды:
Re: Как сделать запись и воспроизведение "демки на движке" ?
он же используется для поддержки разных контроллеров, типа клавамышь, геймпад, сенсорный экран
Добавлено спустя 3 минуты 9 секунд:
Re: Как сделать запись и воспроизведение "демки на движке" ?
да и сетевая игра тоже через проигрывание действий делается
Добавлено спустя 6 минут 2 секунды:
Re: Как сделать запись и воспроизведение "демки на движке" ?
sts писал(а):в движке нужен слой абстракции
он же используется для поддержки разных контроллеров, типа клавамышь, геймпад, сенсорный экран
Добавлено спустя 3 минуты 9 секунд:
Re: Как сделать запись и воспроизведение "демки на движке" ?
да и сетевая игра тоже через проигрывание действий делается
Re: Как сделать запись и воспроизведение "демки на движке"
sts писал(а):в движке нужен слой абстракции в котором управляющие воздействие - нажатие кнопки, то се, переводятся в действия типа игрок идет из точки а в точку б, при этом используется тот-же механизм что и для других интерактивных элементов типа монстров, действия привязаны к tick-ам - временным меткам. все процессы в сцене протекают путем обработки таких действий. при записи демки сохраняются ключевые состояния (с какойто периодичностью) и поток действий между ними.
Хм ! Интересно. Но у меня не пока, что не игра или просто программа "с встроенным" перманентно однообразным миром с ограниченным числом взаимодействий, а растущая как "на дрожжах" техно-демка сочетающая в себе множество разных тестов для будущих "полноразмерных" проектов . Так что если сделать "запись ролика с опрой на движок" , то в самом его написании и развитии , нужно будет постоянно учитывать и поддерживать необходимость записи состояния ( а часть реализации это "по умолчанию" вообще отрицает ) А в случае записи и воспроизведения "потока управления без опоры на движок" это блок будет почти полностью независим и универсален. (Хотя есть проблемы с реализацией "режима перемотки", но это ИМХО куда меньшая проблема )
Последний раз редактировалось Alex2013 05.04.2021 15:54:22, всего редактировалось 1 раз.
Re: Как сделать запись и воспроизведение "демки на движке"
ИМХО, самый дешевый способ:
SetParam('кубик35','X',45)
SetParam('Main',ViewFPS',True)
GetParam('кубик35','X',0)
При активной галочке записи они же и будут параллельно записывать изменений состояния в лог и проигрывать его во всех направлениях.
Замучишься потом поддерживать, если по другому.
GUI/Keyboard/Mouse
|
ClassController
|
Крутой движок
SetParam('кубик35','X',45)
SetParam('Main',ViewFPS',True)
GetParam('кубик35','X',0)
При активной галочке записи они же и будут параллельно записывать изменений состояния в лог и проигрывать его во всех направлениях.
Замучишься потом поддерживать, если по другому.
GUI/Keyboard/Mouse
|
ClassController
|
Крутой движок
Re: Как сделать запись и воспроизведение "демки на движке"
Текущие состояние.
"Крутой движок" - нет
"ClassController" - нет
GUI - почти нет.
/Keyboard/Mouse - система перемещений из демки с танком ( похожим на кирпич)
(Прямо планета Шелезяка ...
)
Разумеется, если будет запись "скрипта" в файл, то скорее всего там будет похожий "псевдо текстовый" формат.
И включения выключения галочек будут записываться похожим на предложенный формат образом .
Но все-же тотальная запись всех обрабатываемых событий проще .
То есть "общая форма записи" скорее всего будет такой Event +1.51 kb Down 'W"
1.51 время в секундах после предыдущего события .
(Да кстати, пока малая (но впоследствии большая) часть GUI находится непосредственно в 3д сцене (уже сейчас есть выбор и сдвиг "чипов" причем несколькими способами ) . )
Но проблема во первых, в том как собрать и правильно сохранить события из нескольких окон, а после записи правильно подменить реальный поток при воспроизведении. В общем мне бы для начала, хорошо бы найти пример создания и воспроизведения клавиатурных и "мышиных" макросов.
Зы
То что для чего я взялся писать эту технодемку довольно далеко от игровых проектов ( В основном правда потому что достаточно интересный игровой проект я сейчас просто не потяну - не хватит знаний и опыта ) и как я написал в ReadMe .
В принципе на "первом уровне" все задачи хоть частично но решены и ведеться подготовка к подъему на "уровень 2" :
Так что запись макрос-роликов пока не очень актуальная часть проекта но думать о ней можно и нужно уже сейчас .
"Крутой движок" - нет
"ClassController" - нет
GUI - почти нет.
/Keyboard/Mouse - система перемещений из демки с танком ( похожим на кирпич)
(Прямо планета Шелезяка ...
Разумеется, если будет запись "скрипта" в файл, то скорее всего там будет похожий "псевдо текстовый" формат.
И включения выключения галочек будут записываться похожим на предложенный формат образом .
Но все-же тотальная запись всех обрабатываемых событий проще .
То есть "общая форма записи" скорее всего будет такой Event +1.51 kb Down 'W"
1.51 время в секундах после предыдущего события .
(Да кстати, пока малая (но впоследствии большая) часть GUI находится непосредственно в 3д сцене (уже сейчас есть выбор и сдвиг "чипов" причем несколькими способами ) . )
Но проблема во первых, в том как собрать и правильно сохранить события из нескольких окон, а после записи правильно подменить реальный поток при воспроизведении. В общем мне бы для начала, хорошо бы найти пример создания и воспроизведения клавиатурных и "мышиных" макросов.
Зы
То что для чего я взялся писать эту технодемку довольно далеко от игровых проектов ( В основном правда потому что достаточно интересный игровой проект я сейчас просто не потяну - не хватит знаний и опыта ) и как я написал в ReadMe .
Основные направления :
1 Сбор элементов нужных для создания программы наподобие всем известного пакета "Виртуал Десктоп" .
2 Разработки аналогов GUI интерфейса "общего назначения" для ВиАр (с возможностью использовать его и на обычном экране).
3 Разработка редактора мнемонических схем ( для проектов вроде среды программирования HiAsm ).
4 Генерация 3д ландшафта и возможность взаимодействия с ним (на будущее и не только для игр )
5 В планах также использование наработок из этого проекта в проекте "Цифровая оптика" (Разработка интерфейса дополненной реальности )
В принципе на "первом уровне" все задачи хоть частично но решены и ведеться подготовка к подъему на "уровень 2" :
1 Несколько виртуальных экранов (под отдельные программы )+ возможность произвольного расположения их в пространстве
(Сейчас в основном есть возможность "крутить всю сцену" но это разумеется слишком неудобно )
2 Полный 3D аналог GUI формы или хотя бы готовые базовые элементы (меню ,читалка длинных текстов, вывод строк и т.п. )
(Сейчас есть только некая условно " зеркальная форма" )
3 Загрузка реальных схем HiAsm с подписям и просмотром параметров каждого элемента
(сейчас есть некая отдаленно похожая абстракция + нет удобного просмотра )
4 Загрузка и частичная генерация простого "3д- интерьера"
(Сейчас есть только несколько моделек + "фоновая сфера" )
5 Хотя бы минимальная интеграция с программой "Подзорная труба" из проекта "Цифровая оптика"
(Сейчас возможен захват видео потока из ПТ, но это точно не интеграция )
Так что запись макрос-роликов пока не очень актуальная часть проекта но думать о ней можно и нужно уже сейчас .
Re: Как сделать запись и воспроизведение "демки на движке"
Слой абстракции ввода и сериализации всех событий - лишь начало
Дальше идёт борьба за сериализацию (я два года положил, с 2006 по 2008-й, и до сих пор допиливаю), борьба за детерминизм физики (что даёт идентичный до бита результат при идентичных событиях ввода) - к счастью, расчёты, сделанные на Паскале без применения asm+sse, детерминистичны - подгонка структуры физики так, чтобы не зависела от частоты кадров рендера...
Фундамент под эту "простую" задачку приходится пилить годами. См. мой движок, на 70% состоящих из этих решений.
Дальше идёт борьба за сериализацию (я два года положил, с 2006 по 2008-й, и до сих пор допиливаю), борьба за детерминизм физики (что даёт идентичный до бита результат при идентичных событиях ввода) - к счастью, расчёты, сделанные на Паскале без применения asm+sse, детерминистичны - подгонка структуры физики так, чтобы не зависела от частоты кадров рендера...
Фундамент под эту "простую" задачку приходится пилить годами. См. мой движок, на 70% состоящих из этих решений.
Re: Как сделать запись и воспроизведение "демки на движке"
Cheb писал(а):Фундамент под эту "простую" задачку приходится пилить годами. См. мой движок, на 70% состоящих из этих решений.
В принципе я догадываюсь что "правильное решение" подобной задачи совсем не простое дело .
Но пока у меня даже "задача минимум" ( натолкать в технодемку простых и быстро реализуемых механизмов на уровне вопроса "а стоит ли вообще ими заморачиваться" ) не решена.
И опять-же по опыту знаю что перфекционизм в моем случае не работает как надо . То есть я запросто могу зарыться в "побочный квест" и в кой-то момент "упустить время актуальности основной задачи" . Так что мне нужна разработка в стиле "Старшип имени Илона Маска"
То есть постараться на каждом уровне приближения иметь перед глазами "экспериментальный образец".
Re: Как сделать запись и воспроизведение "демки на движке"
Cheb
С тем, что описал sts, детерминизм и не нужен. Через определённые промежутки времени, пусть каждые 10 секунд, запоминается полное состояние (даже дельта с предыдущим полным). Какая-либо рассинхронизация будет ограничена этими 10 секундами.
С тем, что описал sts, детерминизм и не нужен. Через определённые промежутки времени, пусть каждые 10 секунд, запоминается полное состояние (даже дельта с предыдущим полным). Какая-либо рассинхронизация будет ограничена этими 10 секундами.
Re: Как сделать запись и воспроизведение "демки на движке"
В общем что-то похожее на то что должно быть сделал ...
Секрет оказался довольно прост, вместе с восстановлением состояния нужно самостоятельно вызвать рендер не дожидаясь "штатного прохода" (и отключив его на время нужное для экстренного обновления ) . А при восстановлении состояния менять только те параметры и опции что реально изменились.
Зы
Если будете делать что-то похожее обязательно сразу озаботьтесь режимом перемотки (Иначе при отладке будет мерва ! )
Добавлено спустя 23 часа 35 минут 11 секунд:
Re: Как сделать запись и воспроизведение "демки на движке" ?
Вчера чуть не спятил ловя "нерегулярный глюк" но зато теперь функционал окна записи и проигрывания демо ролика достаточно полный
(есть пуза, перемотка , продолжение записи,запись на диск и чение с диска пока что все это заметно сыровато но уже работает )


Секрет оказался довольно прост, вместе с восстановлением состояния нужно самостоятельно вызвать рендер не дожидаясь "штатного прохода" (и отключив его на время нужное для экстренного обновления ) . А при восстановлении состояния менять только те параметры и опции что реально изменились.
Зы
Если будете делать что-то похожее обязательно сразу озаботьтесь режимом перемотки (Иначе при отладке будет мерва ! )
Добавлено спустя 23 часа 35 минут 11 секунд:
Re: Как сделать запись и воспроизведение "демки на движке" ?
Вчера чуть не спятил ловя "нерегулярный глюк" но зато теперь функционал окна записи и проигрывания демо ролика достаточно полный
(есть пуза, перемотка , продолжение записи,запись на диск и чение с диска пока что все это заметно сыровато но уже работает )


