Flash Ripper RSS Readers

Волшебная Частота, 21 и 31 FPS

В среде Флэш-разработчиков, как дизайнеров, так и программистов, довольно часто возникает вопрос, почему частота кадров в 31 кадр/с считается оптимальной для большинства SWF-документов.

Уже невозможно узнать, кто первым объяснил это, но давайте запишем данное объяснение здесь, просто для того, чтобы можно было на него ссылаться при необходимости (а вот -- англоязычный аналог, Magic Framerate by Brajeshwar, и еще один, Magic Framerate Info by Mike Williams).

Итак, речь идет о так называемой "Волшебной частоте кадров" ("Magic Framerate") -- когда значение частоты кадров равняется нечетным числам типа 21 и 31. Вопрос в том, почему именно частоты кадров такого рода считаются оптимальными. Ответ заключается в том, что значение частоты кадров, FPS, хранится в числе с плавающей запятой формата "16/16" (можно также встретить обозначение "16.16"). В таком числе 16 бит отводится под целую часть, и 16 бит -- под дробную. На практике арифметические операции с такими числами довольно ограничены в точности -- и с каждой новой операцией накапливается ошибка. При использовании FPS в 21 и 31 эта ошибка минимальна.

Операции
Флэш преобразовывает заданное разработчиком значение частоты кадров в ряд значений длительности каждого кадра в миллисекундах (т.е. определяет, сколько миллисекунд кадр будет отбражаться на экране прежде, чем его сменит следующий кадр). В результате общая точность просчета частоты кадров всего флэш-клипа становится до смешного низкой, за исключением случаев, когда используются "хаки" типа техники под названием "форсирующий слой" ("kicker layer" -- прием, когда мы фиксируем частоту кадров клипа, добавляя специальный слой с зацикленным Stream-звуком).

Например, заданное разработчиком значение частоты в 24 кадр/с сначала преобразовывается в ряд длительностей каждого кадра, равных 41 миллисекунд; затем ряд длительностей фактически преобразовывается обратно в частоту кадров, но частота после этих преобразований равна уже 24,39 кадр/с -- из-за неточностей при арифметических операциях с числами типа "16/16". А поскольку длительности кадров хранятся как относительные значения, а не как абсолютные, то в результате накапливается действительно значительное искажение частоты кадров. На Макинтошах это искажение больше, на PC -- меньше, но оно достаточно большое в любом случае.

Числа (21 и 31 потому и называются "Волшебными Частотами Кадров", что при их использовании отклонение реальной FPS от заданной разрабочиком минимально. Но, как вы видите, реальная причина преимуществ этих чисел лежит достаточно глубоко, так что лучше просто запомнить их (21 и 31), а не текст этого объяснения (в конечном счете мало что объясняющий тому, кто не погружен в математику).

А тем, кто желает в нее погрузиться -- ссылка:
Введение в математику для чисел с фиксированной запятой.

Писал Rost, 24 Декабрь 2004 14:25

Найдены баги:

Поправьте меня, если я не прав в моем выводе:

Эти числа (21 или 31 fps) уменьшают погрешность реального времени продолжительности Х кадров относительно заданного (установленного). Связано это с особенностями квантования формата 16.16. Соблюдение их важно, если звук связан с действием в кадре, что-бы они были синхронны. Различие же в производительности (нагрузке на процессор) при использовании этих чисел не должно отличаться от любых других чисел.
Грубо выражаясь, их "магическая сила" в том, что они без остатка (или с минимальным по сравнению с другими) делятся на число Х. Всего лишь.
В случае, если синхронизировать начало конкретного кадра с чем-нибудь не нужно, использование их абсолютно необязательно.

Uri - 25 Декабрь 2004 23:32

Если я правильно понял. То процесс преобразования протекает так :

время_между_вызовами = 1000мс/частота
1000/24=41.(6)

преобразовываем в hex со отбрасыванием дробной части, получаем 41.(6)=29h

преобразовываем обратно
29h=41

получаем новую частоту 1000мс/время_между_вызовами
1000/41=24.3902439....

Если это так, то частота без потерь должна быть 25, а не 21 и 31.

iNils - 26 Декабрь 2004 13:44

Отличная статья! Не знал, Спасибо, Рост, что перевел!

Dr_Zoidberg - 26 Декабрь 2004 20:55

хм , не знал ... я всегда использовал только 30,40,45,50,60 кадров в секунду , а все таки 31 это мало.

Eduard Chkolayn - 31 Декабрь 2004 12:17

Глупость какая.

Кто мешает использовать не миллисекунды, а микросекунды используя точный таймер (QueryPerformanceCounter Win API)? Это раз.

Кто будет после округления копить ошибку считая время от начала работы приложения? Это два.

1000 / 20 = 50
1000 / 25 = 40
О чудо! "Слався Джей! Слався Джей!" © MIB II совпадение один в один! Это три.

C2 - 4 Январь 2005 0:51

И, наконец, dword обеспечивает вполне себе неплохую точность, что за ламерство?

C2 - 4 Январь 2005 0:54

сегодня рулит новая волшебная частота 41 fps :-)

