Studiu - dev, arhiva blog, adobe pixel bender

Adobe Pixel Bender. Un nou nivel în procesarea imaginilor pentru bliț

Programul pentru Pixel Bender este salvat ca un fișier cu extensia "pbk", apoi aceste fișiere pot fi descărcate direct în Adobe Photoshop CS sau Adobe After Effects CS. Alternativ, puteți compila programul de kernel într-un fișier "pbj", care poate fi încărcat și executat de timpul de funcționare flashplayer. Iată un punct important: dacă vom crea o aplicație de executare în mediul Flashplayer, atunci nu toate funcționalitățile limbajului Kernel Pixel Bender vor fi disponibile pentru noi. De asemenea, nu va exista niciun suport pentru limba Limba grafică (o listă detaliată a acestor restricții poate fi găsită și în ajutorul Toolkitului Pixel Bender). Acum voi aduce piesa de lucru a programului la Pixel Bender Kernel. Poți obține acest stoc în orice moment dacă selectezi elementul de meniu "Fișier -> Kernel nou":






Utilizarea unor astfel de tipuri de date vectoriale este foarte convenabilă, deoarece toate operațiile aritmetice sunt "supraîncărcate" și sunt capabile să se înmulțească, să împartă și să adauge vectori unul la celălalt. Aici merită menționat operațiunea swizzling. Esența swizzlingului este aceea că dintr-un vector, de exemplu, din patru elemente, dorim să luăm doar trei, de exemplu, primul, al treilea și al patrulea element. Și apoi putem construi o nouă variabilă a dimensiunii 3, iar elementele ele însele pot fi rearanjate, de exemplu:

Aici se spune că variabila "dst" (rezultatul calculului shaderului) este obținută ca urmare a apelarea probei funcțieiNearest. Ce face funcția sampleNearest? S-ar putea spune că funcția sampleNearest ia pur și simplu un pixel din imagine (primul argument) în coordonatele date, dar acest lucru nu este chiar adevărat. În grafica pe calculator, există un astfel de lucru ca o prelevare de probe, sau eșantionarea și calcularea valorii bazată pe lista eșantionului (deși prelevarea probelor termenul se aplică în alte zone). Să presupunem că avem sarcina „trage“ textura dată inițial în forma imaginii de referință (o dimensiune de 200 cu 200 pixeli) pe suprafața mai mare sau mai mică. Aici, nu putem uni în mod unic fiecare pixel de ieșire cu un singur pixel de intrare (pixeli pot fi triviali lipsiți). Prin urmare, sarcina noastră este de a „întinde“ sau „micșora“ imaginea, dar într-un mod de a evita artefacte dăunătoare (încețoșați, inexactități, etc.). Există mai multe algoritmi pentru rezolvarea acestei probleme, dar de multe ori se ajunge la ceea ce vom lua pentru o anumită coordonate nu este un singur pixel, și câțiva pixeli din jur, și se calculează pe baza valorilor lor de culoare ale unui pixel situat în mijloc. Astfel, în Pixel Bender are trei funcții de prelevare a probelor și (există și versiuni ale funcțiilor care operează pe imaginile și dimensiunea pixelilor din cele două, trei și patru canal):






Funcțiile eșantion și probăLinear fac același lucru: calculați culoarea rezultată pe baza interpolării liniare a culorii pixelilor vecini. Eșantionul de funcții mai întâi ia culoarea unui pixel, situat cel mai aproape de coordonatele de ieșire solicitate. În ceea ce privește funcția outCoord (), returnează coordonatele pixelilor, culoarea cărora este acum calculată. Aceasta înseamnă că dacă execut scriptul de exemplu pe care îl rulez, atunci obținem o imagine care este aceeași cu cea a imaginii de intrare. Să verificăm asta. În acest scop, în meniul "Fișier", selectăm elementul "Încărcați imaginea 1" și alegeți orice imagine. După ce faceți clic pe butonul "F5", vom vedea, după cum era de așteptat, imaginea originală (codul nostru a copiat imaginea). Pentru a verifica dacă totul funcționează corect, puteți modifica shader-ul nostru, de exemplu, după cum urmează:

După rularea shader-ului pentru execuție, vom vedea că întreaga zonă a imaginii de ieșire este umplută cu albastru. pentru că Am atribuit tuturor pixelilor de ieșire culoarea specificată de componentele sale RGBA (constructorul tip de date pixel4 are patru numere în segmentul de la zero la unul în ordinea RGBA). Încercați acum acest exemplu (ceea ce am făcut este prezentat în figura 1):

Studiu - dev, arhiva blog, adobe pixel bender

Aici verific coordonatele fiecărui pixel de intrare. Și, dacă intră într-un pătrat cu o latură de 300px situată în colțul din stânga sus, atunci ieșesc pixelul imaginii originale. În caz contrar, pixelului de ieșire i se atribuie o culoare roșie. Următorul exemplu (a se vedea figura 2)

Studiu - dev, arhiva blog, adobe pixel bender

Funcționează simultan două imagini. Pentru a fi verificat, trebuie să selectați elementul "Încărcați imaginea 2" din meniul "Fișier":

Iar următoarea formulă poate ușura imaginea:

Dacă după compilare pus lângă swf-fișierul produs la fișierul PBJ-shader ultima etapă, apoi, după pornirea swf-film, vom vedea că shader imaginii, și-a schimbat (vezi. Fig. 3) a fost aplicat.

Studiu - dev, arhiva blog, adobe pixel bender







Articole similare

Trimiteți-le prietenilor: