Podstawy modułów cieniujących Pixel Bender

Flash Player 10 i nowsze wersje, Adobe AIR 1.5 i nowsze wersje

Adobe Pixel Bender jest językiem programowania, który służy do tworzenia treści obrazu lub do manipulowania nią. Za pomocą modułu Pixel Bender tworzone jest jądro określane również mianem modułu cieniującego. Moduł cieniujący definiuje pojedynczą funkcję, która jest wykonywana osobno dla każdego piksela na obrazie. Wynik każdego wywołania funkcji to kolor wyjściowy we współrzędnych pikselowych obrazu. W celu dostosowywania tej operacji można określać obrazy wejściowe i wartości parametrów. Przy jednorazowym uruchomieniu modułu cieniującego wartości wejściowe i wartości parametrów pozostają niezmienione. Zmieniają się tylko współrzędne piksela, którego kolor jest wynikiem wywołania funkcji.

Jeśli jest to możliwe, funkcja modułu cieniującego jest wywoływana jednocześnie dla wielu współrzędnych pikseli wyjściowych. To poprawia wydajność modułu cieniującego i może zapewniać przetwarzanie z wysoką wydajnością.

W języku ActionScript można za pomocą modułu cieniującego w prosty sposób uzyskiwać trzy typy efektów:

  • rysowanie wypełnień

  • tryb mieszania

  • filtr

Moduł cieniujący może być również uruchamiany w trybie autonomicznym. W przypadku zastosowania trybu autonomicznego wynik działania modułu cieniującego jest oceniany bezpośrednio, a nie na podstawie wstępnie określanego przeznaczenia. Wynik można ocenić jako dane obrazu lub jako dane binarne albo liczbowe. Dane nie muszą być danymi obrazu. W ten sposób można przekazać modułowi cieniującemu zestaw danych w postaci danych wejściowych. Moduł cieniujący przetwarza dane i wówczas możliwa jest ocena danych wynikowych zwróconych przez moduł cieniujący.

Od wersji programu Flash Player 10 i środowiska Adobe AIR 1.5 jest obsługiwana wtyczka Pixel Bender. Tryby mieszania, filtry i wypełnienia wtyczki Pixel Bender nie są obsługiwane w przypadku renderowania przy użyciu GPU. Na urządzeniach przenośnych moduły cieniujące Pixel Bender są uruchamiane w przypadku renderowania przy użyciu procesora. Ich wydajność jest jednak niższa niż na komputerach stacjonarnych. Często programy cieniujące są wykonywane z szybkością tylko kilku klatek na sekundę.

Ważne pojęcia i terminy

Poniższa lista zawiera ważne terminy, jakie można napotkać w kontekście tworzenia i używania modułów cieniujących Pixel Bender:

Jądro
W przypadku modułu Pixel Bender jądro jest równoważne modułowi cieniującemu. Jeśli używana jest wtyczka Pixel Bender, kod definiuje jądro, które definiuje pojedynczą funkcję wykonywaną osobno dla każdego piksela na obrazie.

Kod bajtowy modułu Pixel Bender
Po kompilacji jądro modułu Pixel Bender jest przekształcane na kod bajtowy Pixel Bender. Kod bajtowy jest odczytywany i wykonywany w czasie wykonywania aplikacji.

Język Pixel Bender
Język programowania służący do tworzenia jądra Pixel Bender.

Pakiet Pixel Bender Toolkit
Aplikacja używana do tworzenia pliku kodu bajtowego Pixel Bender z kodu źródłowego Pixel Bender. Pakiet umożliwia pisanie, testowanie i kompilowanie kodu źródłowego wtyczki Pixel Bender.

