15/02/22

Full Motion Video

FMV má na strane koncového uživateľa dve dôležité fázy. Dekódovať zabalené dáta - mimoriadne CPU naročné a potom tie pixely rýchlo vykresľovať. Ak nemáte dobré GPU, tak je všetko na pleciach CPU. Kapitálny problém v roku 1993 s i286-386 procákom. Beh 3D hry je v tomto smere veľmi podobný. Transformácia vertexov na scéne - CPU na kolenách. Rasterizácia bez dobrého GPU - opäť všetko odmaká definitívne porazené CPU. Ak teda vaša i386/SX nezvláda DOOM v 320x240 pixel na 35 fps, tak nedá tutovo ani to FMV video v tej istej kvalite. Rozbehať DOOM, Quake alebo Crysis na všetkom od kľúčenky s displayom po inteligentnú ladničku patrí aj dnes medzi otrepaný herný foklór. Ide o hry, ktorá každá vo svojom čase výrazne prekračovala nárokmi HW vybavenie bežného hráča. Preto ten humbug. Menej pozornosti sa už dnes venuje /vlastne žiadna/ schopnosti prehrať FMV cez celú plochu obrazu - 25 pekných obrázkov za sekundu pri plnom pokrytí všetkých viditeľných pixelov. V čase DOOMa to bola ďalšia neriešiteľná vec. Hráč mal ledva procák triedy i386/SX33 alebo i386/DX40 s 8-16 bit ISA grafikou a tie v CD hre s FMV videami ako Star Wars: Rebel Assault /1993/ úplne prepadali. Recenzenti si to v 1993-1994 všimli tiež. Nutná bola nemožné drahá i486/DX66 na high tech 32 bitovom grafickom VESA LB slote. Aj toto monštrum by však okamžite havarovalo po kontakte s MPEG štandardom. Tento audio/videok kodek potreboval minimálne Pentium pri pokuse zvládnuť to softvérovo bez patričnej a na to určenej HW podpory /ilustračne dcérska "FMV MPEG" doska pre Amiga CD 32 konzolu veľká ako stôl a drahá ako volvo/.

Najjednoduchšie možné FMV video si predstavte ako sled obrázkov v plnom rozlíšení /bez kompresie a teda bez nutnosti dekompresie/, ktoré rýchlo hádžete na obrazovku. A každý obrázok je jedinečný. Rozlíšenie obrazu krát farebné rozlíšenie krát počet snímkov za sekundu a hneď zistíte, že vaše i386 CPU tie pixely tak rýchlo na obraz neprenesie. CPU je pomalé, zbernice sú veľmi pomalé, grafická karta je iba RAM s DAC. Nie je to GPU, nie je tam HW podpora pre nič. Fillrate /počet pixelov generovaných za sekundu/ je maličký a nestačí ani na plynulý skroling 2D grafiky v hre čo je invertovane to isté ako to plynulé 2D video. Rebel Assault však aj tak na tej i386 nejako beží. Dosiahne sa to jednoducho tým, že každú premennú rovnice razantne upravíme smerom nadol. Rozlíšenie sa stiahne napríklad na 1/4 a tie pixely sa potom nasilu roztiahnú na veľkú plochu. Je to teda príšerne kockaté a bez detailov, z hicolor 65K palety zlezieme na 256 farieb, alebo ešte nižšie a z 25 fps na polovicu alebo aj pod 10 fps. Je to teda hnusné a hýbe sa to prískokmi. Nečudujte sa teda šokovaným výrazom na tvárach hráčov, keď v intre Resident Evil 1 na PS1 uvideli plynulo prehrávané ľudské tváre v skvelom rozlíšení. PS1 mala nielen GPU s podporou pre 3D T@L ale aj HW dekodér pre dáta v MPEG formáte. PS1 s CPU na 33MHz teda bola o celú generáciu pred nastupujúcimi hernými PC.

 
 The 7th Guest (1993, PC) - miliónove predaje, "CD FMV" killer app !!

V rozlíšení 320x240 v 8 bit palete je na jeden snímok potrebné asi 80 KB dát. Jedna sekunda videa na 25 fps teda chce 2 megabajty /taký dátový tok z floppy mechaniky a ani z CD v 1993 nedostanete/. Jedna minúta videa je 120 megabajtov a jedna hodina šokujúcich 7200 mega. Ak to teda dobre rátam. Na jedno bežné CD a dokonca ani DVD sa to nezmestí. MPEG kompresia to zmáčkne na malé zlomky tohto množstva a vystačí si aj s pomalou CD mechanikou /v prípade PS1 - double speedka/. Bohužiaľ na ošéfovanie MPEG formátu potrebujete buď dekompresný HW modul alebo ninja CPU. Amiga alebo bežné PC, konzola /SNES, MD/ v DOOM ére nič podobné nemala.

