2009-05-07 20 views
56

¿Qué son los sombreadores Vertex y Pixel?¿Qué son los sombreadores Vertex y Pixel?

¿Cuál es la diferencia entre ellos? ¿Cuál es el mejor?

+1

posible duplicado de [Vertex shader vs Fragment Shader] (http://stackoverflow.com/questions/4421261/vertex) -shader-vs-fragment-shader) –

Respuesta

36

A Pixel Shader es un componente de la GPU (unidad de procesamiento de gráficos) que se puede programar para funcionar en base a píxeles y ocuparse de cosas como la iluminación y el mapeo de relieve.

A Vertex Shader es también componente de GPU y también se programa utilizando un lenguaje específico de montaje como, como shaders de píxeles, pero están orientados a la geometría de la escena y puede hacer cosas como la adición de bordes cartoony silueta a los objetos, etc.

Ninguno es mejor que el otro, cada uno tiene sus usos específicos. La mayoría de las tarjetas gráficas modernas compatibles con DirectX 9 o superior incluyen estas capacidades.

Existen varios recursos en la web para obtener una mejor comprensión de cómo usar estas cosas. NVidia y ATI especialmente son buenos recursos para documentos sobre este tema.

+13

Los sombreadores también se escriben en lenguajes de nivel superior (no ensamblados) como Cg, HLSL y GLSL. –

11

Los sombreadores Vertex y Pixel proporcionan diferentes funciones dentro de la canalización de gráficos. Los sombreadores de vértices toman y procesan datos relacionados con vértices (posiciones, normales, texcoords).

Los sombreadores de píxel (o más exactamente, Fragmento) toman valores interpolados de los procesados ​​en el sombreado Vertex y generan fragmentos de píxeles. La mayoría de las cosas "geniales" se realizan en sombreadores de píxeles. Aquí es donde tienen lugar cosas como la búsqueda de texturas y la iluminación.

3

En términos de desarrollo, un sombreador de píxeles es un pequeño programa que opera en cada píxel individualmente, de forma similar, un sombreador Vertex funciona en cada vértice individualmente.

estos pueden ser utilizados para crear efectos especiales, sombras, iluminación, etc ...

Dado que cada píxel/Vertex es operado por separado esos shaders se prestan a la arquitectura altamente paralela de procesadores gráficos modernos.

57

DirectX 10 y OpenGL 3 introdujeron el Geometry Shader como un tercer tipo.

Al dictar orden de tuberías -

Vertex Shader - Toma un solo punto y puede ajustarlo. Se puede usar para calcular cálculos de iluminación de vértice ** complejos como una configuración para la siguiente etapa y/o deformar los puntos alrededor (bamboleo, escala, etc.).

cada resultante primitiva se pasa a la

Geometry Shader - Toma cada primitiva transformado (triángulo, etc.) y puede realizar cálculos en él. Esto puede agregar nuevos puntos, quitárselos o moverlos según sea necesario. Esto se puede usar para agregar o eliminar niveles de detalle dinámicamente desde una única malla base, crear mallas matemáticas basadas en un punto (para sistemas de partículas complejas) y otras tareas similares.

cada resultante primitiva consigue línea de exploración convertida y cada píxel de las cubiertas palmo se pasa a través de la

Pixel Shader (Fragmento Shader en OpenGL) - Calcula el color de un píxel en la pantalla en base a lo que el shader de vértice pasa, texturas encuadernadas y datos agregados por el usuario. Esto no puede leer la pantalla actual, solo averigüe qué color/transparencia debe tener ese píxel para la primitiva actual.

esos píxeles a continuación, conseguir poner en la memoria intermedia de corriente (pantalla, backbuffer, hacen a la textura, lo que sea)

Todos los shaders pueden acceder a los datos globales, tales como la matriz visión del mundo y el desarrollador puede pasar en simples variables que pueden usar para iluminación o cualquier otro propósito. Los sombreadores se procesan en un lenguaje parecido a un ensamblador, pero las versiones modernas de DirectX y OpenGL han incorporado compiladores de lenguaje de tipo c de alto nivel integrados llamados HLSL y GLSL, respectivamente. NVidia también tiene un compilador de sombreador llamado CG que funciona en ambas API.

[Editado para reflejar el orden incorrecto que tenía antes (Geometry-> Vertex-> Pixel) como se señala en un comentario.]

En la actualidad hay 3 nuevos shaders usados ​​en DirectX 11 para la teselación. El nuevo orden completo de sombreado es Vertex-> Hull-> Teselación-> Dominio-> Geometría-> Pixel. No he usado estos nuevos todavía así que no me siento calificado para describirlos con precisión.

+2

Su canalización de representación es incorrecta. Los vértices se procesan primero en el sombreador de vértices y luego las primitivas que forman pasan por el sombreador de geometría. Me pregunto por qué nadie más se ha quejado sobre este orden equivocado, todavía. –

+2

El sombreado de teselación consiste en * Sombreado de sombreado * y * Sombreado de dominio *. La etapa intermedia * Tessellator * no es programable. Entonces solo hay dos shaders adicionales. Los equivalentes GL serían * Control de teselado * y * Evaluación de teselado *. –

3

DirectX específica:

Shader:

Conjunto de programas que implementa características gráficas Además de los objetos que no están definidos en la tubería de representación fija. Debido a esto, podemos tener nuestros propios efectos gráficos de acuerdo con nuestras necesidades, es decir, ya no estamos limitados a las operaciones "fijas" predefinidas.

HLSL: (sombreado de alto nivel de idioma):

HLSL es un lenguaje de programación como C++ que se utiliza para aplicar shaders (Pixel Shaders/Vertex Shaders).

Vertex Shaders:

Un vertex shader es un programa ejecutado en la GPU de la tarjeta gráfica, que opera en cada vértice de forma individual. Esto facilita que podamos escribir nuestro propio algoritmo personalizado para trabajar con los vértices.

Shaders

Pixel:

Un pixel shader es un programa ejecutado en la GPU de la tarjeta gráfica durante el proceso de rasterización para cada píxel. Nos da una facilidad para acceder/manipular píxeles individuales directamente. Este acceso directo a los píxeles nos permite lograr una variedad de efectos especiales, como multitextura, iluminación por píxel, profundidad de campo, simulación en la nube, simulación de fuego y sofisticadas técnicas de sombreado.

Nota: Tanto Vertex Shaders como Pixel Shaders (programas) deben compilarse utilizando una versión específica del compilador antes de su uso.La compilación se puede hacer como llamar a una API con parámetros necesarios como el nombre de archivo, la función de entrada principal, etc.,

Cuestiones relacionadas