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

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

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

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

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

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


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

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

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


person Community    schedule 25.02.2009    source источник


Ответы (2)


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

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

person Lee B    schedule 25.02.2009
comment
Спасибо за совет по размытию изображения, никогда об этом не задумывался. :) - person ; 26.02.2009

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

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

person Gareth Rees    schedule 25.02.2009