Создание красивой анимации с низкой частотой кадров

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

Моя анимация заключается в том, что я перемещаю примерно 10 2D-прямоугольников (каждый из которых содержит текстуру) примерно на 500 пикселей по осям x и y, а также масштабирую их, возможно, до 30% с примерно 1000 * 1000 пикселей. Я хочу, чтобы анимация завершилась примерно за 200 мс. Я оцениваю частоту кадров в 20-30 кадров в секунду.

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

Было ли проведено какое-либо исследование того, как сделать быструю анимацию, которая по-прежнему выглядит гладко? Я думал, что у вас может быть ускорение, которое идет медленно вначале, а затем скачкообразно в конце, или, может быть, наоборот? Мои собственные эксперименты выглядят как нервными, так и медленными: P

Должен быть какой-то предел в пикселях / кадре, который, по нашему мнению, выглядит хорошо. Где я могу найти подобные рекомендации?


Почему я хочу это знать?

Я сделал приложение для переключения окон, которое выполняет несколько классных анимаций, но проблема в том, что, когда я не запускаю какое-либо приложение с интенсивной графикой, моя графическая карта переходит в режим низкого энергопотребления. Это приводит к тому, что мое приложение, которое не запускается более 3 секунд за раз, работает очень плохо, потому что gfx-card никогда не успевает ускориться.

(Вы, вероятно, можете попробовать это сами, если у вас есть ноутбук и перспектива: нажмите win + tab, и вы увидите, что анимация немного прерывистая, затем запустите фильм и снова нажмите win + tab, на этот раз анимация намного более плавная. ).

Ответов (2)

У вас должна получиться разумно выглядящая анимация со скоростью около 15 кадров в секунду, если движения небольшие. Поймите, что существует ограничение на подгонку графической информации с высокой пропускной способностью (большое количество движений и изменений формы / цвета) в среду с низкой пропускной способностью (низкая частота кадров), но такие методы, как размытие в движении, помогут.

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

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

Размытие в движении - это теоретически способ сделать движения плавными, но правильное размытие движения стоит дорого, поэтому, если у вас уже есть проблемы с частотой кадров, размытие в движении, вероятно, только усугубит ситуацию. Но может быть какой-то способ снизить стоимость, например, если движение имеет постоянное направление и скорость, тогда вы можете визуализировать одно размытое изображение и использовать его. Или возможно несколько раз перерисовать частично прозрачные копии движущегося изображения, чтобы получить «след».