Adobe pixel bender új szintre képfeldolgozás vaku


Adobe Pixel Bender: új szintű képfeldolgozás a vaku

A program a Pixel Bender mentett egy kiterjesztésű fájl „PBK”, akkor ezeket a fájlokat lehet közvetlenül letölteni szerdán, az Adobe Photoshop CS, vagy az Adobe After Effects CS, vagy lefordíthatjuk kernel-program „PBJ” fájlt, amely letölthető és úgy van kialakítva FlashPlayer végrehajtási környezetet. Itt van egy fontos pont: ha létrehozunk egy alkalmazás fut a FlashPlayer környezetben, akkor nem férnek hozzá az összes funkciót a Pixel Bender Kernel nyelvet. Azt is teljesen hiányzik Graph Language nyelv támogatása (a részletes listát ezen korlátozások is megtalálhatók a segítséget, hogy megy együtt a Pixel Bender Toolkit). Most adok a program a munkadarab a Pixel Bender Kernel. Ez az üres kaphat bármikor, ha a menüpont kiválasztása „Fájl -> Új rendszermag”:


kernel NewFilter

bemeneti image4 src;
kiadási pixel4 DST;

void evaluatePixel () DST = sampleNearest (src, outCoord ());
>
>

float int int pixel1 image1
float2 bool2 int2 pixel2 image2
float3 bool3 int3 pixel3 image3
float4 bool4 int4 pixel4 image4

Az ilyen vektor adattípusok nagyon kényelmes, hiszen az összes aritmetikai műveletek „túlterheltek”, és tudja, hogyan kell szorzás, osztás, add vektorok együtt. Itt érdemes megemlíteni swizzling működését. A lényege swizzling-és egy vektor, például a négy elem, azt akarjuk, hogy csak három, például az első, harmadik és negyedik. És akkor lehet összerakni egy új változó dimenzió 3, maguk az elemek felcserélhetők, például:

float4 vec4;
float4 piros = vec4.rrrr
float3 rgb_only = vec4.rgb

DST = sampleNearest (src, outCoord ());

Azt mondja, hogy „DST” változó (a számítás eredménye a shader) kapunk eredményeként hívás sampleNearest funkciót. Mit jelent a sampleNearest? Mondhatnánk, hogy sampleNearest függvény egyszerűen elveszi a kép (az első argumentum) pixel az adott koordinátákat, de ez nem igaz. A számítógépes grafika, van olyan dolog, mint a mintavétel, illetve a mintavétel és értékének kiszámítását a minta alapján listán (bár ezt a kifejezést a mintavétel alkalmazható más területeken). Tegyük fel, hogy mi a feladata, „pull” textúra eredetileg formájában adják a referencia kép (mérete 200 x 200 pixel), a felszínen a kisebb vagy nagyobb. Itt nem tudjuk egyértelműen hozzárendelni minden egyes kimeneti képpont egy és csak egy bemeneti képpont (pixel nem elcsépelt elég). Ezért a mi feladatunk az, hogy „nyúlik”, vagy „zsugorodik” a kép, de olyan módon, hogy elkerüljék a káros melléktermékek (blur, pontatlanságok, stb.) Számos algoritmus megoldja ezt a problémát, de gyakran ez jön le, hogy mit veszünk egy adott koordináta nem egyetlen pixel, és néhány környező képpontok, és kiszámítása alapján színük pixel értékéből közepén helyezkedik el. Így a Pixel Bender három funkciója mintavételező és (is vannak változatai a funkciók hogy működnek a képek és a méret a pixelek a két, három és négy csatorna):

pixel4 mintát (image4 im, float2 v)
pixel4 sampleLinear (image4 im, float2 v)
pixel4 sampleNearest (image4 im, float2 v)

Funkciók sampleLinear minta és nem ugyanaz a dolog: kiszámítjuk a kapott szín alapján lineáris interpoláció a szomszédos színes pixel. A funkció sampleNearest egyszerűen veszi a szín egy pixel található, amely legközelebb áll a kért kimeneti koordináta. Ami outCoord () függvény ad vissza pixel koordináta, színes mostantól számítva. Ez azt jelenti, hogy ha fut a példaparancsfájlt adott nekem, hogy végre, mi lesz ennek eredményeként a kép, egy az egyben megegyezik a bemeneti kép. Nézzük ki. Ehhez a „Fájl” menü, akkor válassza ki az elemet „Load Image 1” és akkor minden képet. Miután kattintson a „F5” gombra, akkor megjelenik, mint az várható volt, az eredeti kép (a kódot csak másolni a képen). Annak érdekében, hogy ellenőrizze, ha minden rendben van, akkor lehet módosítani a shader, például:

void evaluatePixel () DST = pixel4 (0,0,1,1);
>

Adobe pixel bender új szintre képfeldolgozás vaku
Elindítása után a shader elvégzésére, látni fogjuk, hogy az egész terület a kimeneti kép tele van kék, ahogy rendelt összes kimeneti pixel színét pontosította RGBA-összetevők (a típus kivitelező adatok pixel4 vesz négy számot intervallumban nullától valaki az RGBA sorrendben) . Most próbáld ezt a példát (amit kaptam, az 1. ábrán látható)

csomag import flash.display * .;
import flash.events * .;
import flash.net * .;
import flash.filters * .;

[SWF (szélesség = "600", magasság = "400", BackgroundColor = "# aa0000", framerate = "30")]
public class Fő kiterjed Sprite

[Beágyazása (forrás = '/ lisa.png')]
privát var fotoClass: Class;
privát var fotoImage: Bitmap = new fotoClass ()
privát var urlLoader: URLLoader = null;

public function Main (): void addChild (fotoImage);
var urlRequest: URLRequest = new URLRequest ( "shader.pbj");
urlLoader = új URLLoader ();
urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
urlLoader.addEventListener (Event.COMPLETE, applyFilter);
urlLoader.load (urlRequest);
>

privát funkció applyFilter (event: Event): voidurlLoader.removeEventListener (Event.COMPLETE, applyFilter);
var Shader: Shader = új Shader (event.target.data);
var shaderFilter: ShaderFilter = új ShaderFilter (shader);
= FotoImage.filters [shaderFilter];
>
>>

fekete zorro, black-zorro.com

Kapcsolódó cikkek