2010-12-12 23 views
83

He leído algunos tutoriales sobre Cg, sin embargo, una cosa no está del todo clara para mí. ¿Cuál es exactamente la diferencia entre los sombreadores de vértices y fragmentos? ¿Y para qué situaciones es mejor una que la otra?Vertex shader vs Fragment Shader

Respuesta

147

Un sombreador de fragmentos es el mismo que el sombreador de píxeles.

Una diferencia principal es que un sombreador de vértices puede manipular los atributos de los vértices. cuáles son los puntos de esquina de tus polígonos.

El sombreador de fragmentos, por otro lado, se ocupa de cómo se ven los píxeles entre los vértices. Se interpolan entre los vértices definidos siguiendo reglas específicas.

Por ejemplo: si quiere que su polígono sea completamente rojo, definirá todos los vértices en rojo. Si desea efectos específicos como un gradiente entre los vértices, tiene que hacer eso en el sombreador de fragmentos.

Dicho de otra manera:

El sombreado de vértices es parte de los primeros pasos en la tubería de renderizado, en algún lugar entre el modelo de transformación de coordenadas y el polígono de recorte que pienso. En ese punto, nada está realmente hecho todavía.

Sin embargo, el sombreador de fragmentos/píxeles es parte del paso de rasterización, donde se calcula la imagen y se rellenan o "colorean" los píxeles entre los vértices.

Basta con leer acerca de la canalización de gráficos aquí y todo se revelará: http://en.wikipedia.org/wiki/Graphics_pipeline

+4

Gracias, explicación muy clara y concisa. Creo que lo entiendo ahora – adivasile

+0

En realidad, no necesariamente establecería que los atributos de los vértices sean rojos: con la misma facilidad y probablemente más prudentemente podría establecer el fragcolor en rojo en el sombreador de fragmentos donde pertenece el color/rasterización. – RichieHH

25

El sombreado de vértices se realiza en cada vértice, mientras que el sombreador de fragmentos se realiza en cada píxel. El sombreador de fragmentos se aplica después del sombreador de vértices. Más sobre la tubería de la GPU de sombreadores link text

2

En la representación a través de imágenes 3D por hardware que suelen tener una malla (puntos, líneas, polígonos), estos son definidos por los vértices. Para manipular los vértices individualmente, por lo general, para los movimientos en un modelo u ondas en un océano, puede usar los sombreadores de vértices. Estos vértices pueden tener un color estático o un color asignado por texturas, para manipular los colores de los vértices usa sombreadores de fragmentos. Al final de la tubería cuando la vista va a la pantalla, también puede usar sombreadores de fragmentos.

+1

"Para manipular vértices individualmente, por lo general, para movimientos en un modelo u ondas en un océano": como esto puede ser cierto, es más apropiado para un sombreador de geometría que participa después del sombreador de vértices y antes del sombreador de píxeles/fragmentos. – Placeable

19

Nvidia CG Book

transformación Vertex es la primera etapa de procesamiento en la tubería de hardware de gráficos. La transformación de Vértice realiza una secuencia de operaciones matemáticas en cada vértice. Estas operaciones incluyen transformar la posición del vértice en una posición de pantalla para que la use el rasterizador, generar coordenadas de textura para texturizar e iluminar el vértice para determinar su color.

Los resultados de la rasterización son un conjunto de ubicaciones de píxeles y un conjunto de fragmentos. No existe una relación entre el número de vértices que tiene una primitiva y el número de fragmentos que se generan cuando se rastrilla. Por ejemplo, un triángulo formado por solo tres vértices podría ocupar toda la pantalla y generar millones de fragmentos.

Anteriormente, le dijimos que piense en un fragmento como un píxel si no sabía con precisión qué fragmento tenía. En este punto, sin embargo, la distinción entre un fragmento y un píxel se vuelve importante. El término píxel es la abreviatura de "elemento de imagen"."Un píxel representa el contenido del almacenamiento intermedio de cuadros en una ubicación específica, como el color, la profundidad y cualquier otro valor asociado con esa ubicación. Un fragmento es el estado necesario para actualizar un píxel en particular.

El término Se utiliza "fragmento" porque la rasterización divide cada primitiva geométrica, como un triángulo, en fragmentos del tamaño de píxel para cada píxel que cubre la primitiva. Un fragmento tiene una ubicación de píxel asociada, un valor de profundidad y un conjunto de parámetros interpolados tales como un color, un color secundario (especular) y uno o más conjuntos de coordenadas de textura. Estos diversos parámetros interpolados se derivan de los vértices transformados que componen la primitiva geométrica particular utilizada para generar los fragmentos. Puede pensar en un fragmento como un "píxel potencial". Si un fragmento pasa las diversas pruebas de rasterización (en la operación de trama ons stage, que se describe en breve), el fragmento actualiza un píxel en el búfer de cuadros.

4

Vertex Shaders y sombreadores de fragmentos son ambos característica de aplicación 3-D que no usos-cañería fija rendering.In cualquier 3-D representación shaders Vertex se aplican antes de shaders fragmento/pixel.

Los sombreadores de vértices operan en cada vértice. Si tiene una malla de polígono fija y desea deformarla en un sombreador, debe implementarla en vertex shader. Es decir, cualquier cambio físico en las aplicaciones de vértices puede realizarse en sombreados de vértices.

Los sombreadores de fragmentos toman la salida del sombreado de vértices y asocia colores, valor de profundidad de un píxel, etc.después de estas operaciones, el encuadre se envía a Framebuffer para visualizarse en la pantalla.

operación como, por ejemplo, el cálculo de la iluminación puede realizar en Vertex shader, así como el sombreado de freagment. pero el sombreador de fragmentación proporciona mejores resultados que el sombreador de vértices.

Cuestiones relacionadas