Shader
Na potrzeby niniejszego dokumentu moduł cieniujący stanowi zestaw funkcji napisanych w języku Pixel Bender. Kod modułu cieniującego tworzy efekt wizualny lub wykonuje obliczenie. W każdym z tych przypadków moduł cieniujący zwraca zestaw danych (zwykle piksele na obrazie). Moduł cieniujący wykonuje tę samą operację na każdym punkcie danych, a jedyną różnicą stanowią współrzędne piksela wyjściowego. Moduł cieniujący nie jest napisany w języku ActionScript. Jest napisany w języku Pixel Bender i skompilowany na kod bajtowy Pixel Bender. Może zostać osadzony w pliku SWF w czasie kompilowania oraz załadowany jako plik zewnętrzny w czasie wykonywania. W każdym z tych przypadków dostęp do niego w kodzie ActionScript jest uzyskiwany poprzez utworzenie obiektu Shader oraz połączenie obiektu z kodem bajtowym modułu cieniującego.

Dane wejściowe modułu cieniującego
Złożone dane wejściowe, zwykle dane obrazu bitmapy, które są udostępniane modułowi cieniującemu, który wykorzystuje je w obliczeniach. Dla każdej zmiennej wejściowej zdefiniowanej w module cieniującym używana jest pojedyncza wartość (pojedynczy obraz lub zestaw danych binarnych) dla całego wykonania modułu cieniującego.

Parametr modułu cieniującego
Pojedyncza wartość (lub ograniczony zestaw wartości), która jest udostępniana modułowi cieniującemu i wykorzystywana w jego obliczeniach. Każda wartość parametru jest definiowana dla pojedynczego wykonania modułu cieniującego i ta sama wartość jest używana w całym wykonaniu modułu cieniującego.

Korzystanie z przykładów kodu

Możliwe jest przetestowanie przykładowych listingów kodu zamieszczonych w podręczniku. Testowanie polega na uruchomieniu kodu i obserwacji wyników w utworzonym pliku SWF. We wszystkich przykładach tworzona jest treść wykorzystująca interfejs API rysowania, który korzysta z modułu cieniującego lub jest przez niego modyfikowany.

Większość przykładowych fragmentów kodu zawiera dwie części. Jedną część stanowi kod źródłowy Pixel Bender dla modułu cieniującego używanego w przykładzie. Najpierw należy użyć pakietu Pixel Bender Toolkit w celu skompilowania kodu źródłowego na plik kodu bajtowego Pixel Bender. Wykonaj poniższe czynności w celu utworzenia pliku kodu bajtowego Pixel Bender:

  1. Otwórz pakiet Adobe Pixel Bender Toolkit. W razie konieczności w menu Build (Tworzenie) wybierz opcję „Turn on Flash Player warnings and errors” (Włącz komunikaty ostrzegawcze i komunikaty o błędach w programie Flash Player).

  2. Skopiuj fragment kodu Pixel Bender i wklej go do panelu edytora kodu w pakiecie Pixel Bender Toolkit.

  3. Z menu File (Plik) wybierz opcję „Export kernel filter for Flash Player” (Eksport filtru jądra dla programu Flash Player).

  4. Zapisz plik kodu bajtowego Pixel Bender w tym samym dokumencie, w którym znajduje się dokument Flash. Nazwa pliku powinna być zgodna z nazwą określoną w opisie przykładu.

Część ActionScript każdego przykładu jest napisana jako plik klasy. Aby przetestować przykład w programie Flash Professional:

  1. Utwórz pusty dokument programu Flash i zapisz na dysku komputera.

  2. Utwórz nowy plik ActionScript i zapisz go w tym samym katalogu, co dokument Flash. Nazwa pliku powinna być zgodna z nazwą klasy w listingu kodu. Na przykład: jeśli listing kodu definiuje klasę o nazwie MyApplication, plik ActionScript należy zapisać pod nazwą MyApplication.as.

  3. Skopiuj listing kodu do pliku ActionScript i zapisz plik.

  4. W dokumencie Flash kliknij puste miejsce na stole montażowym lub w obszarze roboczym, aby uaktywnić Inspektora właściwości dokumentu.

  5. W Inspektorze właściwości w polu Klasa dokumentu wprowadź nazwę klasy ActionScript skopiowanej z tekstu.

  6. Uruchom program za pomocą polecenia Sterowanie > Testuj film.

    Wyniki uruchomienia przykładu będą widoczne w oknie podglądu.

Te techniki testowania przykładowego kodu omówiono bardziej szczegółowo w sekcji Korzystanie z przykładów kodu ActionScript .