LINUX.ORG.RU

Moving average node

 


0

1

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

В общем суть вот в чем - берем блендер в режиме композитора, берем видик, в которое хотим вставить некий объект. Очевидно, что для вставляемого объекта необходимы Х, У, angle (про scale не будем). Если с X, Y, все просто, то для angle нужно немного костылить самому на основе двух точек (что в общем-то не сложно - найти тангенс, а затем посчитать арктангенс).
Сделал расчет угла и появилась одна проблема - небольшой «дребезг» угла даёт сильное подергивание вставляемого объекта, хотя в целом он позиционируется верно.

Что с этим делать? Нужно как-то сглаживать рассчитываемое значение угла. В идеале некая нода «Скользящая средняя», которая запоминает значения на заданном количестве предшествующих фреймов и рассчитывает среднее. Но такой ноды я не нашёл, жаль. Ну в общем и ладно, могу и сам посчитать среднее, вот только можно ли как-то сохранять значения в какую-то очередь заданного размера, ну а я на текущем фрейме по ним пробегаюсь и считаю среднее?


И если это уж прям совсем нельзя (хотя подозреваю, что какие-нибудь костыли с петушиными скриптами таки можно куда-то вкрутить), то можно ли как-то писать файл из композитора? Ну т.е. беру значение из какой-то ноды и дописываю в файл. Писать хочу значение угла поворота, построить график и глядя на него найти критические точки (развороты) и на них уже руками настроить углы на ключевых кадрах. Должно быть можно писать в выходную ноду композитора, но это ведь потом надо ковырять рисунки и смотреть на значение RGB, зачем мне это дополнительный секс?

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

kvpfs_2
() автор топика
Ответ на: комментарий от HE_KOT

На записи камера не только ведь перемещается (с чем справляется обычный motion tracking), но и вращается, добавляемый объект должен так же вращаться за камерой. Реализация этого вращения в автоматическом режиме (а не дрочкой над ключевыми кадрами) и вызывает проблемы - подергивание картинки. Без авто вращения картинка (добавляемая поверх базовой) стоит значительно стабильней. Ну и программную стабилизацию ffmpeg’ом я предварительно делал + lens correction.

kvpfs_2
() автор топика
Ответ на: комментарий от anonymous

Так оно же для 3Д сцены только, не? А могу ли я взять плоскость, накинуть на неё рисунок необходимый, всё что за пределами рисунка (голая плоскость) останется просто прозрачным. Ну и дальше в композиторе я делаю alpha over.

kvpfs_2
() автор топика
Последнее исправление: kvpfs_2 (всего исправлений: 1)
Ответ на: комментарий от HE_KOT

Не, я с этой ерундой уже натрахался. Вращение очень трудно определять на глаз.

А вообще - всё это кривые костыли. К этому делу нужно серьезно подходить, если нужен норм результат. А то всё на коленках, с дерьмом вместо камеры с погнутой периферией, а для определения вращения (вокруг оси перпендикулярной матрице) нужно гироскоп ставить. Разбираться со скриптами и юзать эту инфу.

kvpfs_2
() автор топика
Ответ на: комментарий от anonymous

Ты это сам делал? У меня не получилось полноценно вывести картинку без плоскости для проекции. Пробовал сделать плоскость прозрачной и использовал материал стекло для неё. Как ты делал? Заюзать маску не получится т.к. край плавно переходит в альфу

kvpfs_2
() автор топика
Ответ на: комментарий от kvpfs_2

делал, конечно, ещё и не такое, но давно

без плоскости и не получится.

в комплекте к блендеру идёт удобный плагин, который называется Import Images as Planes, но по умолчанию он отключен. чтобы его включить, надо открыть настройки (Edit -> Preferences…), выбрать вкладку Add-ons и в строке поиска вбить «planes», например. для включения плагина надо активировать голочку в левом верхнем углу его описания.

потом закрываешь настройки, переходишь в File -> Import -> Images as Planes… выбираешь картинку, параметры импорта и жмёшь кнопку «Import Images as Planes». появится новая плоскость в размер картинки с уже назначенной текстурой - выбранной же картинкой.

чтобы увидеть картинку на рендере надо правильно настроить освещение, либо сделать саму картинку излучающей свет. и настроить параметры рендера/композитинга/слоя, чтобы учесть прозрачность, если она есть. чтобы сделать рендер с прозрачным бекграундом, например, поставь галку Film/Transparent на вкладке Render Properties панели Properties.

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

край плавно переходит в альфу

надо смотреть, конечно. в cycles есть же материал Transparent BDSF. зачем тебе стекло, если тебе нужна лишь прозрачность? используй ноды, чтобы мапнуть прозрачность картинки на материал. а может оно само нормально мапается)

и разве нет роликов на ютубе по твоему запросу?

anonymous
()
Ответ на: комментарий от kvpfs_2

берем видик

видик, кстати, можно назначить как текстуру бекграунда сцены с текстурными координатами камеры и тогда даже ни композитинг, ни рендеринг с прозрачным бекграундом и ни оверсемплинг не нужны будут. но тогда надо чтобы частота кадров видика была константной и совпадала с частотой сцены.

anonymous
()
Ответ на: комментарий от anonymous

Import Images as Planes

А это сработало, получил прозрачную плоскость с картинкой и плавным переходом от цвета к прозрачности родным цветом картинки. Мой «неуспех» был в том, что я не подключил alpha канал картинки к шейдеру материала.

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

Спасибо.

kvpfs_2
() автор топика
Ответ на: комментарий от anonymous

Все отлично получилось, жаль, что не разобрался раньше, это реально экономит время.