O viac ako 25 rokov neskôr tu je ZX Spectrum Next, ktoré pomaly finalizuje svoju HW podobu ako najvýkonnejší 8 bit všetkých čias a tá podpora pre MPEG tam nie je tiež. Nemá ju preto, lebo to už niet kde na FPGA vopchať /vybrali si lacný a nie veľký chip, semantický rozdiel je vám jasný/. Kapitolu či to zvládne "DOOM", už máme za sebou. Urobil sa až jeden pokus, dnes sa vážne nechce nikomu kódovať len tak pre radosť. Prišiel čas zmáknuť aj to FMV. Next je natívne napojené na radič s flashkou a má na 8 bit platformu veľmi rýchlu "2D" grafickú kartu. Plnohodnotný DOOM ZX Spectrum Next nikdy nezvládne ale 2D SHMUP hru rozbehá asi lepšie ako poctivá i386/DX40ka. Starý dobrý StarGunner /1996, PC/ mal v minimálnych HW specs uvedenú i486/8MB RAM pre rozlíšenie 320x240 na 60fps a nechcem strašiť, ale Next to dá na 30 fps už v prvej generácií svojich hier v obdobnej kvalite. Teoreticky. Prakticky sa to nikdy nestane. Malá základňa.

Šialený dav však chce na Nexte aj CD "flash SD" FMV hry ako ten Rebel Assasult alebo FMV aj s projekciou skutočných 3D meshov alebo sprajtov do videa. Je to možné ? Áno a to priamo "day one" z krabice. Podľa dev tímu výkon SpecNext 2D jadra, DMA a flash SD radiča stačí bez problémov zásobovať pixelami základné "legacy" rozlíšenie 256x192 pixel aj 25 snímkami za sekundu v 256 až 512 farbách. Rozhodne v lepšej kvalite ako tá hnusne kockatá cukatúra na i386 v FMV CD hrách. Problém s takým nekomprimovaným videom je, že každá sekunda je asi 1.2 mega dát a jedna minúta teda 72 mega, desať minút zas 720 mega. Niekoľko šikovných a veľmi strašne šikovných speccy kóderov preto rozpracovalo zopár nápadov, ako si s tým poradiť.

Kev Brady ešte pred asi troma rokmi na starej verzii 2D Next jadra /iba rozlíšenie 256x192 pixel, dnes je to až 640x256/ a na polovičnej rýchlosti systému /CPU, GPU, DMA na 14Mhz/ ukázal video v širokouhlom rozlíšení 320x180 pixel s akceptovateľnou kvalitou a rýchlosťou. A išlo o komprimované video s dekompresiou v reálnom čase. Toho chlapíka žeriem, ide o jedného z najlepších žijúcich speccy ASM kodérov na svete. To 320 pixelové rozlíšenie po horizontálne dosiahol tak, že využil HW sprajty a vľavo a vpravo mimo hlavnej zobrazovacej plochy nimi v vertikálnych stripoch natiahol obraz do šírky a do adresného priestoru tých sprajtov /sú vo vlastnej extra RAM mimo hlavný systém/ namapoval pixely toho videa. Je to blázon. Klikni na video v komentároch o dĺžke 2:38 minúty 

Použil delta enkódovanie dát vo forme rozdielov /delty/ v sekvenčnom slede snímkov, skôr ako prácu s celými snímkami si teda všíma zmenu medzi dvoma snímkami. Ide sa až na úroveň jednotlivých scanline - riadkov obrázku. Túto prácu si urobíte na PC. Dekódovanie už beží na Nexte. A ide ešte ďalej. Veľmi špinavo /ako je na spektre zvykom/ využíva scroll HW registre v osi X a Y na pomoc s počítaním a uložením "motion" vektorov pohybu pixelov na obrazovke. Používa vlastné sofistikované softvérové kešky, double-buffering a pre-buffering /poznáte aj z YT videa/. Pozná to variabilný bit rate a variabilný dithering medzi snímkami. Používal v našom konkrétnom prípade 24 bitové PC video konvertované vlastným enkóderom do 9 bitovej palety Nextu /to je 512 farieb/. Next paletu bolo možné nastaviť individuálne pre každý frame osobitne. V jeho formáte má 10 minút videa s mono 15KHz zvukom asi 140 megabajtov. Dosahuje kompresiu okolo 6:1, čo je skvelé. Povedal tiež, že sa kódu od vtedy nedotkol a na novom jadre /turbo DMA, MMX inštrukcie/ s oveľa vyššou rýchlosťou to dokáže v ešte lepšej bravado kvalite, teraz však robí na konverzii hry z PC na Next

