» it.Tutorial Effects - Vertexshader, i Preparativi
This site relies heavily on Javascript. You should enable it if you want the full experience. Learn more.

it.Tutorial Effects - Vertexshader, i Preparativi

English | Spanish | Mandarin | Japanese

INDICE: it.Of Effects and Shaders
Prossimo: it.Mr. Wiggle


Mesh e Vertice

I vertexshader operano sulla base del vertice di una mesh. Un vertice è un contenitore per più campi dati. I più importanti sono la posizione, le coordinate della texture, e le normali. Poiché vogliamo scrivere shaders, dobbiamo sapere che tipo di dati sono conservati in un vertice. Si può allora usare il nodo VertexDeclaration (EX9.Geometry Mesh) per ottenere una descrizione del contenuto del vertice di una mesh.

Il contenitore di una mesh consiste nei seguenti tipi di dati:

Mesh Data

In vvvv una mesh può essere suddivisa nei suoi dati così:

Mesh Data 2

Flusso di Dati

Per comprendere bene tutta la figura, si deve sapere come un dato viene processato in vvvv. Prima, vvvv invia tutti i dati di questo frame dell'animazione alla scheda grafica, e cioè:

  • valori nei pins dello shader
  • le trasformazioni
  • la mesh

Il vertexshader trasforma le posizioni del vertice nello spazio del mondo e le proietta sullo schermo (spazio del mondo 3d -> spazio dello schermo 2d, vedi it.EX9 Spaces ). A seconda dello shader prepara anche alcuni altri dati che verranno poi usati nel pixelshader.
Tutti i dati che il vertexshader calcola sono impacchettati dentro una struttura dati che chiameremo 'vs2ps'. Può avere più campi dati, a seconda di cosa si ha bisogno nel pixelshader. Deve necessariamente restituire il campo dati POSITION, con il quale la scheda grafica calcola quali pixel dello schermo appartengano alla mesh. Tutti gli altri sono opzionali; i più comuni sono il campo dati delle coordinate della texture e quello delle normali.
Il pixelshader riceve vs2ps come input e viene richiamato per calcolare il colore finale per ogni pixel della mesh. I valori nella struttura vs2ps vengono interpolati per i pixels che sono collocati tra i vertici.

Mesh data flow

Vedere it.EX9 Dataflow per altri dettagli.

Setup Base

Clona il nodo Template (EX9.Effect) in una patch e connettilo ad una mesh e poi ad un Renderer (EX9):

Basic patch

quindi sostituisci il codice presente nell'editor con questo che segue, per avere un semplice vertexshader:

//trasforma
float4x4 tW: WORLD;        //il modello matrice mondo tramite lo shader
float4x4 tV: VIEW;         //matrice vista come impostata tramite Renderer (EX9)
float4x4 tP: PROJECTION;   //matrice proiezione come impostata tramite Renderer (EX9)
float4x4 tWVP: WORLDVIEWPROJECTION; //tutti e 3 premoltiplicati 
 
//la trasformazione della texture segnata con la semantica TEXTUREMATRIX
//per ottenere trasformazioni simmetriche
float4x4 tTex: TEXTUREMATRIX <string uiname="Texture Transform";>;
 
//la struttura dati: "vertexshader to pixelshader"
//usata come output della Funzione VS
//e come input della funzione PS
struct vs2ps
{
    float4 Pos  : POSITION;
    float2 TexCd : TEXCOORD0;
};
 
//vertexshader_
vs2ps VS(
    float4 PosO  : POSITION,
    float4 TexCd : TEXCOORD0)
{
    //dichiara la struttura dell'output
    vs2ps Out;
 
    //trasforma la posizione
    Out.Pos = mul(PosO, tWVP);
 
    //trasforma le coordinate della texture
    Out.TexCd = mul(TexCd, tTex);
 
    return Out;
}
 
//tecnica
technique TSimpleShader
{
    pass P0
    {
        VertexShader = compile vs_1_1 VS();
        PixelShader  = null;
    }
}

Prossimo: it.Mr. Wiggle
INDICE: it.Of Effects and Shaders

anonymous user login

Shoutbox

~4d ago

joreg: vvvvTv S02E01 is out: Buttons & Sliders with Dear ImGui: https://www.youtube.com/live/PuuTilbqd9w

~10d ago

joreg: vvvvTv S02E00 is out: Sensors & Servos with Arduino: https://visualprogramming.net/blog/2024/vvvvtv-is-back-with-season-2/

~10d ago

~11d ago

fleg: hey there! What's the best tool for remote work? Teamviewer feels terrible. Thanks!

~24d ago

joreg: Last call: 6-session vvvv beginner course starting November 4: https://thenodeinstitute.org/courses/ws24-5-vvvv-beginners-part-i/

~1mth ago

joreg: Missed the last meetup? You can rewatch it here: https://www.youtube.com/live/MdvTa58uxB0?si=Fwi-9hHoCmo794Ag

~1mth ago

theurbankind: When is the next big event, like node festival ?

~1mth ago

~1mth ago

joreg: Join us for the next vvvv meetup on Oktober 17th: https://visualprogramming.net/blog/2024/25.-vvvv-worldwide-meetup/

~2mth ago

joreg: 6 session beginner course part 2 "Deep Dive" starts January 13th: https://thenodeinstitute.org/courses/ws24-5-vvvv-beginners-part-ii/