» it.EX9.Effect.Template
This site relies heavily on Javascript. You should enable it if you want the full experience. Learn more.

it.EX9.Effect.Template

English | French

Quando si comincia a generare un nuovo effetto è spesso utile cominciare da uno esistente. Nella categoria EX9.Effect si può trovare il nodo Template-(Ex9.Effect), che è un buon punto di partenza. Clonatelo con Ctrl+Invio o Ctrl+clic. Il modello, template, ha già una l'intera struttura di un effetto sotto forma di codice ed include il constant shading con un texturing semplice.

La template è strutturata in 4 sezioni:

  • Parametri
  • VertexShader
  • PixelShader
  • Tecniche

Parametri

Nella sezione parametri vengono prima dichiarate le matrici di trasformazione più comuni tramite la semantica. Solo la variabile tW, che viene dichiarata con la semantica WORLD, appare come pin sul nodo. Le semantiche VIEW e PROJECTION dichiarano rispettivamente le matrici tV e tP, e generano il pin View Transform ed il pin Projection Transform da connettere al nodo Renderer (EX9).

Poi dichiara una texture ed un campionatore, al quale la texture è assegnata. L'ultimo parametro è la matrice di trasformazione della texture.

Per ciascun effetto deve essere specificato quale dato si vuole in uscita (output) dal VertexShader e che sia ricevuto (input) come parametro dal PixelShader. Questo si ottiene nella maniera più conveniente tramite una struttura come questa:

struct vs2ps
{
    float4 Pos  : POSITION;
    float2 TexCd : TEXCOORD0;
};

Tenere presente che questa struttura è usata come parametro di ritorno per la funzione VertexShader:

 vs2ps VS(float4 PosO  : POSITION, float4 TexCd : TEXCOORD0)
 {..}

ed anche come parametro input per la funzione PixelShader:

 float4 PS(vs2ps In): COLOR
 {..}

Usare queste strutture non è obbligatorio; inoltre si possono aggiungere parametri addizionali nella funzione PixelShader.

In questo semplice caso la struttura trasporta solo due valori: la posizione e le coordinate vettoriali della texture. Per ottenere un effetto realistico, è verosimilmente necessario far passare più informazioni dal VertexShader verso il PixelShader.

VertexShader

La template della funzione VertexShader contiene una semplice struttura in output con l'attuale posizione dei vertici nel sistema di riferimento proiezione:

 Out.Pos = mul(PosO, tWVP);

e le attuali coordinate della texture del vertice, trasformate dalla matrice di trasformazione della texture in input:

 Out.TexCd = mul(TexCd, tTex);

PixelShader

La funzione PixelShader è ancora più semplice: riceve le coordinate della texture per un certo pixel ed anche le informazioni sul colore su quel pixel dal campionatore Samp, e le ritrasmette.

Tecniche

Il modello effetto specifica due tecniche: la principale, più usata e figa è TSimplShader, che utilizza le funzioni dello shader. L'altra, oltre ad essere noiosa ed ad utilizzare solo istruzioni a funzione fissa, probabilmente non sarà nemmeno necessario usarla.

anonymous user login

Shoutbox

~8h ago

Urbankind: circuitb:Wrongcop is epic! :)

~9h ago

joreg: @tobi: use GetSlice() as the patch i referred you to is demonstrating. or start a forum thread with your patch.

~9h ago

TobiTobsen123: hmm yes i can see the values...but how to handle them as seperate values? I need to forward them via TCP/IP...

~11h ago

joreg: @tobi: OSCDecoder helppatch has a section: OSC_Advanced (bottomright) that demoes decoding of multiple messages

~11h ago

TobiTobsen123: I'm using an OSCDecoder, it receives two arguments...works but how can I seperate the arguments into two seperate values

~14h ago

u7angel: @mediadog, make it a forum question.

~14h ago

u7angel: @mediadog, tty renderer ?

~16h ago

microdee: however non-conductive objects are invisible for this so the pencil and the sticks in the video are still a mysteries