-->

Créer un filtre Pixel Bender

| 3 Commentaires

Après l’introduction à Pixel Bender, passons à la pratique, et voyons comment créer un filtre Pixel Bender, avec Pixel Bender Toolkit, que vous pouvez télécharger ici »

L’application est découpée en trois parties :

  1. La visualisation du filtre sur une image
  2. Le code du filtre
  3. Les paramètres du filtre

Le source du filtre Pixel Bender a pour extension .pbk (Pixel Bender Kernel), et le fichier compilé a pour extension .pbj (Pixel Bender Byte Code).  Évidemment si vous voulez modifier un filtre, il vous faudra le fichier source .pbk, si vous essayer d’ouvrir un fichier .pbj vous n’en tirerez rien….

Le code est composé de deux parties obligatoire, une déclaration de langage et le noyau (kernel, en anglais) du code. Le kernel est définit comme une class C++, une nouveauté pour les Flasheurs qui ne viennent pas du monde du développement « classique ». Le kernel est un object qui définit le résultat de sortie d’un pixel, quelque soit le nombre d’images en entrée. Il s’execute en parrallèle de chaque pixel pour générer une seule image en sortie. il doit au moins avoir une fonction evaluatePixel, ainsi qu’un paramètre de sortie de type pixel, et depuis la dernière beta du Toolkit, des MetaData…

Le kernel est executé pour chaque pixel de l’image de sortie, c’est à dire que vous ne pouvez pas définir un kernel pour tel partie l’image et un kernel pour tel partie de l’image, vous devez gérer  dans un seul et même kernel les filtres que vous voulez utiliser. La seule chose qui change a chaque pixel étant la fonction outCoord() qui renvoit la position du pixel « courrant ».

IMPORTANT !
Avant de rentrer dans le vif du sujet, petits conseils, suite à quelques tests :
– Ne pas mettre d’accent dans le nom de son kernel : kernel EffetCrypté ne fonctionnera pas…
– Mettre les chiffre en float, il ne semble pas prendre les integer (apparement ca vient du C)

Pour créer un nouveau filtre Kernel, seléctionner File > New Kernel Filter, il apparaitra alors le code ci-dessous, qui est le code de base d’un filtre :

<languageVersion : 1.0;>
kernel NewFilter
<  
   namespace : « Your Namespace »;
   vendor : « Your Vendor »;
   version : 1;
   description : « your description »;
>
{
   input image4 src;
   output pixel4 dst;

   void
   evaluatePixel() {
      dst = sampleNearest(src,outCoord());
   }
}

Télécharger le .pbk »

Si vous cliquez sur le bouton Run, et que vous avez sélectionner une image, vous aurez comme résultat de votre filtre… la même image. C’est logique si nous regardons le code, l’image de sortie dst, est juste une copie de l’image d’entré src, la fonction sampleNearest accède au pixel et à l’image passé en paramètre. La fonction outCoord() renvoit la position du position actuel, donc à chaque pixel de l’image src, le kernel renvoit en dst le même pixel, sans modification….

Si on veut maintenant faire des modifications sur l’image, il suffit de les faire sur le pixel de l’image en entrée.
Pour changer les canaux de l’image, on définit la variable p en pixel4, puis on modifie les propriétés, dans le cas suivant, on modifie le bleu de l’image :

<languageVersion : 1.0;>
kernel ModificationBleu
<
   namespace : « com.tsoin.asblog »;
   vendor : « Vincent Helwig »;
   version : 1;
   description : « Modification du bleu »;
>
{
   input image4 src;
   output pixel4 dst;

   void
   evaluatePixel() {
      pixel4 p = sampleNearest(src,outCoord() );
      p.b *= 5.0;
      // p.r *= 5.0;
      // p.g *= 5.0;
      dst = p;
   }
}

Télécharger le .pbk »

On rajoutant un paramètre au kernel, on pourra modifier le filtre directement d’ActionScript, la création de ce paramètre affichera automatiquement la variable dans la partie « Paramètre du Filtre -> 3″, cité plus haut.
On rajoute donc le paramètre delta pour modifier l’intensité du bleu :

<languageVersion : 1.0;>
kernel ModificationBleuParametre
<  
   namespace : « com.tsoin.asblog »;
   vendor : « Vincent Helwig »;
   version : 1;
   description : « Modification du bleu en paramètre »;
>
{
   input image4 src;
   output pixel4 dst;

   parameter float delta
   <
      minValue: 0.0;
      maxValue: 5.0;
   >;

   void
   evaluatePixel() {
      pixel4 p = sampleNearest(src,outCoord() );
      p.b *= delta;
      dst = p;
   }
}

Télécharger le .pbk »

Après quelques bidouillages, voici un petit exemple de qu’il est possible de faire (effet « Effet Canal Plus ») :

<languageVersion : 1.0;>
kernel EffetCanalPlus
<  
   namespace : « com.tsoin.asblog »;
   vendor : « Vincent Helwig »;
   version : 1;
   description : « Effet Canal Plus »;
>
{
   input image4 src;
   output pixel4 dst;

   parameter float delta
   <
      minValue: 0.0;
      maxValue: 5.0;
      defaultValue: 2.5;
   >;

   void
   evaluatePixel() {
      float2 coord = outCoord();
      coord.y += sin(coord.y) * delta;
      pixel4 p = sampleNearest(src,coord);
      dst = p;
   }
}

Télécharger le .pbk »

Pour finir, l’intégration dans flash nécessite le fichier compilé de Pixel Bender : .pbj, pour cela, il faut faire dans Pixel Bender Toolkit : Files > Export Kernel File For Flash Player…
Je posterais bientôt l’intégration du fichier .pbj dans Flash….

Quelques exemples :
Levels Exemples »
TV Scanline »
Gallery Labs.adobe.com » ( certains scripts ne fonctionnent plus…)
Pixel Bender Exchange »

Forum Pixel Bender »

3 Commentaires

  1. This web page rocks. Thanks for your cockney etymology!

  2. Howdy webmaster – That is definitely the greatest searching website I have found. It was entirely very simple to understand and it was simple to look for the data that i needed. Wonderful design and excellent information!

  3. Hey very nice web site!! Man .. Beautiful .. Amazing .. I will bookmark your website and take the feeds also…I’m happy to find numerous useful information here in the post, we need work out more techniques in this regard, thanks for sharing. . . . . .

Laisser un commentaire

Champs Requis *.


Seo