» 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

~12h ago

evvvvil: Yo I won the shader showdown at Nova demoparty and im live to make round 1 shader in 25 minutes again. https://www.twitch.tv/evvvvil_

~4d ago

ggml: little enttec dmx help on a saturday night ?

~7d ago

joreg: Interested in #visualprogramming with #vvvv? Meetup in #berlin on the 25th: 10-berlin-vvvv-meetup Featuring @kopffarben

~7d ago

ggml: is pepperoni dmx adapter still expected to work with b38 ?

~8d ago

bo27: @sinus hi! Thanks for using the template. Run is for endusers and it kills explorer. Try developer.bat to access patches

~8d ago

sinus: @bo24: sorry for da hassle. everything´s fine again. several restarts did the job.

~8d ago

sinus: @bo24: my mail db@servus.at

~8d ago

sinus: @IvanRastr aka bo24: found your project template, tested run bat.file, now my screen is black. only cursor. what to do?

~13d ago

cznickesz: @tonfilm thanks for the info. Can´t wait to give it a try!