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

it.EX9.Effect.File

English | French | Spanish

Gli Effetti sono il modo in cui direct3d combina i vertex- e pixelshaders in un unico file.

Lo schema di base di un file Effetto è come questo che segue:

parameters
functions

technique1

  pass1 (vertexshader, pixelshader)
  pass2 (vertexshader, pixelshader)
  ..

technique2

  pass1 (vertexshader, pixelshader)
  pass2 (vertexshader, pixelshader)
  ..

Un Effetto contiene i parametri che verranno usati dalle funzioni, le funzioni vertex- e pixelshader stesse e le tecniche, dove si possono definire con quali shaders un oggetto sta per essere disegnato (rendered, dall'inglese to render: rendere graficamente) ed impostare le condizioni di disegno e quelle del campionatore.

Per shader si intende definire in generale uno strumento usato nella computer grafica per determinare l'aspetto di un oggetto, che sia una mesh, un pixel, o una superficie che comprenda sia meshes che pixels

Parametri

I parametri sono variabili che vengono dichiarate all'interno di un Effetto, e possono essere impostate direttamente nell'effetto o dall'applicazione (attravrso la patch di vvvv). I Parametri possono essere di qualsiasi tipo di dato definito in HLSL.

Per ciascun parametro definito in un effetto vvvv genera un input pin appropriato nel nodo effetto. Tramite questi pins i valori possono essere impostati per i parametri dall'interno di vvvv (nella patch).

Semantica

Ai parametri può essere assegnata una semantica, che specifica come un parametro verrà gestito dall'effetto dell'applicazione che lo ospita (cioè vvvv). Per esempio se definiamo un parametro di tipo float4 (un vettore di 4 numeri a virgola mobile, vector of 4 floats) e lo dichiariamo con la semantica "COLOR", vvvv genererà un input pin per il colore nel nodo effetto.
Tramite la semantica abbiamo anche l'accesso alle matrici vista e proiezione (ed a tutte le loro combinazioni con la matrice mondo, WorldMatrix - "and all of its combinations with the world matrix + transformed and inverse", dalla versione inglese di questa pagina) del renderer. Per i parametri matrice dichiarati con una semantica, non verrà aggiunto alcun pin nel nodo dato che queste matrici sono impostate automaticamente dal nodo effetto e perciò non saranno visibili (ad eccezione della WorldMatrix).

La semantica supportata da vvvv è riportata nella pagina it.EX9.HLSL.Semantica.

Annotazioni

Per la descrizione di un parametro si possono usare le annotazioni it.EX9.HLSL.Annotations.

Attualmente vvvv supporta solo tre annotazioni. La più importante da menzionare è l'annotazione "uiname" di tipo stringa, che definirà il nome del pin che rappresenta un parametro nel nodo effetto. Se non usate questa annotazione al pin verrà assegnato il nome del parametro nel file Effetto.

Funzioni

Si possono definire funzioni in HLSL per incapsulare o modularizzare il codice. Le funzioni in HLSL vengono dichiarate in maniera simile a C/C++/C#. Hanno un tipo di ritorno, return type, un nome, parametri di input ed il corpo della funzione. Un effetto può avere molte funzioni: VertexShader e PixelShader sono le funzioni principali di un effetto, dall'interno delle quali altre funzioni possono venire richiamate.

VertexShader

La funzione VertexShader viene eseguita per ogni vertice di una mesh (geometria/modello 3d). In un VertexShader, l'elaborazione di un vertice nella pipeline di rendering è sviluppata attraverso questi passaggi: WorldTransform, ViewTransform, illuminazione, materiali e ProjectionTransform. Qui possono essere eseguite operazioni più complesse come il VertexBlending (per l'animazione) o il morphing.

PixelShader

La funzione PixelShader viene eseguita per ciascun pixel di una mesh. Dopo che il modello sia stato proiettato nello spazio 2d dello schermo e che il rasterizzatore abbia definito ogni pixel di una mesh, si può eseguire un PixelShader per calcolare il colore di ciascuno di quei pixels. Così si possono realizzare l'Illuminazione Avanzata per Pixel e differenti operazioni come filtri, trasformazioni, multi-texturing, bump e normal mapping.

Tecniche/Passaggi

Ogni effetto deve contenere almeno una tecnica. Una tecnica contiene uno o più passaggi. In ciascun passaggio si può dichiarare una funzione Pixelshader o VertexShader, che vengono poi usate per il rendering dei quel passaggio.

Una semplice tecnica di base può essere la seguente:

technique TSimpleShader
{
  pass P0
  {
    VertexShader = compile vs_1_1 VS();
    PixelShader  = compile ps_1_0 PS();
  }
}

VS() e PS() sono i nome delle funzioni Vertex e Pixelshader.

Se una tecnica contiene diversi passaggi, la mesh viene disegnata, rendered, per ciascuno di questi passaggi secondo quanto stabilito con i Vertex e PixelShaders.

Attraverso le tecniche si possono generare diverse versioni di un effetto. Queste possono realizzare un effetto simile su differenti GPU (Graphics Processing Unit, in sostanza il microprocessore della scheda grafica), o anche fornire versioni alternative di un effetto.

anonymous user login

Shoutbox

~4d ago

~7d ago

joreg: The Winter Season of vvvv workshops is now over but all recordings are still available for purchase: https://thenodeinstitute.org/ws23-vvvv-intermediates/

~14d ago

schlonzo: Love the new drag and drop functionality for links in latest previews!

~22d ago

joreg: Workshop on 29 02: Create Sequencers and Precise Clock Based Tools. Signup here: https://thenodeinstitute.org/courses/ws23-vvvv-08-create-sequencers-and-precise-clock-based-tools-in-vvvv-gamma/

~29d ago

joreg: Workshop on 22 02: Unlocking Shader Artistry: A Journey through ‘The Book of Shaders’ with FUSE. Signup here: https://thenodeinstitute.org/courses/ws23-vvvv-12-book-of-shaders/

~1mth ago

joreg: Talk and Workshop on February 15 & 16 in Frankfurt: https://visualprogramming.net/blog/vvvv-at-node-code-frankfurt/

~1mth ago

woei: @Joanie_AntiVJ: think so, looks doable

~1mth ago

xd_nitro: Anyone remember who increased projector brightness by removing some components that product the color?

~1mth ago

Joanie_AntiVJ: This looks super interesting (vectors over network) would anyone here know how to implement this in beta? https://github.com/madmappersoftware/Ponk