Deluxe Paint w praktyce (38.) ----------------------------- BARDZO DÎUGA HISTORIA I TROCHË RACHUNKÓW Wszyscy, a zwîaszcza dzieci, lubiâ bardzo dîugie historie. Takâ historiâ, opowiadaniem czy bajkâ moûe byê animacja, ale jak jâ opowiedzieê, ûeby byîa bardzo dîuga? Stanisîaw Wësîawski Pierwszy pomysî, jaki przychodzi w takich wypadkach do gîowy, to wykonanie animacji w pëtli. Ale to nie wymaga specjalnych zabiegów, a programy do prezentacji, takie jak Director, DeluxeVideo, AmigaVision, Helm, MediaPoint i oczywiôcie Scala, mogâ wyôwietlaê animacje i îâczyê je bez problemów. W takim wypadku moûna opowiedzieê naprawdë dîugâ historië. Jednak taka porcja animacji nie moûe byê nadmiernie wielka, sprzët ma ograniczonâ pamiëê RAM i trzeba znaleúê sposób, aby zamknâê jak najwiëkszâ liczbë klatek animacji w jak najmniejszym pliku. Trafiîem niedawno na Sieci na animacjë opisanâ jako "144-klatkowa animacja w DPaint". Autor, co prawda, wyjaôniaî, ûe chodziîo mu o zilustrowanie idei nowej gry, jednak animacja "Pult" w efekcie rozczarowywaîa. Caîoôê wykonano w czterech kolorach i moûna byîo na niej zobaczyê malutkâ sylwetkë czîowieczka biegnâcego przez prosty labirynt, narysowany na jednym ekranie. Jedyny powód wykonania animacji w czterech kolorach widaê na ostatnich klatkach, gdzie mamy parë "krwawych" pikseli -- reszta jest caîkowicie jednokolorowym konturem na gîadkim tle. Caîoôê zajmuje po rozpakowaniu 52 286 bajtów i prezentuje sië na ekranie PAL lo-res, czyli 320 x 256 pikseli. Zupeînie inne wraûenie robi "firmowa" animacja "Doggie's Inferno". Autor, Gene Hamm, przedstawiî w oômiu kolorach NTSC lo-res lace, czyli 320 x 400 dramatycznâ historië spokojnego psa zaatakowanego przez zîy hydrant. Caîoôê zawiera aû 317 klatek i zajmuje 153 576 bajtów, co w tym wypadku nie jest wcale duûâ wielkoôciâ. Animacja jest wykonana w solidnym disneyowskim stylu i wykorzystuje siedem kolorów z oômiokolorowej palety. Obie animacje zrobiono w tradycyjnym formacie Anim-5. Sekret maîej objëtoôci animacji w porównaniu z odpowiedniâ liczbâ pojedynczych obrazków polega na zapisywaniu przez program animacyjny tylko róûnic miëdzy klatkami. Jednak historia psa ma pîynny ruch tradycyjnej animacji i pozornie trudno uwaûaê jâ za îatwâ do kompresji. Dwie pierwsze ilustracje pokazujâ analizë "Doggie's Inferno". Okazuje sië, ûe 317 klatek animacji to wîaôciwie mniej wiëcej tylko 40 róûnych klatek umiejëtnie rozmieszczonych i powtarzanych w caîej animacji. Jedynymi odstëpstwami od tego piëknego skrótu sâ maleïkie kropki úrenic oczu psa, krâûâce na kilku klatkach i niebieskie paski, poruszajâce sië na strumieniu wody oraz jej rozbryzgi na gîowie ofiary. Dalej mamy naprawdë tylko 40 róûnych klatek. Do tego spory kawaîek tîa i rysunku gîównego bohatera pozostaje bez zmian. Na uwagë zasîuguje równieû sposób opowiedzenia anegdoty. Historia jest w najwiëkszym skrócie taka: Pies spokojnie ôpi. Z boku skrada sië czerwony hydrant. Zîoôliwie polewa psa strumieniem wody. Oblany pies budzi sië z obîëdem w oczach. Hydrant ucieka. Pies powoli uspokaja sië, ziewa i zasypia. Koniec. Moûna wyôwietlaê od poczâtku. Jak to zrobiî Gene Hamm? Przez pierwszych 31 klatek pies spokojnie ôpi. Jest to ten sam nie zmieniony obrazek. Na piëciu nastëpnych klatkach pojawia sië nieruchoma stopa "uczîowieczonego" hydrantu. Szybki ruch nogi na jednej klatce i dziesiëê klatek nastëpnej "ostroûnej" fazy ruchu. Dwa ruchy po dwie klatki zbliûania sië do ofiary (widaê caîâ postaê napastnika). Jedenaôcie klatek celowania w psa. Dwie róûne klatki odkrëcania zaworu i siedemnaôcie klatek "psiego piekîa" -- woda sië leje, pies ma obîëd w oczach. Jedna klatka rëki na zaworze i cztery zakrëcenia. Teraz ucieczka agresora: jedna klatka -- obrót, osiem klatek fazy rozpëdu-zamachu, jedna, dwie i jedna klatka ucieczki. W tym momencie dochodzimy juû do 1/3 animacji. Dalej pies "stygnie" i zasypia animowany w podobny sposób. Fazy ruchu (jednakowe klatki) zatrzymywane sâ przez kilka lub kilkanaôcie klatek lub trwajâ bardzo krótko. Jeûeli coô ma trwaê dîugo albo "dziaê sië" wolno, wystarczy powtórzyê parë razy ten sam obrazek. Jeûeli akcja toczy sië szybko, roônie tempo, trzeba fazy ruchu przedstawiaê na mniejszej liczbie klatek lub wrëcz na odrëbnych, pojedynczych klatkach. Dla Amigi istnieje parë nowoczeôniejszych formatów animacji, miëdzy innymi takich, które potrafiâ wyôwietlaê animacjë ze zmiennâ prëdkoôciâ dla róûnych klatek. Jest oczywiste, ûe takie metody powinny zaoszczëdziê trochë objëtoôci pliku animacyjnego, ale najlepiej uczyê sië nowych rzeczy, zaczynajâc od technik najprostszych, podstawowych, w naszym wypadku prawie klasycznych. Animacja psa w formacie ANIM-5 jest wzorcowym przykîadem umiejëtnego poîâczenia oszczëdnoôci materiaîu przy moûliwie maksymalnym efekcie. W nie istniejâcym juû, niestety, piômie "Amiga World" ukazaî sië parë lat temu artykuî* o sposobach zmniejszania objëtoôci animacji. Wymieniono tam piëtnaôcie takich metod, ale wiëkszoôê z nich dotyczy ogólnych zasad tworzenia animacji (np. mniej kolorów) lub sposobów jej wyôwietlania w programach prezentacyjnych. Niektóre metody jednak sâ zdecydowanie warte uwagi i idealnie pasujâ do tematu artykuîu. Trzeci obrazek pokazuje eksperyment, ilustrujâcy jednâ z tych zagadek. Wykonaîem prostâ oômioklatkowâ animacjë w formacie PAL hi-res lace -- 8 kolorów. Sama animacja jest prosta -- przedstawia zwykîe przeksztaîcanie jednej figury w drugâ i wykonana jest jednym kolorem z palety. Dlaczego morfing, a nie na przykîad strzaîka? Chciaîem po prostu uniemoûliwiê programowi wykorzystanie podobnych klatek -- w tym przykîadzie wîaôciwie kaûda klatka jest inna. Na ilustracji widaê paletë z numeracjâ kolorów. Poniûej w postaci sîupków pokazaîem objëtoôê animacji przy róûnych modyfikacjach doôwiadczenia. Pierwszy eksperyment to animacja pustej strony albo, jak kto woli, obiektu w kolorze tîa. Program musiaî zapisaê informacjë o palecie, liczbë klatek, format i tak dalej i wyszîo mu 5570 bajtów. Animacja obiektu biaîego i czerwonego -- kolory odpowiednio numer 1 i 2 to 8802 bajty. Jak widaê, róûnicy wielkoôci przy róûnych kolorach nie ma ûadnej, a dodatek w postaci rysunku na ekranie nie powiëkszyî animacji nawet o 100 procent. Co z tego wynika? Kolor nie ma znaczenia? A guzik! Wykonanie rysunku w kolorze zielonym -- numer 3, powiëksza animacjë do 13 076 bajtów. Od razu uprzedzam ewentualne domysîy -- barwa nie ma tu ûadnego znaczenia, liczy sië tylko miejsce w palecie. Niebieska animacja (kolor 4) znowu daje 8802 bajty, a niebieskozielona (numer 7 -- ostatni) gwaîtownie roônie aû do 17 364 bajtów. Ostatni eksperyment to animacja kolorem biaîym (numer 1), z maîâ niebieskozielonâ kropkâ (numer 7) na pierwszej klatce. W wyniku mamy prawie 900 bajtów wiëcej niû animacja bez kropki. Po takich doôwiadczeniach wziâîem sië za coô wiëkszego. Strona ilustracji trzeciej (tej wîaônie opisywanej) zostaîa "zanimowana" na 50 klatkach. Wynik -- 39 764 bajty. Teraz 100 klatek. Wynik -- 46 364 bajty. Potwierdza to wnioski z poprzednich doôwiadczeï, ûe liczba klatek minimalnie wpîywa na objëtoôê animacji, liczâ sië tylko róûnice w klatkach i miejsca barw w palecie. Piëêdziesiât klatek takiej animacji uzupeîniîem o maîâ strzaîkë przesuwajâcâ sië z lewa w prawo. Biaîa strzaîka -- 50 892 bajty, szara -- 60 620, biaîa z niebieskâ obwódkâ -- 61 388. Wyjaônieï dostarcza wspomniany artykuî w Amiga World. Autor pisze, ûe najmniejszy koszt daje uûywanie kolorów numer 1, 2, 4, 8, 16 itd. Zapisywane sâ jednym bitem. Drugie w kolejnoôci dobre miejsca to numery (rejestry) 3, 5, 6, 9, 12, 17, 18, 20 i 24. Zapisywane sâ dwoma bitami. Czwarta ilustracja pokazuje przykîady zastosowania tego sposobu. Animacja (nie pamiëtam juû jaka) z czterema kolorami z szesnastokolorowej palety daîa 11 814 bajtów. Przesuniëcie tych barw na najlepsze miejsca (2, 4, 8 i 16) zmniejszyîo animacjë do 87 procent. Przesuniëcie barw na drugie w kolejnoôci dobre miejsca (3, 5, 6 i 9) daje tylko 95 procent oryginaîu. Jednym z wniosków dodatkowych, jakie z tego pîynâ, jest taki, ûe nie tylko naleûy uûywaê "popularnych" w animacji kolorów na dobrych miejscach w palecie, ale równieû trzeba te nie uûywane przesunâê na sam koniec. Niektóre programy majâ narzëdzia uîatwiajâce takie zabawy. Nistety, nie ma tego Deluxe Paint. Po pierwsze histogram. Moûna tam zobaczyê, które barwy sâ, jak napisaîem, "popularne", czyli wystëpujâ na najwiëkszym obszarze grafiki czy animacji. Te barwy powinny staê w dobrych miejscach (1, 2, 4 itd.), pozostaîe na drugich w kolejnoôci. Barwy nie uûywane -- na koïcu. Wykonujâc rysunek czy animacjë w 16 kolorach, moûemy stosowaê naprawdë tylko 15 barw. Jeszcze bardziej dotyczy to trybu 256-barwnego, gdzie bardzo czësto uûywamy tylko 60, 70 procent kolorów palety. Opcje "pack colors", zaîatwiajâ të sprawë za nas. W DPaint moûna jednak przestawiê nie uûywane barwy na koniec palety i wykonaê na nich Delete. Potem oczywiôcie czeka nas Remap, które moûliwe jest równieû w wypadku animacji. Trwa tylko odpowiednio dîugo. Pod tym wzglëdem "Doggie's Inferno" jest wykonane prawie idealnie. Naprawdë ma tylko siedem barw, a ten ósmy nie uûywany kolor jest ustawiony na ostatnim miejscu. Jednak i ten ideaî daî sië trochë poprawiê. Przestawienie jasnoniebieskiego koloru tîa na wîaôciwe miejsce tîa (numer 0), spowodowaîo "pozorny overscan" i zmniejszyîo animacjë o 0,1 procent. Maîa rzecz, a cieszy. Podczas zbierania materiaîów (czyli myôli) do tego odcinka drëczyîa mnie zagadka "dobrych" i "zîych" miejsc kolorów. Naleûë do ludzi, którzy aby coô zrozumieê, muszâ to narysowaê lub napisaê. O ile pamiëtam, Stanisîaw Lem robi dokîadnie odwrotnie, wymyôla, ale "nie widzi". Stâd czësto zaskakiwany jest niemile ekranizacjâ swoich powieôci. Wyjaônianie zaczâê trzeba od podstaw. Otóû, jak wiadomo, obrazek IFF ILBM skîada sië z planów bitowych. Kaûdy plan bitowy reprezentuje format obrazka i ma "miejsca" odpowiadajâce pikselom na ekranie. Najprostszy obrazek -- dwukolorowy -- ma jeden "bitplan". Miejsce bitplanu odpowiadajâce pikselowi na ekranie moûe mieê "bit zaôwiecony" lub "zgaszony". Jest reprezentowane wtedy jedynkâ lub zerem. Oczywiôcie w ukîadzie dwójkowym. Sygnaî taki, np. jedynka, okreôla miejsce w rejestrze kolorów, czyli po ludzku, w palecie. Jedynka to numer jeden palety, a tam moûe byê czerwieï, zieleï czy cokolwiek innego. Podobnie jest z zerem. W wypadku obrazka czterokolorowego trzeba mieê dwa plany bitowe. Poniewaû kaûdy z nich moûe mieê stan zero lub jeden, moûemy to zapisaê (od prawej do lewej) jako dwucyfrowâ liczbë dwójkowâ, gdzie pierwszy bitplan reprezentuje cyfra z prawej, a drugi cyfra z lewej. Kaûdy Czytelnik Magazynu AMIGA chyba wie, ûe w ten sposób moûemy przedstawiê cztery liczby od zera do trzech. Podobnie jest przy wiëkszej liczbie kolorów. Powiëksza sië liczba bitplanów, lawinowo roônie liczba rejestrów (miejsc w palecie). Artykuî w "Amiga World" pisany byî w 1991 roku, czyli w czasach "przedagowskich". Ciekawe, jakie jeszcze miejsca w palecie sâ "dobre"? Ilustracja przedstawia schemat bitplanów dla obrazka oômiokolorowego. Bitplany sâ trzy, a zaôwiecony bit w pierwszej mapie bitowej daje nam liczbë 001, co wskazuje na miejsce numer 1 w rejestrze. To z kolei odpowiada takiemu samemu numerowi w palecie kolorów, gdzie przechowujemy kolor pomaraïczowy. Na ekranie pojawi sië w tym miejscu pomaraïczowy piksel. Tabelka "najlepszych miejsc (dla róûnej wielkoôci rejestrów) pokazuje wyraúnie, ûe liczby 1, 2, 4 itd. zapisywane sâ z uûyciem zer i jednej "jedynki". Miejsca "najlepsze w drugiej kolejnoôci" zapisywane sâ przy uûyciu dwóch jedynek i zer. Jak program kompresujâc zapisuje te liczby, nie wiem, nie jest to mojâ domenâ i wîaôciwie specjalnie mnie to nie interesuje. Cechy jednak tych liczb pozwalajâ îatwo wyprowadziê sobie nastëpne "dobre" miejsca. Pierwsza grupa jest prosta i oczywista, trudniej jest z drugâ. Autor artykuîu skoïczyî na liczbie 24. Jak widaê na obrazku, moûe to byê jeszcze 33, 34 i dalej wg tej samej zasady. Nie trzeba specjalnego algorytmu, wystarczy tîumaczyê wszystkie moûliwe kombinacje zapisu dwójkowego, zawierajâce dwie jedynki, na liczby dziesiëtne. Moûna to sprawdziê. Otworzyîem ekran 256-kolorowy w hi-res lace i narysowaîem kóîko na ôrodku ekranu, kolorem numer 255. Po zapisaniu plik miaî 15 610 bajtów. Teraz trzeba znaleúê najwyûszy numer rejestru, odpowiadajâcy korzystnemu miejscu w palecie. Najwyûszy taki numer (a maksimum to oczywiôcie 255, a nie 256) to 128. Plik ma teraz 9954 bajty, zysk 36 procent. Ûeby z kolei znaleúê najwyûszy numer "drugiej kategorii", trzeba napisaê i przetîumaczyê liczbë 11 000 000. To oczywiôcie 192. Kóîko narysowane tym kolorem daje obrazek o wielkoôci 10 762 bajtów. Zysk -- 31 procent. Pozostaje pytanie, co z innymi trybami, np. z HAM? Przeprowadziîem taki eksperyment z HAM6 i HAM8. Do doôwiadczeï wybraîem tym razem tryb lo-res z niewielkim kolorowym kóîkiem w ôrodku. Najpierw kóîko miaîo ostatni kolor w palecie, z zasady najmniej korzystny, a potem ostatni z grupy "najlepszych", jednobitowych. Dla HAM6 kolejno uzyskaîem 5256 i 4362 bajty, a dla HAM8 6876 i 5386. Jak z tego widaê, zysk jest nadal znaczny i wynosi okoîo 20 procent. Oczywiôcie kolory braîem z prawdziwych kolorów HAM, odpowiednio z palety 16 i 64 kolorów. Mam nadziejë, ûe nie zanudziîem Czytelników tymi rachunkami. Ale warto sië czasem zastanowiê, jak najlepiej uûyê narzëdzia, które mamy do dyspozycji. Przy bardzo duûych animacjach zysk z odpowiedniego zastosowania rysunków i palety kolorów moûe siëgaê 30 procent, a to oznacza setki i tysiâce bajtów. Kolejne podjëcie tematu animacji bëdzie, mam nadziejë, bardziej humanistyczne. * Gene Brawn "Anim Tamers", Amiga World, June/1991 r.