Jari Komppa a jeho "very slow" video prehrávač pre ZX Spectrum Next,
   možné použitie aj v hrách s predpočítanou trajektóriou pohybu

Najnovšie "work in progress" info na poli FMV pre Next. Oveľa menej talentovaný Jari Komppa sa pokúša o to isté ako Kev Brady, ale na najnovšej verzii HW Nextu. Ako oveľa horší kóder sa dopredu ospravedlňoval nech nečakáme zázraky. Prehrávač mu zatiaľ funguje iba v základnom rozlíšení 256x192 pixel, zvuk tam nemá /ale pracuje na tom/. Používa jednoduchú strátovú 1:2 kompresiu, nemá variabilný bitrate, nemá variabilný dithering, blending, plávajúce palety. Nemá vlastne skoro nič. Je to proste naivné cvičenie začiatočníka. Do procesu teda vstúpil špičkový kóder speccy demoscény pod nickom ped7g a pomohol mu extrémnnym spôsobom ten bordeľ aspoň zrýchliť. Stále je to "hlúpy" ale už aspoň veľmi rýchly kód a v alfa 0.6 verzii zvládne pekné kúsky a dá sa cez neho núdzovo prehnať aj celý Ghostbusters /1984/. Ak vaša hra nutne potrebuje animačku, intro, game over outro tak to rýchla cosplay s postefektami a jeden mobil s Jari Komppa softom dostane do Nextu. Má to celé v kompletnom balíku /enkóder, dekoder, streaming API, knižnica pre OS/. Čakám na verziu so zvukom, lepšou kompresiou, demátko ala Rebel Assault. Bonus - celosvetovo beží populárna FMV súťaž ako dostať toto referenčné Bad Apple !! video na systémy, kde FMV nemá čo robiť. Zamachrovať, ultra low level nakódovať a ohromiť svet.

8 comments:

  1. Čumím na ten Ghost Busters klip a říkám si jak je to hnusné... Ten algoritmus asi nebude nejideálnější pro realfoto videa. Toto Sega CD video z NHL používá nějaký dithering a vypadá to podstatně koukatelněji i když to má asi menší rozlišení.

    ReplyDelete
    Replies
    1. ... vid jeho YT kanal, mas pravdu, jeho algoritmus ide super, ked obraz nema high freq detaily .. ako tie poly animacie .. ten od Kev Brady to dava ovela lepsie .. podobne asm cvicenia by ma bavili, ale ako vidis .. masina je vonku 4 roky a su iba 2 tieto pokusy.

      Delete
  2. ... dnesne info ku 16.2.2022 - "Jari Komppa FLX update: LoRes and HiRes. Added support for 128x96, 320x256 and 640x256 modes. Since LoRes can't simply flip but has to be copied to the screen it's not as lightweight as one would hope. And higher resolutions are naturally heavier than the default.. but the support is there."

    ... je tu 100% priestor pre sikovnych koderov a FMV player sa podla mna da vyladit na velmi peknu uroven .. rozlisenie, farby, bitrate.

    ReplyDelete
  3. ... 486DX40 prehrava video - 160x120px na 15fps a s hroznou kvantizaciou obrazu .. Next to s minimalne o 50% lepsou kvalitou /rozlisenie, bitrate/ a od 20 fps nahor kedykolvek.

    ReplyDelete
  4. ... Dreamcast CD FMV hra .. ale aka to hra .. asi jedina interakcia je stlac PLAY na zaciatku .. detektivka o masovom vrahovi.


    ReplyDelete
  5. ... 8 bit NES FMV player - Matrix !!

    ReplyDelete
    Replies
    1. Ten zvuk je fantatický. To fakt používají jen ten zvukáč v NES? No je to jednoznačně nejlepší video přehrávač na jakémkoliv osmibitu, kam se hrabe C-64... Možná ještě Master System by mohl zabodovat i když nejsem si jist s audiem...

      Delete
    2. ... sam som prekvapeny, ze to utiahne 44khz vzorkovanie .. musi tam byt nejaka kuleha, pouzivaju mapper so strankovanim na nekonecne velke ulozisko .. viem, ze sa pri grafike natrapili s tiles gfx samplovanim, ide stale o 8 bit co prenesie zopar kilo za sekundu ale zatial OK .. ukazuju kvalitny kod.

      Delete

**** pre vloženie hypertextového odkazu do komentára použi CSS kód: hyperlink ****