Image FX w praktyce (cz. 4.) ---------------------------- ANIMACJE ImageFX 1.5 jest programem bardzo wszechstronnym. Oprócz klasycznych moûliwoôci, oferowanych przez programy image processing, udostëpnia równieû moûliwoôê tworzenia oraz dokonywania zmian nie tylko pojedynczych obrazków, ale takûe animacji. Co prawda, w tym drugim wypadku nie jest moûe tak chëtnie stosowany przez osoby zajmujâce sië animacjâ, jak programy specjalnie do tego celu stworzone, np. AnimWorkshop czy ClariSSA, ale sam program, jak i znajdujâce sië w pakiecie dodatkowe moduîy, tworzy ôrodowisko pozwalajâce na duûo wiëcej niû mogîoby sië na pierwszy rzut oka wydawaê. Tadeusz Talar Elementy tego ôrodowiska, znajdujâce zastosowanie przy pracy z animacjami, to odpowiednie moduîy odczytujâce: ANIM i FLI (format rozpowszechniony w ôwiecie peceta) i zapisujâce: ANIM, ANIM7 (moûliwoôê szybszego odtwarzania, okupiona jednak wiëkszâ objëtoôciâ plików z animacjami) oraz FLC (równieû format pecetowy), dostëp do animacji z poziomu ARexxa przy zastosowaniu wewnëtrznych komend ImageFX-a, specjalny program sîuûâcy do przetwarzania animacji o nazwie IMP, program do generowania morphingów -- Cinemorph -- oraz bardzo dobry odtwarzacz animacji Viewtek. Dodatkowo zaîâczony jest zewnëtrzny program do konwersji plików ANIM na ANIM7 o nazwie MakeANIM7. W artykule tym chciaîbym pokazaê, jak w praktyce moûna zastosowaê powyûsze "narzëdzia", ale pozwólcie, ûe z jednym z nich obejdë sië troszkë po macoszemu. Chodzi o program Cinemorph, którego nawet pobieûny opis mógîby stanowiê temat nie jednego, lecz cyklu artykuîów. Z koniecznoôci zaprezentujë tylko jedno, nieszablonowe zresztâ, zastosowanie tego programu. ImageFX Moûliwoôci programu gîównego, dostëpne z poziomu interfejsu uûytkownika, sâ ograniczone jedynie do odczytu klatki z animacji, ewentualnej obróbki i nastëpnie zapisu jako pojedynczego obrazka lub doîâczeniu go do istniejâcej animacji. W tym celu uruchamiamy ImageFX, klikamy na gadûecie Load, wskazujemy nazwë pliku z animacjâ i klikamy na Okey. Program sam rozpozna format pliku (ANIM lub FLI) i wyôwietli pytanie o numer klatki, którâ chcemy "wyciâgnâê". Za pomocâ "suwaka" ustawiamy odpowiedni numer i klikamy na Okey. Po chwili obrazek, stanowiâcy zawartoôê podanej klatki, znajdzie sië w buforze gîównym (Main). Moûemy teraz poddaê go obróbce, wygenerowaê (Render), a nastëpnie zapisaê. W momencie zapisu zaczynajâ sië "schody". O ile przy próbie doîâczenia zmodyfikowanego obrazka do istniejâcej animacji problemu w zasadzie nie ma (naleûy tylko pamiëtaê, by ustawiê w panelu RENDER identyczne parametry obrazka jak animacji, do której chcemy go doîâczyê). Wystarczy kliknâê na Save, wybraê z listy formatów ANIM, kliknâê na Save As (nie na Save, gdyû powoduje to jedynie zapis obrazka na dysk do pliku o nazwie takiej jak plik z animacjâ, z której byî "wyciâgniëty", powiëkszonej o numer klatki), podaê nazwë animacji, do której chcemy obrazek doîâczyê, i kliknâê na Okey. Z wyôwietlonych przez program wariantów zapisu (rys. 1.), wybieramy Append i klatka zostanie "dopisana" do koïca wskazanej animacji. Znacznie gorzej jest w wypadku próby wstawienia zmodyfikowanego obrazka w miejsce, skâd zostaî "wyciâgniëty". W tym celu logiczny wydawaîby sië wybór wariantu Overwrite, ale niestety powoduje to nie nadpisanie danej klatki na klatkë istniejâcâ, lecz utworzenie nowej animacji, skîadajâcej sië tylko z zapisywanej klatki. Brak wyraúnego zaznaczenia w instrukcji obsîugi ImageFX-a 1.5 faktu, ûe w opisany wyûej sposób moûemy tylko DODAWAÊ obrazki do animacji, jest bardzo powaûnym niedociâgniëciem. ARexx W artykule poôwiëconym tematowi ARexx a ImageFX pisaîem o bogactwie wewnëtrznych funkcji ImageFX-a, które mogâ byê wkomponowywane w programy, a wîaôciwie makrodefinicje, jëzyka ARexx. Do operacji na plikach animacyjnych odnoszâ sië: LoadBuffer powodujâca wczytanie do bufora Main klatki o numerze z animacji zapisanej w pliku . oraz SaveRenderedAs zapisujâca obrazek jako klatkë do pliku . Jako moûna wpisaê nazwë jednego z uûywanego przez program formatu zapisu, tzn. ANIM, ANIM7 i FLC. W miejsce moûna wpisaê: APPEND -- powodowaê to bëdzie dopisanie klatki do istniejâcego pliku, OVERWRITE -- jeôli klatka bëdzie dopisywana do istniejâcej animacji, spowoduje utworzenie w jej miejsce nowej animacji o tej samej nazwie, KEEP -- wskazuje, ûe animacja powinna byê tworzona w pamiëci komputera, co znacznie przyspiesza proces tworzenia, ale naleûy pamiëtaê, by plik taki byî zamkniëty na koïcu poprzez komendë SaveRenderAs z parametrem CLOSE, np.: SaveRenderAs ANIM Moja_Animacja.anim CLOSE Praktyczne wykorzystanie tych funkcji pokazuje makrodefinicja, powodujâca konwersjë animacji ANIM na format FLC, przedstawiona w Listingu 1. ImageFX Multi Processor Najwaûniejszym narzëdziem pakietu ImageFX 1.5, sîuûâcym do obróbki animacji, jest IMP. Za pomocâ tego programu jednâ lub dwie serie obrazków, lub teû gotowe animacje, moûna automatycznie przetworzyê ImageFX-em, tak by w efekcie otrzymaê innâ animacjë lub serië zmodyfikowanych obrazków. Dlaczego "jednâ lub dwie"? Dlatego, ûe korzystajâc z IMP-a mamy moûliwoôê komponowania ze sobâ, opcjami zawartymi w panelu COMPOSITE ImageFX-a, obrazków i animacji z dwóch úródeî. Tak naprawdë to dochodzi do tego jeszcze opcjonalne wykorzystanie trzeciego obrazka, serii obrazków lub animacji, którâ IMP moûe wpuszczaê do bufora Alpha, dajâc nam moûliwoôê cieszenia sië wszystkimi dobrodziejstwami, zwiâzanymi z zastosowaniem Alpha Channel. Co ciekawe, jeûeli seria obrazków jest tworzona przez program typu ray-tracing (np. Imagine), to IMP moûe zaczekaê, aû dany obrazek zostanie wygenerowany, i dopiero wtedy go przetworzyê. IMP moûemy uruchomiê na dwa sposoby. Pierwszym jest klikniëcie na gadûecie HOOK w panelu TOOLBOX ImageFX-a i wybranie z wyôwietlonej listy nazwy IMP, drugim zaô jest dwukrotne klikniëcie na ikonie IMP, znajdujâcej sië w katalogu programu ImageFX. Po wykonaniu powyûszych czynnoôci zostanie wyôwietlone niepozorne okienko IMP-a (rys. 2.), które na pierwszy rzut oka nie odzwierciedla duûych moûliwoôci tego programu. Nazwy przetwarzanych serii obrazków lub animacji wpisujemy w pola obok napisów Main: i Swap:. Jeôli bëdziemy chcieli dodatkowo zastosowaê Alpha Channel, to nazwë serii obrazków lub animacji okreôlajâcej jego zawartoôê wpisujemy w pole obok Alpha:, natomiast nazwë przetworzonej serii obrazków lub animacji wpisujemy w pole obok Dest:. Gdy caîy czas uûywam pojëcia "nazwa seria obrazków", to mam na myôli gîównâ (bazowâ) czëôê nazwy plików serii obrazków. Wiëkszoôê programów, generujâcych jako efekt swego dziaîania serie obrazków, zapisuje pliki, nadajâc im nazwë skîadajâcâ sië z czëôci bazowej oraz przyrostka liczbowego, okreôlajâcego numer obrazka w serii, np. PIC001, PIC002,... itd. Deklaracja serii w IMP sprowadza sië do wprowadzenia w odpowiednie pole jedynie PIC. Program bëdzie automatycznie pobieraî poszczególne pliki, ale tylko w zakresie wpisanym odpowiednio w pola First: i Last:, tyle klatek bëdâ teû liczyê wyjôciowe serie obrazków lub animacje. O efekcie dziaîania IMP-a decyduje ustawienie gadûetu cyklicznego, znajdujâcego sië poniûej pól First: i Last:. Moûe to byê odpowiednio: tworzenie animacji (Render Animation), tworzenie obrazków o parametrach zadeklarowanych w panelu RENDER ImageFX-a (Render Output Frames) oraz tworzenie obrazków 24-bitowych (Output 24-Bit Frames). Ustawienie znacznika na gadûecie Lock Palette spowoduje, ûe palety kolorów wyjôciowej (Dest:) serii obrazków lub animacji bëdâ identyczne z tymi w pierwszym przetworzonym obrazku. W przeciwnym wypadku paleta kolorów bëdzie tworzona dla kaûdego wyjôciowego obrazka oddzielnie. Umoûliwia to np. tworzenie animacji z indywidualnymi paletami kolorów dla kaûdej klatki, które wyglâdajâ znacznie lepiej niû te z ustawionâ opcjâ LOCK PALETTE, lecz naleûy sië liczyê z faktem nieco wolniejszego ich odtwarzania, jak i z tym, ûe nie kaûdy program potrafi odczytaê takâ animacjë (np. DPaint). Gadûet Delete Source Frames decyduje o tym, czy wejôciowe obrazki po przetworzeniu majâ zostaê skasowane czy nie. Naleûy bardzo roztropnie korzystaê z tej opcji. Ustawienie znacznika na Wait for Source Frames spowoduje, wspomniane wczeôniej, oczekiwanie na pojawienie sië pliku z obrazkiem w wypadku, gdy np. nie zostaî jeszcze wygenerowany przez program ray-tracing. Jest to nieoceniona opcja dla wszystkich, lubiâcych korzystaê z multitaskingu Amigi, posiadaczy duûej iloôci pamiëci RAM i powierzchni twardych dysków. Moûna bowiem uruchomiê jednoczeônie IMP-a i np. wîâczyê generowanie animacji w LightWave, której 24-bitowe klatki bëdâ zapisywane do plików. Nastëpnie spokojnie zajâê sië innymi waûnymi domowymi obowiâzkami, a IMP bëdzie posîusznie czekaî do momentu pojawienia sië odpowiednich plików i nastëpnie przetwarzaî wedîug zadeklarowanych przez nas parametrów. Pole obok Prep: sîuûy do wprowadzania wewnëtrznej komendy (lub komend oddzielonych znakiem "; ") ImageFX-a, którâ chcemy wykonaê PRZED przetworzeniem wszystkich obrazków. Natomiast w Proc: wpisujemy komendë (lub komendy), które chcemy wykonaê NA kaûdej przetwarzanej klatce. Zanim przejdë do konkretnych przykîadów wykorzystania IMP-a, jeszcze jedna uwaga. W wypadku ustawienia gadûetu, okreôlajâcego sposób dziaîania, na Render Animation lub Render Output Frames, naleûy ustawiê parametry wyjôciowych obrazków (tryb graficzny, liczbë kolorów, ewentualnie zastosowany algorytm ditheringu) w panelu RENDER ImageFX-a. Spójrzcie na rys. 2, 3 i 4. Sâ tam przedstawione ustawienia IMP-a dla opisanych poniûej sytuacji. 1. Z posiadanej animacji Animacja_1, liczâcej 50 klatek, chcemy "wyciâgnâê" klatki od 15. do 35. i zapisaê je do 24-bitowych plików o nazwie Obr1, Obr2,... itd., przy czym w kaûdym z obrazków chcielibyômy zmieniê o 10 wartoôê koloru niebieskiego (BLUE) i poprawiê kontrast równieû o 10 jednostek. 2. Powstaîe poprzednio obrazki i animacjë, zawartâ w pliku Animacja_2, chcemy skomponowaê (komenda Merge) i skleiê w innâ animacjë -- Animacja_3. 3. Plik Animacja_3 "rozbijemy" w caîoôci na serië obrazków o nazwie bazowej "Pic" i rozmiarach 320 na 256 pikseli. Dodatkowo skomponujemy je przy uûyciu komendy MERGE z seriâ obrazków "Image" (tzn. Image001, Image002,... itd.) z wykorzystaniem pobieranej w trakcie obróbki do Alpha Channel animacji Alpha_Anim. Cinemorph -- inaczej Na zakoïczenie coô z innej beczki. Wyobraúcie sobie takâ sytuacjë: zaprojektowaliôcie piëknâ animacjë w Waszym ulubionym programie typu ray-tracing, wîâczyliôcie generowanie poszczególnych klatek i, w zaleûnoôci od stopnia skomplikowania zdefiniowanych przez Was elementów i zadeklarowanej liczby klatek, poîoûyliôcie sië spaê lub wyjechaliôcie na kilkudniowâ wycieczkë. Gdy proces tworzenia obrazków dobiegî koïca, z zadowoleniem przystâpiliôcie do "sklejenia" poszczególnych klatek w caîoôê, np. za pomocâ wspomnianego wczeôniej IMP-a. Niestety, jak sië okazaîo w trakcie, gdy Wasz komputer mozolnie generowaî, mieszkajâcy obok sâsiad wîâczyî sobie ôwieûo zakupionâ spawarkë, która spowodowaîa niesamowite zakîócenia w sieci elektrycznej. Z Waszego punktu widzenia efekt tych zjawisk byî taki, ûe kilka klatek zostaîo zapisanych bîëdnie na dysku i po prostu nie da sië ich "skleiê" z innymi. Gdy nie zaleûy Wam zbytnio na jakoôci, moûna je co prawda pominâê, lecz trzeba sië liczyê z tym, ûe gotowa animacja bëdzie dostawaê niezdrowej "czkawki" podczas odtwarzania. Co wiëc zrobiê? Czyûby zamiast twórczej budowy swej metropolii w SimCity2000, trzeba byîo z powrotem uruchamiaê ray-tracer i znów pozostawiê Amigë na dîugie godziny, by wygenerowaîa brakujâce klatki? Otóû nie, moûna zaradziê tej sytuacji, stosujâc oczywiôcie ImageFX, znacznie skracajâc czas potrzebny do stworzenia brakujâcych klatek. Wîaôciwie to z pomocâ poôpieszy nie sam ImageFX, ale inny, równie znany, element pakietu, czyli program Cinemorph. Przypuôêmy, ûe ray-tracer zapisywaî poszczególne klatki w trybie HAM8 do plików o nazwie PIC, czyli PIC001, PIC002,... itd., a uszkodzeniu ulegî plik PIC057. Wîaôciwy algorytm wyjôcia z tej kîopotliwej sytuacji wyglâda nastëpujâco. Uruchamiamy Cinemorph, w menu SETTINGS ustawiamy pozycjë Mode na Dual Image. Klikamy na oknie Source i w menu CELL wybieramy Load Image. Przy uûyciu wyôwietlonego requestera wczytujemy obrazek zawarty w pliku PIC056. Nastëpnie klikamy na oknie Dest i znowu w menu CELL wybieramy Load Image, tym razem jednak wczytujemy z dysku klatkë nastëpnâ po brakujâcej, czyli w naszym wypadku plik PIC058. Po raz ostatni zaglâdamy do menu CELL i po wybraniu Set Frames ustawiamy liczbë klatek na 3. Teraz zaglâdamy do menu RENDER i ustawiamy taki tryb graficzny, w jakim byîy generowane klatki, tzn. HAM8. Po wykonaniu powyûszych czynnoôci jesteômy gotowi do utworzenia brakujâcej klatki. W tym celu w menu MORPH wybieramy Generate Single. Program wyôwietli requester i poprosi o podanie katalogu i nazwy pliku, w którym zostanie zapisana, wygenerowana, brakujâca klatka. Wskaûmy wiëc katalog zawierajâcy pliki z "dobrymi" klatkami animacji, jako nazwë zaô wpiszmy PIC057 i kliknijmy na OK. W tym momencie ukaûe sië okienko Generate Frame..., w którym naleûy okreôliê, jakâ klatkë chcemy generowaê. Za pomocâ "suwaka" ustawmy Frame Number na 2 i kliknijmy na OK. Cinemorph na podstawie wczytanych klatek utworzy brakujâcy obrazek i zapisze go na dysku. No dobrze, powiecie, ale przecieû powstaîy obrazek stanowi jakby poîâczenie wczytanych klatek i nie za bardzo przypomina wyglâd oryginalnego, lecz niestety uszkodzonego, obrazka (rys. 4.). Tak, macie racjë, lecz pamiëtajcie, ûe spoglâdacie na niego jako na obrazek statyczny. Spróbujcie jednak teraz "skleiê" wszystkie klatki w animacjë (choêby za pomocâ IMP-a, jak to opisaîem wczeôniej), a nastëpnie odtwórzcie jâ z szybkoôciâ 25 klatek na sekundë, aby przekonaê sië, ûe efekt naszego "îatania" jest prawie niewidoczny, a juû na pewno duûo lepszy niû odtwarzanie animacji z brakujâcymi klatkami. W zaprezentowany sposób moûemy usuwaê wiëksze braki, np. próbowaê wygenerowaê dwie klatki pod rzâd (oczywiôcie w tym wypadku trzeba by zwiëkszyê liczbë klatek ustawianych w opcji SET FRAMES do 4 i wygenerowaê kolejno klatki 2. i 3.), ale nie naleûy przesadzaê, Cinemorph to nie ray-tracer i w wypadku duûej liczby "dorabianych" obrazków mogâ powstaê niepoûâdane efekty. Ponadto warto pamiëtaê, ûe im szybciej animacja bëdzie odtwarzana, tym efekt "îatania" bëdzie mniej widoczny. Myôlë, ûe po przeczytaniu tego artykuîu i dokonaniu kilku wîasnych eksperymentów przekonacie sië, ûe równieû na temat animacji ImageFX ma bardzo duûo do powiedzenia.