Pregunta

¿Qué son los sombreadores Vertex y Pixel?

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

¿Fue útil?

Solución

Un Pixel Shader es un componente de GPU (Unidad de procesamiento gráfico) que puede programarse para funcionar por píxel y se ocupa de cosas como la iluminación y el mapeo de relieve.

Un Vertex Shader también es un componente de GPU y también está programado usando un lenguaje específico tipo ensamblador , como los sombreadores de píxeles, pero están orientados a la geometría de la escena y pueden hacer cosas como agregar bordes de silueta de dibujos animados a los objetos, etc.

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

Existen múltiples recursos en la web para comprender mejor cómo usar estas cosas. NVidia y ATI son especialmente buenos recursos para documentos sobre este tema.

Otros consejos

DirectX 10 y OpenGL 3 introdujeron el sombreador de geometría como un tercer tipo.

En el orden de canalización de procesamiento -

Vertex Shader : toma un solo punto y puede ajustarlo. Se puede utilizar para calcular cálculos de iluminación de vértices complejos ** como una configuración para la siguiente etapa y / o deformar los puntos (oscilación, escala, etc.).

cada primitiva resultante se pasa al

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

cada primitiva resultante obtiene la línea de exploración convertida y cada píxel que cubre el intervalo pasa a través del

Pixel Shader (Fragment Shader en OpenGL): calcula el color de un píxel en la pantalla en función de lo que pasa el vértice shader, las texturas encuadernadas y los datos agregados por el usuario. Esto no puede leer la pantalla actual en absoluto, solo calcula qué color / transparencia debe ser ese píxel para la primitiva actual.

esos píxeles se colocan en el búfer de dibujo actual (pantalla, backbuffer, render-to-texture, lo que sea)

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

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

Ahora hay 3 nuevos sombreadores utilizados en DirectX 11 para la teselación. El nuevo orden de sombreado completo es Vertex- > Hull- > Tessellation- > Domain- > Geometry- > Pixel. Todavía no he usado estos nuevos, así que no me siento calificado para describirlos con precisión.

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

Los sombreadores de píxeles (o más exactamente, Fragmento) toman valores interpolados de los procesados ??en el sombreador Vertex y generan fragmentos de píxeles. La mayoría de los "cool" Las cosas se hacen en sombreadores de píxeles. Aquí es donde tienen lugar cosas como la búsqueda de textura y la iluminación.

Específico de DirectX:

Shader:

Conjunto de programas que implementa funciones gráficas adicionales para los objetos que no están definidos en la canalización 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 predefinidos "fijos" operaciones.

HLSL: (lenguaje de sombreado de alto nivel):

HLSL es un lenguaje de programación como C ++ que se utiliza para implementar sombreadores (sombreadores de píxeles / sombreadores de vértices).

Sombreadores de vértices:

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

Sombreadores de píxeles:

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

Nota: tanto los Vertex Shaders como los 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 los parámetros necesarios como el nombre del archivo, la función de entrada principal, etc.,

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

Se pueden usar para crear efectos especiales, sombras, iluminación, etc.

Dado que cada Pixel / Vertex se opera individualmente, estos sombreadores se prestan a la arquitectura altamente paralela de los procesadores gráficos modernos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top