ImageFX nie taki straszny (cz. 1.) ---------------------------------- ALPHA CHANNEL Moûliwoôci graficzne komputera Amiga od samego poczâtku jego powstania predestynowaîy ten komputer do tworzenia grafiki. Sam sprzët jednak to zbyt maîo. Tym, co naprawdë decyduje o charakterze wykonywanej pracy, jest oprogramowanie, jeôli mowa o grafice, graficzne. Tadeusz Talar Znane sâ Wam zapewne przycinki klonowo-niebieskich braci na temat jakoôci oprogramowania dla Amigi. Wszystko u nich jest takie "profesjonalne" (czyt. trudne do opanowania i uûycia albo przynajmniej wymagajâce jakiejô superkonfiguracji sprzëtowej do w miarë poprawnej pracy), a u nas "rozrywkowe" lub najwyûej "trochë lepsze niû amatorskie". O ile w pewnych kategoriach oprogramowania (zwîaszcza programy obsîugi baz danych, arkusze kalkulacyjne) rzeczywiôcie przepaôê pomiëdzy klonami a Amigâ jest doôê duûa, to czego jak czego, ale oprogramowania graficznego nie musimy sië wstydziê. Przykîadem prawdziwego kombajnu graficznego, który moûe zaspokoiê potrzeby nawet najbardziej wybrednego komputerowego artysty, jest pakiet ImageFX amerykaïskiej firmy Nova Design, dystrybuowany przez firmë GVP. Program ten jest ôwietnym narzëdziem w takich dziedzinach jak DTP, DTV (Desktop Video), jak i wszëdzie tam, gdzie chcemy tworzyê i modyfikowaê jakiekolwiek dane graficzne (obrazki, brushe, animacje). Naleûy on do grupy aplikacji graficznych o wspólnej nazwie image processing, czyli programów sîuûâcych do przetwarzania (w tym tworzenia) obrazków bitmapowych poprzez moûliwoôê zmiany ich parametrów (np. wymiaru, liczby kolorów, kontrastu, nasycenia barw), zastosowania róûnego rodzaju efektów i filtrów (np. wyostrzanie, negatyw, relief), moûliwoôê wkomponowania czëôci jednego obrazka w drugi (na wiele sposobów). Dodatkowo programy tego typu potrafiâ operowaê na plikach, zapisanych w róûnych formatach graficznych, stâd za ich pomocâ îatwo jest zamieniê format pliku, w jakim zapisany jest obrazek, na inny. ImageFX jest ponadto bogatszy o moûliwoôê tworzenia obrazków "od poczâtku" (w tym wypadku zamienia sië on w 24-bitowy program malarski), pobierania danych nie tylko z plików, ale i bezpoôrednio ze skanera i frame grabbera, kreowania morphingów (za pomocâ zaîâczonego w pakiecie moduîu CineMorph) oraz obróbki (w tym generowania) animacji i sekwencji obrazków za pomocâ innego, znajdujâcego sië w pakiecie, moduîu -- programu IMP (ImageFX Multi Processor). W tym artykule wolaîbym jednak nie pisaê o samym programie, ale na jego przykîadzie przybliûyê praktyczne wykorzystanie jednego z podstawowych elementów, znajdujâcych sië w profesjonalnych programach image processing, czyli Alpha Channel. Kaûdy program graficzny przechowuje obrabiane obrazki w pamiëci RAM (czasami program potrafi wykorzystaê równieû pewien obszar dysku, czyli korzysta z tzw. pamiëci wirtualnej, tak jest w wypadku ImageFX). Obszar, w którym przechowywany jest obrazek, nazywamy buforem. Programy image processing rezerwujâ z reguîy kilka buforów. Najwaûniejszy z nich jest ten, na którym wykonywane sâ wszelkie operacje oferowane przez program, czyli bufor gîówny (ang. Main). Kolejnym jest jeden lub kilka buforów pomocniczych (ang. Swap). Sîuûâ one do czasowego przechowania obrazków lub teû dane zawarte w tych buforach mogâ byê komponowane (na róûne sposoby) z obrazkiem znajdujâcym sië w buforze gîównym. Dodatkowe efekty kompozycji moûna osiâgnâê wtedy, gdy podczas tej operacji bëdziemy wykorzystywaê obrazek, stanowiâcy zawartoôê kolejnego bufora, czyli Alpha Channel. Jak to wyglâda w praktyce, o tym za chwilë. Dla porzâdku dodam, iû w zaleûnoôci od programu, rezerwowanych jest jeszcze kilka innych buforów, spoôród których najlepiej pamiëtaê o istnieniu bufora Undo, przechowujâcego dane zawarte w buforze gîównym sprzed wykonania ostatniej (lub kilku ostatnich) operacji. Pozwala to na odtworzenie zawartoôci bufora gîównego w wypadku niepoûâdanego wyniku dziaîania tej operacji. Nawiasem mówiâc, fakt istnienia takiej liczby buforów sprawia, ûe programy image processing sâ tak pamiëcioûerne. Wróêmy jednak do gîównego bohatera tego artykuîu, czyli Alpha Channel w programie ImageFX. Aplikacja ta wykorzystuje 8-bitowy monochromatyczny Alpha Channel, tzn. mogâcy zawieraê obrazek w maksymalnie 256 odcieniach szaroôci. W wypadku gdy wczytamy tam obrazek kolorowy, program automatycznie przetworzy go na monochromatyczny odpowiednik poprzez odwzorowanie wartoôci tylko koloru czerwonego R kaûdego piksela. W momencie gdy wîâczymy opcjë wykorzystania zawartoôci bufora Alpha (standardowo po uruchomieniu opcja ta jest wyîâczona), dane w nim zawarte bëdâ miaîy dodatkowy wpîyw na operacje wykonywane na obrazku znajdujâcym sië w buforze gîównym (Main), tak przy korzystaniu ze standardowych funkcji malarskich udostëpnianych przez ImageFX, jak i opcji kompozycji obrazka, znajdujâcego sië w buforze pomocniczym (Swap), z obrazkiem w buforze Main. Znuûeni tym przydîugim teoretycznym wstëpem moûecie pytaê: ale wîaôciwie do czego moûe sië przydaê ten Alfa Channel? Program oferuje dwa sposoby wykorzystania zawartoôci bufora Alpha, tzn. Use As Texture i Use As Frisket, poza tym zawartoôê bufora Alpha jest uûywana w efektach Distort i Wave Distort. Posîuûë sië wiëc kilkoma przykîadami, które, mam nadziejë, bëdâ mówiê same za siebie. By jednak ustrzec Was przed odwiecznym problemem braku pamiëci (oczywiôcie nie Waszej, ale komputera) oraz by przyspieszyê czas wykonywania operacji, polecam dokonywanie eksperymentów na obrazkach w trybie lo-res (320 x 256). Tworzymy Alpha Channel Uruchamiamy program ImageFX. Po ukazaniu sië gîównego panelu programu (patrz rys. 1.) upewnijmy sië, ûe aktualnie jego zawartoôê stanowi sekcja Toolbox (wciôniëty jest duûy gadûet z tym napisem). Na poczâtku spróbujmy utworzyê Alpha Channel. Potrzebny nam bëdzie obrazek (w naszym wypadku lo-res), najlepiej skîadajâcy sië z duûego jasnoszarego napisu na nieco ciemniejszym tle. Oczywiôcie moûecie operowaê obrazkiem bardziej kolorowym, pamiëtajcie jednak, ûe po umieszczeniu go w buforze Alpha, ImageFX automatycznie zamieni go na odpowiadajâce poszczególnym kolorom poziomy szaroôci. Obrazek ten moûna utworzyê za pomocâ dowolnego programu malarskiego, np. DPaint, a nastëpnie wczytaê go opcjâ Load do ImageFXa, lub teû skorzystaê z wbudowanych funkcji malarskich. W tym drugim wypadku, bezpoôrednio po uruchomieniu programu musimy najpierw utworzyê bufor gîówny (Main) o rozmiarach lo-res, poprzez klikniëcie na gadûecie Buffer w panelu Toolbox, nastëpnie na Create Buffer..., wpisaê w pola Width i Height odpowiednio 320 i 256 (ewentualnie skorzystaê z gadûetu Size Presets... i wybraê tryb PAL:lo-res) i kliknâê na Okay. Pozornie nic sië na ekranie nie zmieniîo, a to dlatego, ûe bufor ma kolor czarny (gdy bufora nie ma, ekran teû jest czarny, ale spróbujcie coô sobie wtedy narysowaê). Poniewaû kolor tîa nam nie odpowiada, klikamy teraz na dziewiâtym od lewej kolorze w palecie (powinien to byê kolor ciemnoszary) i wciskamy klawisz [k], który wyczyôci bufor gîówny, wypeîniajâc go jednoczeônie wybranym kolorem. Nastëpnie kliknijmy na kolorze na prawo od wybranego (kolor jasnoszary), okreôlajâc w ten sposób kolor napisu, jaki chcemy utworzyê. Klikamy na ikonce opisanej literami ABC, znajdujâcej sië wôród przyborów malarskich, oferowanych przez ImageFX, wpisujemy treôê napisu, wybieramy czcionkë i klikamy na Okay. Program wygeneruje napis w postaci brusha, jeûeli jego postaê Wam odpowiada, to kliknijcie na Cancel, by powróciê do gîównego panela sekcji Toolbox. Teraz ustawcie kursor, do którego jest "przyczepiony" brush, mniej wiëcej na ôrodku obszaru bufora gîównego, i kliknijcie lewym przyciskiem myszy by "odbiê" tam brush. Jeûeli gîówny panel programu przeszkadza w prawidîowym umiejscowieniu napisu, to warto wiedzieê, ûe usuwa sië go i przywraca poprzez klikniëcie PRAWYM przyciskiem myszy. Nasz obrazek jest gotowy. Zanim jednak przejdziemy do dalszej czëôci przykîadu, usuïmy z pamiëci nie potrzebny nam juû brush poprzez wciôniëcie klawisza [.] (kropka). Ostatniâ czynnoôciâ jest umieszczenie stworzonego obrazka w buforze Alpha. By to zrobiê, naleûy kliknâê w panelu sekcji Toolbox, na gadûecie Alpha, a nastëpnie na Copy to Alpha (patrz rys. 2.). Znowu na pierwszy rzut oka nic sië nie zmieniîo, a to dlatego ûe ImageFX wyôwietla tylko zawartoôê bufora gîównego (Main), ale obecnoôê bufora Alpha jest sygnalizowana poprzez pojawienie sië biaîej litery A na czarnym tle powyûej duûego gadûetu Scanner (w tym miejscu ImageFX sygnalizuje równieû inne rzeczy, ale o tym póúniej). Podany przeze mnie sposób utworzenia Alpha Channel jest jednym z wielu, jakie udostëpnia program, wystarczy poeksperymentowaê z opcjami panelu pojawiajâcego sië po klikniëciu na gadûecie Alpha (zwîaszcza na opcji Create), by przekonaê sië o duûej elastycznoôci ImageFXa. Kolejne przykîady pokaûâ, jak moûe byê interpretowana zawartoôê bufora Alpha. Co prawda ImageFX moûe korzystaê z zawartoôci tego bufora na wiele róûnych sposobów, ja wybraîem ten najbardziej wedîug mnie reprezentatywny, a mianowicie uûycie Alpha Channel podczas operacji kompozycji (Composite), a dokîadniej jej odmiany Merge, czyli doîâczania (np. dodawania efektu tekstury, przenikania /transparency/ oraz maskowania) obrazka znajdujâcego sië w buforze pomocniczym (Swap) do obrazka w buforze gîównym (Main). Wczytajmy wiëc obrazek do bufora Swap. By to zrobiê, skorzystajmy z opcji Load w panelu gîównym programu. Obrazek znajdzie sië w buforze Main (co zresztâ widaê). Teraz wystarczy wcisnâê klawisz [j], by obrazek ten znalazî sië w buforze Swap, zniknie on, co prawda, z ekranu, ale jego obecnoôê potwierdzi litera S, wyôwietlona powyûej gadûetu Scanner (patrz rys. 1.). Mimo ûe w poniûszych przykîadach do bufora Swap wprowadzaîem zeskalowane do wymiaru lo-res tîo z programu Scala, ale oczywiôcie zamiast wczytywaê obrazek z dysku, moûecie utworzyê go za pomocâ przyborów malarskich ImageFXa, a nastëpnie wcisnâê klawisz [j]. Do rozpoczëcia wîaôciwych eksperymentów z Alpha Channel pozostaîo jeszcze okreôlenie obrazka w buforze gîównym (Main). Moûna go tam wczytaê z dysku (tak jak zrobiîem to ja, no cóû z takâ dziewczynâ warto poeksperymentowaê) albo narysowaê. Przystâpmy teraz do operacji komponowania obrazka w buforze Swap z obrazkiem w buforze Main poprzez Alpha Channel. W panelu sekcji Toolbox kliknijmy na gadûecie Composite. Na pojawiajâcym sië panelu (rys. 3.) zauwaûymy, ûe standardowo Alpha Channel nie jest uwzglëdniany podczas operacji kompozycji (pozycja Alpha: Off), klikajâc na tym gadûecie moûemy wîâczyê interpretacjë zawartoôci bufora Alpha na dwa sposoby: Use As Texture i Use As Frisket. Efekt kaûdego z ustawieï przeôledúmy na przykîadzie opcji Merge. Use As Texture Zmieïmy stan gadûetu w pozycji Alpha: na Use As Texture, nastëpnie kliknijmy na Merge, teraz ustawmy suwak proporcji îâczenia buforów Main:Swap, powiedzmy, na 50% (co oznacza taki sam wpîyw obydwu obrazków na wynik poîâczenia) i kliknijmy na Okey. Program dokona niezbëdnych operacji, m.in. skopiuje zawartoôê bufora Main do bufora Undo i wynik umieôci w buforze Main. Poniewaû to, co obserwujemy na ekranie, jest tylko roboczâ wersjâ (preview) zawartoôci 24-bitowego bufora Main, kliknijmy na duûym gadûecie Render, pokazujâcym panel z opcjami sîuûâcymi do wygenerowania wîaôciwej wersji obrazka i po okreôleniu parametrów (liczba kolorów, wymiar, ew. dithering) wygenerujmy obrazek. Kliknijmy lewym klawiszem myszy, by zakoïczyê oglâdanie obrazka, nastëpnie z powrotem na gadûecie Toolbox i Undo. Spowoduje to przywrócenie bufora Main do stanu sprzed wykonania operacji kompozycji. Teraz spróbujcie powtórzyê wszystkie operacje, zmieniajâc poîoûenie suwaka okreôlajâcego wpîyw obrazków Main:Swap na wynik operacji Composite-Merge. Wynik moich eksperymentów (z nieco zmienionym obrazkiem w buforze Alpha) przedstawia rys. 4. W poîoûeniu Alpha: Use As Texture jaskrawoôê (V) kaûdego piksela w obrazku powstaîym w wyniku operacji Merge odpowiada jaskrawoôci odpowiedniego piksela w obrazku znajdujâcym sië w Alpha Channel. Im ciemniejszy piksel w Alpha Channel, tym ciemniejszy bëdzie piksel w obrazku bëdâcym produktem operacji Composite-Merge, i vice versa. Use As Frisket Nieco inny wpîyw bufora Alpha moûna zaobserwowaê po zmianie pola Alpha: na Use As Frisket. Uzyskany tâ drogâ efekt przydaje sië bardzo do tworzenia efektu polegajâcego na îagodnym przejôciu jednego obrazka w drugi. By zobaczyê to w praktyce, wystarczy uczyniê zawartoôciâ bufora Alpha obrazek zawierajâcy przejôcie kolorów (gradient) od czarnego do biaîego, np. z lewej do prawej strony obrazka. Przypominam, ûe moûecie taki obrazek narysowaê w ImageFX lub stworzyê go przy uûyciu innego, byê moûe bardziej dla Was wygodnego, programu malarskiego, a nastëpnie wczytaê go do ImageFXa. W moim przykîadzie zawartoôê buforów Swap i Main stanowiâ takie same obrazki, jak w poprzednim przykîadzie, natomiast w buforze Alpha umieôciîem nieco zmodyfikowanâ wersjë poprzedniego obrazka z napisem, wzbogaconâ o tîo skîadajâce sië z czarno-biaîego gradientu. Wybierzmy gadûet Composite w panelu sekcji Toolbox i zmieïmy ustawienie pola Alpha: na Use As Frisket. Nastëpnie wybierzmy opcjë Merge i popróbujmy róûnych ustawieï suwaka proporcji îâczenia buforów Main:Swap. Wyniki moich eksperymentów przedstawia rys. 5. Jak moûecie zaobserwowaê, im jaôniejszy bëdzie piksel w buforze Alpha, tym mocniej bëdzie zastëpowany odpowiedni piksel w buforze Main przez piksel z bufora Swap i odwrotnie, im ciemniejszy piksel w Alpha, tym sîabiej bëdzie wpîywaî piksel z bufora Swap na Main. Oczywiôcie naleûy braê pod uwagë ustawienie suwaka proporcji îâczenia buforów Main:Swap w opcji Merge. Peîny efekt (bez dodatkowego przenikania) moûna uzyskaê poprzez ustawienie wartoôci na 100%. Efekty z uûyciem Alpha Channel ImageFX wykorzystuje Alpha Channel równieû podczas wykonywania efektów Distort i Wave Distort, dostëpnych po klikniëciu na gadûecie Effect w panelu sekcji Toolbox. Produktem dziaîania tych efektów jest obrazek zawierajâcy jakby szklanâ, przezroczystâ teksturë, deformujâcâ obrazek, który znajduje sië w buforze Main. Wyglâd tej tekstury definiuje zawartoôê umieszczonego w buforze Alpha obrazka (Distort) lub program automatycznie tworzy Alpha Channel za pomocâ wewnëtrznego generatora efektu fali na podstawie podanych przez nas parametrów (Wave Distort). Moûna w ten sposób uzyskaê efekt znany z filmu "Predator" (przezroczysta postaê), lub teû inny sîynny efekt "fali po spadajâcej kropli wody". Do bufora Alpha wczytajmy wiëc obrazek z nieco poteksturowanym napisem (w moim wypadku jest to ten sam obrazek co w I przykîadzie, tylko ûe napis ma ciapki w róûnych odcieniach szaroôci, by byîo wiëcej deformacji /refleksów/). Obrazek w buforze Main jest ten sam co w poprzednich przykîadach. Kliknijmy na gadûecie Effect i z pojawiajâcego sië panela (patrz rys. 6.) wybierzmy opcjë Distort. Nastëpnie naleûy okreôliê poziom intensywnoôci efektu i kliknâê na Okey. Wynik moich prób dla róûnych intensywnoôci efektu przedstawia rys. 7. W podobny sposób dziaîa efekt Wave Distort, z tym ûe w tym wypadku program bëdzie go generowaî w oparciu o Alpha Channel utworzony przez wewnëtrzny generator efektu fali, na podstawie podanych przez nas parametrów. Alpha Channel w animacjach Szczególnie efektowne wyniki moûemy uzyskaê poprzez wîâczenie Alpha Channel podczas tworzenia lub obrabiania animacji. Moûemy uzyskaê np. animacje skîadajâce sië z îagodnych przejôê pomiëdzy poszczególnymi obrazami, kreowaê "szklane" napisy przemieszczajâce sië po ruchomych tîach itp. Kombinacji jest wiele, byleby tylko wystarczyîo RAM-u. Do obróbki animacji najlepiej wykorzystaê dostarczany wraz z programem ImageFX moduî IMP (ImageFX Multi Processor). Co prawda dokîadniejszy opis posîugiwania sië tym programem nie za bardzo mieôciîby sië w konwencji tego artykuîu (po za tym, w razie czego jest instrukcja obsîugi ImageFXa, dokîadnie traktujâca o tym temacie), lecz podam tylko przykîady jego wykorzystania przy operacjach z Alpha Channel. IMP operuje na animacjach lub sekwencjach plików z obrazkami (nazwa pliku z takiej sekwencji skîada sië najczëôciej z nazwy bazowej oraz numeru w sekwencji, np. produktem programu Imagine czy LightWave sâ pliki nazwa%%%, gdzie %%% oznacza numer tj. 001,002,...). Efektem dziaîania tego programu moûe byê animacja lub sekwencja obrazków, z tym ûe moûna równieû sklejaê sekwencje obrazków w animacje, jak i zapisywaê animacje w sekwencje plików. W swych operacjach IMP moûe korzystaê ze wszystkich funkcji ImageFXa, wpisywanych jako komendy w polach Prep i Proc, jak i korzystaê z filtrów okreôlajâcych format zapisywanych lub odczytywanych plików graficznych. Naleûy pamiëtaê, ûe po uruchomieniu IMP naleûy okreôliê parametry, wedîug których generowane bëdâ klatki animacji. By to zrobiê, trzeba wysunâê okno ImageFXa, znajdujâce sië pod oknem IMP-a, kliknâê na duûym gadûecie Render i ustawiê wymiar i liczbë kolorów klatki animacji (ew. wîâczyê dithering). Nastëpnie wysunâê z powrotem okno IMP-a. W pola Main, Swap i Alpha (patrz rys. 8.) pobieramy za pomocâ odpowiednich gadûetów Pick nazwy animacji lub sekwencji obrazków, majâcych stanowiê zawartoôê poszczególnych buforów (w wypadku sekwencji wprowadzamy tylko czëôê bazowâ, program bëdzie automatycznie pobieraî pliki). W polu Dest wpisujemy ôcieûkë dostëpu i nazwë pliku, do jakiego chcemy zapisaê animacjë wyjôciowâ. Pola First i Last powinny zawieraê odpowiednio 1 i numer ostatniej klatki animacji/sekwencji obrazków, wprowadzonej w polu Main. W wypadku kompozycji Swap z Main, by uaktywniê Alpha Channel (program uûywa opcji Alpha:Use As Frisket), naleûy wpisaê w pole Proc, np.: merge 100 alpha gdzie 100 oznacza proporcjë îâczenia buforów Main:Swap. W wypadku zastosowania efektu Distort nie potrzeba okreôlaê animacji Swap, a w polu Proc naleûy wpisaê np. distort 150 gdzie parametr 150 oznacza wartoôê intensywnoôci efektu. Po wpisaniu wszystkich parametrów klikamy na Begin. ImageFX nie jest jedynym programem, który wykorzystuje Alpha Channel, równieû jego gîówny konkurent, ADPro, daje të moûliwoôê komponowania obrazków. Nie jest to jednak tematem naszych rozwaûaï. Mam nadziejë, ûe artykuîem tym przybliûyîem nieco zastosowanie Alpha Channel, resztë pozostawiam Waszym eksperymentom, ze swej strony zaô ûyczë jak najlepszych "miëkkich przejôê" i "szklanych tekstur".