_dikey_ - 14 Январь 2005 15:26



Это запись из категории 'Articles'. 10 еще cвежих:

Архивы по категориям:

3D-18, Adobe AIR-30, Animation-1, Apache Ant-1, Architecture-1, ARP-1, Art-25, Articles-26, AS3-52, Books-7, Business-3, Cairngorm-2, CI-1, Classes-10, Coding-30, Community-113, Components-19, Contests-28, Cool-Job-5, Debug-18, Design-26, Development-84, EMO-1, Events-13, Extensions-2, FAQ-8, FDS-1, Flash and html-5, Flash Player-35, Flash Updates-8, Flash-scene-1, flash10-4, FlashLite-2, Flex-30, Flex 2-80, Flickr-1, FMS-1, FPUG-46, frameworks-1, Games-11, Good Job!-35, HaXe-14, Health-2, Humor-10, Ideas-13, JavaScript-1, Job-26, JSFL-8, Links-2, Linux-1, Maps-1, Math-8, Money-11, MXML-1, Open Source-15, Optimization-2, Patterns-2, Personalities-27, Politics-1, Preloading-3, Productivity-9, PureMVC-10, Pv3d-1, Rafpug-4, Red5-3, Remoting-11, Resources-21, Ruby-6, SAAS-1, Security-11, SEO-8, Silverlight-5, Sound-3, Strategy-120, Tamarin-1, Tools-113, Training-2, Trash-8, URAFPUG-13, Urgent-1, Usability-6, Video-6, VoIP-5, Wallop-1, Wishlist-2, Архив всех записей (большой)

За последние месяцы:

Июл 2008: Международная встреча разработчиков URAFPUG завершена, URAFPUG - трансляция студии Flex-фреймворка Mate, весь Июл

Июн 2008: Попытка предварительных выводов о встрече аниматоров, Онлайн трансляция встречи аниматоров в Донецке, весь Июн

Май 2008: Если 3D, то по-взрослому: официальный запрос в Adobe по поводу контроля над мип-маппингом. Нужна ваша поддержка!, В этом году «Russian Flash Awards» пройдет в «космическом стиле», весь Май

Апр 2008: Программирование под флэш платформу. Cтатья (местами спорная), Advanced Flash Components бесплатно раздает все свои AS2-компоненты, весь Апр

Мар 2008: Зарплаты программистов в 2007 году, FlashPhone как технология года? Технология года? В Рунете?, весь Мар

Фев 2008: ЙА ФПУГ — регистрация на первую встречу UAFPUG продолжается, Закулисы Flex и секрет успеха опенсорс-проекта, весь Фев





Примечания:
Статус документа
: в процессе
   2002-2007 Производство: Рост Прибыли · О проекте · Подписка на новости (RSS)