Один только вопрос не очень понял - при solve motion tracking (кнопка для расчета перемещений камеры) нужно выбрать два фрейма, я так понял, что это для расчета parallax, т.е. удалённость разных точек кадра друг от друга? Ну ок, допустим, а что делать, если у меня там 500 кадров и камера крутится в разные моменты на 180 градуосв, общих точек на всём этом вращении нет, если там просчитается этот parallax на каком-то участке одном, то на другом ничего просчитано не будет. В общем не понял я этот момент. Буду благодарен за ликбез по этому аспекту. Как выбирать эти две точки и как рассуждать при выборе, какие косяки возможны при неверном выборе?

kvpfs_2
() автор топика
Ответ на: комментарий от kvpfs_2

камера крутится в разные моменты на 180 градусов, общих точек на всём этом вращении нет

тогда нужно чтобы как можно больше (не меньше 8-ми) треков «пересекалось», то есть, чтобы треки были как можно длиннее и не было такого, что на каком-то кадре окажется слишком мало нормальных треков.

вот в этих видео вроде норм объясняется

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

два фрейма (Keyframe A и B) - это крайние «ключевые» кадры, в пределах которых будет искаться решение для камеры, если не выбрана галка Tripod, что значит «камера на штативе». параллакс рассчитывается из движения маркеров же.

и ещё блендер не трекает изменение фокусного расстояния( в афтер эффектсе вроде бы есть такая фича

anonymous
()
Ответ на: комментарий от anonymous

два фрейма (Keyframe A и B) - это крайние «ключевые» кадры, в пределах которых будет искаться решение для камеры

Я так и думал в начале, но это не так. В интервале А:B должно быть 8 целых треков, пересечения не годятся. Я выставил некоторый подинтервал, процентов 20 по длительности от общего видика, при этом перемещения для камеры рассчитались на всех фреймах (на всех 100%). В общем я не понял для чего нужен А и В интервал, где-то прочитал, что там считается параллакс, но звучит бредово, потому вопрос появился. В доках блендера об этом так говорят:

Keyframe
Automatically select keyframes for initial reconstruction. This option enables complex algorithms which tries to find a keyframe pair with minimal reconstruction error and best scene scale guess.
Keyframe A, B
Start (A) and End (B) frame of the range used for reconstruction.

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

kvpfs_2
() автор топика
Ответ на: комментарий от kvpfs_2

Ещё бы понять - нужно ли крутить настройки камеры при трекинге, ну там типа искажения линз, sensor width. Видик я уже прогнал через lens correction фильтр в ffmpeg’e, и в целом разогнул его, и насколько мне подходит блендерный дефолт - загадка.

kvpfs_2
() автор топика
Последнее исправление: kvpfs_2 (всего исправлений: 1)
Ответ на: комментарий от kvpfs_2

Я так и думал в начале, но это не так.

слушай, точно. вот в этом видео с 8:30 чел объясняет для чего эти ключевые кадры https://www.youtube.com/watch?v=XDeiup4tgmg звучит убедительно)

по этим двум ключевым кадрам рассчитывается глубина (перспектива) сцены или объекта и потом эта глубина используется для всей сцены.

Ещё бы понять - нужно ли крутить настройки камеры при трекинге

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

если видик уже разогнул, то тогда, возможно, только фокусное расстояние стоит указать

anonymous
()
Ответ на: комментарий от anonymous

Благодарю за помощь

чел объясняет для чего эти ключевые кадры

Только все же неясно - а что если камера крутится на 360 градусов в видике? Ну или движется по коридору туда-сюда? В таких условиях не может быть общих точек.

если хочешь максимальный результат, то надо указывать параметры физической камеры, которой производилась съёмка. что-то можно взять из метаданных видеофайла

Вот, кстати, чел по ссылке сфотал лист клетчатый, у него там явно всё погнуто. Также я и другие материалы видел по калибровке камеры (ликбез какой-то по заюзыванию какой-то тулзы из поставки opencv). Суть в том, что у них у всех вблизи картинка сильно гнется, удивительно, но у меня почти нет никаких искажений вблизи на моем дерьмофоне, я наблюдаю сильные искажения вдали. В чем дело? Что-то вроде «у каждой конкретной системы линз есть определенное расстояние, на котором картинка ровная, чем дальше от него, тем кривее»? Если так, на какой параметр камеры/её оптики можно посмотреть для примерного определения этого расстояния?

PS: посмотрел сегодня про нейросетку Sora, которая неплохо так клепает видики какие угодно. Коммент запомнился: «мы думали, что работать будут роботы, а люди заниматься творчеством, но похоже, что все получится наоборот». Какой смысл придумывать сюжет, хитрые трюки/девайсы для его реализации, когда любой школьник в пару кликов сгенерит сеткой любую безумную дичь. Нет никакого интереса делать что-то совершенно рядовое и обычное, грустно.

kvpfs_2
() автор топика
Ответ на: комментарий от kvpfs_2

а что если камера крутится на 360 градусов в видике? Ну или движется по коридору туда-сюда?

наверное получается так, что из ключевых кадров высчитывается некоторая основа или ориентир, что все остальные расчёты базируются на этой основе. надо исходники смотреть, в общем)

Что-то вроде «у каждой конкретной системы линз есть определенное расстояние, на котором картинка ровная, чем дальше от него, тем кривее»?

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

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

Sora

да, сеточка огонь

Нет никакого интереса делать что-то

возможно должно быть наоборот. но я, наверное, тут остановлюсь и не буду дальше комментировать)

Благодарю за помощь

да не стоит)

anonymous
()
Ответ на: комментарий от anonymous

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

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

kvpfs_2
() автор топика