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

EX9.Archivos.Efecto

English | French | Italian

Effects son el medio de direct3d para combinar vertex- y pixel shaders en un archivo.

El esquema básico de un archivo de efectos es como sigue:

parameters
functions

technique1

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

technique2

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

Un efecto contiene parámetros que son usados por las funciones (las funciones del vertex shader y pixelshader) y por las técnicas, en las cuales puedes definir con qué shader va a ser renderizado un objeto, y ajustar los render states y los sampler states.

Parametros

Los parámetros son variables que son declaradas en el efecto y son ajustadas directamente desde el efecto o desde la aplicación (por ejemplo, via patch en vvvv). Los parámetros pueden ser de cualquier tipo de los definidos en datatypes defined in HLSL.

Para cada parámetro definido en un efecto vvvv crea un input pin apropiado en el nodo efecto. Por medio de esos pines pueden ser ajustados los parámetros desde vvvv.

Semanticas

A los parámetros se les puede asignar una semántica que especifica cómo ese parámetro será manejado por la aplicación que lo aloja (por ejemplo vvvv). Por ejemplo, si defines un parámetro de tipo float4 (un vector de 4 floats) y lo declaras con la semántica "COLOR", vvvv configurará un input pin de color en el nodo de efecto.
Por medio de las semánticas también se tiene acceso a las matrices de View y Projection (y a toddas sus combinaciones con el worldMatrix+ transform e inversa) en el renderer de vvvv. Para los parámetros de matrices declaradas con cualquiera de estas semánticas no se añade ningún pin al nodo efecto ya que esas matrices se añaden automáticamente desde el nodo efecto y no son visibles para el usuario (excepto el world matrix)

Todas la semánticas soportadas por vvv están listadas en la página EX9.HLSL.Semantics.

Anotaciones

Para descripciones más individuales de los parámetros puedes usar EX9.HLSL.Annotations.

Actualmente VVVV solo soporta tres anotaciones. La más importante a mencionar es la anotación "uiname" del tipo string, que define el nombre para el pin que representa el parámetro en la interface de usuario de vvvv (en el nodo effect). Si no usas esta anotación el pin se llamará simplemente como el parámetro en el archivo Effect.

Funciones

Igual que en cualquier lenguaje de programación moderno, se pueden definir funciones en HLSL para encapsular/modularizar el código. Las funciones en HLSL son declaradas de forma similar que en C/C++/C#. Tienen un tipo de “devolución” (return type), nombre, parámetros de input y el cuerpo de la función. Un efecto puede contener muchas funciones.

Las funciones principales son las funciones del VertexShader- y del PixelShader desde las cuales pueden ser llamadas otras funciones.

Vertex Shader

El VertexShader es una función que es ejecutada para cada uno de los vértices de una malla (geometry/model). En el VertexShader el procesamiento de vértices en el rendering pipeline se sucede a traves de estos pasos: WorldTransform, ViewTransform, iluminación y materiales y ProjectionTransform. También se pueden realizar operaciones más complejas como VertexBlending (para animaciones) o morphing.

Pixel Shaders

El PixelShader función se lleva a cabo para cada píxel de una malla. Después de que el modelo se ha proyectado en el espacio 2D de la pantalla y de que el rasterizador haya definido cada píxel de la malla, se puede ejecutar el PixelShader para calcular el color de cada uno de esos píxeles. Iluminación avanzada per-pixel-lighting y diversas operaciones de textura como los filtros, transformaciones, multitextura, bump-mapping y normal-mapping pueden ser implementadas utilizando PixelShaders.

Techniques/Passes

Cada efecto debe contener al menos una técnica. Una ténica contine 1 o más pases. En cada pase pueden ser declaradas las funciones del vertexshader y del pixelshader y entonces serán llamadas para el rendering de ese pase.

Una técnica predeterminada es como sigue:

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

Aquí VS() y PS() son los ombres de las funciones vertexshader y pixelshaderare the names of the vertex- and pixelshader functions. En vez de definir las shader para el renderizado en pases, se pueden declarar los renderstates usando la fixed function pipeline, pero eso pertenece a la vieja escuela.

Si una técnica tiene varios pases, la malla es renderizada una vez por cada uno de ellos utilizando para ello los vertex-pixel shaders declarados.

A través de las técnicas se pueden generar diferentes versiones de un efecto. Estas pueden ser versiones que implementan un efecto similar para diferentes GPUs, o simplemente usar versiones alternativas del efecto.

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