Müstiline Flash’i frame rate
23.07.2006 | LembitAdobe’i Flex’i arendaja Mike Morearty kirjutab oma blogis, et kanäe! — kõrgem frame rate muudab Flash’i tekstiväljadele teksti sisestamise palju sujuvamaks. Mike on oma avastusest sillas ja lubab, et teeb edaspidi oma Flex’i rakendusi ainult alates 60 fps kaadrisagedusega. Minu tähelepanu äratas tema näidis-muuvi, kus saab katsetada tekstisisestust erinevate fps-idega — sealne maksimum on 180 fps! Paistab, et tegu on AS 3 / Flash Player 9 pakutava uue maksimumiga, sest Flash 8 IDE (nagu ka varasemad versioonid) ei luba määrata kõrgemat kaadrisagedust kui 120 fps. Kui meenutada, et Flash Player 4 oli võimeline reaalselt saavutama max frame rate‘i 18 fps, siis võiks justkui väita, et 5-6 aastaga (Player 5 ilmus augustis 2000) on toimunud 10-kordne hüpe player‘i jõudluses.
Flash Player’i jõudlusest rääkides on fps muidugi vaid üks suht kõrvalinegi detail, igatahes pani aga Mike’i postitus mind mõtlema Flash’i kaadrisageduse peale laiemalt, mis on minu jaoks olnud paras müstika sellest ajast peale, mil Flash’iga tegelemisega alustasin. Kasvõi see maksimum, 120 fps — miks üldse lubada sellise fps-i määramist, kui player‘i reaalne lagi on palju väiksem? Player 4: 18 fps, nagu mainitud; see Adobe TechNote aga tunnistab meile nagu muuseas, et vanemad player‘id kui 8 ei suutnud üldjuhul saavutada kõrgemat kaadrisagedust kui 24 fps! Ning hoiatab, et vanemad muuvid võivad seetõttu mängida player 8-ga ootamatult tempokalt…
Ametlik soovitus — 12 fps
Meenub, et esimesi teemasid, mille kohta Flash’i manuaalist vastust otsisin, oligi optimaalne fps. Selle koha pealt on manuaal jäänud aastateks väga kidakeelseks.
- “By default, Flash animations play at a rate of 12 fps, which is ideal for web animation.”
- “Try not to use a frame rate that’s more than 30 to 40 fps; high frame rates put a lot of stress on processors, and do not change the appearance of the animation much or at all at runtime.”
Et 12 fps ei ole sugugi “ideaalne” kaadrisagedus, seda märkab kiiresti igaüks, kes Flashiga tegelema asub. Seda on lihtsalt liiga vähe pea iga suvalise animatsiooni sujuvaks taasesituseks. Kui see lause aastal ‘96 vms manuaali kirjutati, võis see olla muidugi kohane, mõeldes maailmale, kus valdav enamik veebiühendusi loodi modemitega.
Levinud standard — maagiline 31 fps
Kui manuaal ei aita, tuleb vastused katse-eksituse meetodil ise leida. Müstilis-müütiline universaalne-ideaalne soovituslik kaadrisagedus Flash-kogukonnas on olnud aastaid 31 fps. Kui vanemad kolleegid seda mullegi soovitasid, siis pidin peale usinat katsetamist möönma — selle fps-iga mängivad vägagi erinevad muuvid erinevates arvutites suht sujuvalt. Olen sageli kohanud ka “valve-fps-i” 30, aga julgen väita, et enamik “vanu tegijaid” kasutab just 31 fps sagedust.
Ometi, mingit n-ö ametlikku kinnitust, kommentaari või arvamust Macromedia/Adobe’i poolt ma sellele maagilisele numbrile kohanud ei ole. Vastavad otsingud Adobe’i lehel kipuvad andma tulemuseks peamiselt Flash Video’ga seotud artikleid. (Enamasti on Flash’iga integreerimisele tulevad videoklipid 24 fps või 25 fps (PAL standard), mis aga pole hirmus oluline, sest progressive download‘i kasutades mängib video nn konteiner-muuvi kaadrisagedusest sõltumatult. Mis aga on muidugi juba hoopis teine teema…)
Tume tegelikkus — ?? fps
Kes on viitsinud siiamaani lugeda, seda ilmselt tõesti huvitab Flash ja tema frame rate
Säensele huvilisele sobib maiuspalaks Flash Player’iga töötava Adobe’i inseneri Tinic Uro blogipostitus tänavu maist: Frame rates in the Flash Player. Mõningaid noppeid.
- “Flash uses a relative timing model, meaning it does not really care about a global frame rate, but will instead try to enforce frame intervals as best as it can.”
- “This loose timing causes all kinds of problems.
- First, the Flash Player depends on high level OS events to deliver timing messages.
- Second, we round frame intervals to milliseconds since Windows and MacOS can’t support fractional time intervals.
- Third, the OS, the browser and the Flash Player will add overhead to the code executed on each frame, meaning that in the end the actual frame rate will sway between -10 to +5 frames/sec from the actual selected frame rate, depending in what environment you play it in.”
- “Lets talk about maximum frame rates. In Internet Explorer this is 100 frames/sec. Why? Because the minimum time slice Windows timers can provide is 10 milliseconds.” (Siinkohal mainib Tinic, et max kaadrisagedus Firefox’is on piiratud sisse-ehitatult kõigile pluginatele, aga ei too välja konkr. numbrit.)
Kõige tähtsam iva ja soovitus Tinic’u jutus kätkeb aga selles lõigus: “The frame rate you select does not really mean too much and you should not depend on it in a way to be accurate to the millisecond. This especially goes for ANY sort of synchronization. If you need synchronization your only choice is placing code in ActionScript which will ‘correct’ your timing or workarounds like placing a streaming sound on your main time line (in which case we use the audio device to report time correctly to the nanosecond).”
Nn streaming audio workaround‘i kohta, millele Tinic viitab, saab lähemalt lugeda näiteks siit.
Kokkuvõte ja praktiline näpunäide
Flash Player’i tegelik kaadrisagedus konkreetsel hetkel konkreetses masinas sõltub väga paljudest teguritest. Arvan, et “vana hea” global frame rate 31 fps* sobib enamikul juhtudel soovituslikuks maksimumiks ka edaspidi. Pole põhjust arvata, et 40, 50 või 60 fps annaks olulist eelist, küll aga suurendab märkimisväärselt flash muuvi failisuurust. Ehkki Flash Player 9 on väidetavalt eelmistest kordades kiirem ja suutlikum, läheb selle levimisega massidesse veel aega (Adobe’i väitel on viimased player‘id jõudnud üle 80% levikuni ca aastaga).
Reklaambännerite puhul võiks muidugi püüda kasutada madalamaid kaadrisagedusi, miks mitte isegi 12 fps. Kasutaja rollis olles ei meeldi ju kellelegi meist, kui mõni portaal arvuti “kooma tõmbab”. Samas, miks peaks just minu surematu taies vaeslapse ossa jääma, kui konkureerivad bännerid kõik püüavad player‘ist rohkem välja pigistada?
Et IDE-s määratav fps on player‘i jaoks n-ö soovituslik maksimum, ei enamat, on kindlasti mõistlik püüda ehitada muuvisid võimalikult timeline‘ist sõltumatult. Nagu soovitab ka Tinic, igasugune ajastamine tuleks teha läbi ActionScript’i — siia sobivad märksõnad nagu setInterval(), callback‘ide ja event listener‘ide kasutamine, Tween class jne.
Ehkki arvutite jõudlus kasvab kiiresti, ei saa optimeerimise tähtsust erinevate veebis kuvatavate vidinate juures üle hinnata. Kui müütiline Flash’i frame rate 120 fps oleks ka ehk homme saavutatav, ei soovitaks küll seda kellelgi kasutada.
* — 30 või 31 fps? Seda lugu kirjutades hakkas mind see küsimus aina rohkem kummitama. 31 on ju ikkagi nii neetult ebaümmargune ja kui lugeda väiteid, et Flash Player’i frame rate on ka otseselt seotud monitori refresh rate‘iga (värskendussagedus), kipub 30 kohasem tunduma. Seega, peale kogu seda pikka mula — the quest continues
