lundi 10 novembre 2014

Nuke Tuto Blink Script, la base.


    Passons a notre premier BlinkScript!

Intro du tuto : http://unblogdecolin.blogspot.fr/2014/11/tuto-blinkscript-intro.html

A travers c'est différents articles nous allons pas innover dans le processing d'image au contraire nous allons voir des choses qui existent déjà mais qui vont nous permettre d'apprendre les bases du BlinKScript pour pouvoir plus tard se prendre la tête sur des nouveaux effets ...

    Pour ce premier BlinkScript nous allons simplement additionner les pixels a une valeurs quelconque. Nous verrons la structure de base, les inputs / outputs et la fonction process().
Nous commençons par créer un nouveau node BlinkScript et nous supprimons l’intégralité du code déjà présent dans l’éditeur de texte.

    Première chose a faire c'est de créer un objet kernel dans le quel nous allons mettre toutes nos instructions. Cet objet dérive de ImageComputationKernel qui possède deux manières de traiter les pixels : eComponentWise et ePixelWise. Pour ce premier BlinkScript nous allons utiliser eComponentWise.
Pour le moment nous avons ça :


    eComponentWise traite tout les channels d'un seul coup. C'est certainement plus performant mais nous ne pourrons pas faire d’opérations sur un channel en particulier. eComponentWise est parfaitement adapte pour notre premier BlinkScript qui est une simple addition.

    Maintenant que nous avons notre kernel, il faut que nous définissions une entrée et une sortie a l’intérieur. Image et ses différents argument sont la pour ça. Le premier argument définit si l'Image est en lecture : eRead ou en écriture : eWrite. Le deuxième définit le type d’accès au pixel, dans notre cas nous avons besoin d'eAccessPoint qui est la manière la plus simple d’accéder aux pixels nous comprendrons pourquoi dans la suite. Il existe trois autres manières d’accéder aux pixels que nous verrons dans des futurs articles. Il reste un dernier argument qui permet la gestion des bords de nos images : eEdgeClamped permet de répéter a l’extérieure de l'image la valeur du pixel le plus proche du bord, eEdgeConstant va répéter des valeurs de pixel noir 0.0 alors que  eEdgeNone  répète rien et est donc l'option la plus performante. Dans notre BlinkScript Additionator nous avons pas besoin de répéter les bords donc on va utiliser eEdgeNone.
Si nous précisons pas d'argument a notre Image les valeurs par default sont eRead, eAccesPoint et eEdgeNone.
Donc nous allons creer une entree src et une sortie dst, c'est les noms choisis par foundry mais nous pouvons les nommer comme bon nous semble.


    Il nous reste plus qu'a dériver une fonction pour que notre BlinkScript soit opérationnel c'est la fonction process() cette fonction va répéter les instructions, présentes dans son bloc, pixel après pixel et ligne après ligne. Le sens de processing des BlinkScript est toujours d'en bas a droite a en haut a gauche.
Nous créons la fonction void process(){ } a la suite de nos Image :


Dans le bloc de la fonction process() nous allons rentrer toutes nos instructions. Dans notre cas tout tiens en une ligne, j'assigne la valeur du pixel de src + une 0.5 au pixel de dst. En eComponentWise pour avoir le pixel de notre src il faut appeler la fonction src() simplement et de même pour avoir le pixel de notre dst nous appelons dst().
Notre instructions sera :


Nous compilons notre BlinkScript en cliquant sur Recompile, nous connectons une image a notre input src, un viewer sur notre BlinkScript  et nous pouvons voir toute notre image être additionne a 0.5, whouaa!.

    Nous le répétons ce BlinkScript ne fait absolument rien de fou mais c'est la meilleur façon de voir comment fonctionne un BlinkScript. En resume, pour que notre BlinkScript fonctionne il lui faut une entre et une sortie et une instruction dans process(). Il faut voir la fonction process() en peu comme une double boucle for :

for(y=0; y‹h; y++){
  for(x=0; x‹w; x++){
    ...
  }
}

Elle va parcourir tout les pixels de l'image et appliquer ses instructions sur chacun d'eux.

    Concrètement pour que notre BlinkScript soit facile utiliser il lui manque un knob pour que l'utilisateur puisse changer la valeur a additionner de manière interactive et non en changent le code. Nous verrons comment procéder dans un prochain article.

a++


C.


Aucun commentaire:

Enregistrer un commentaire