opengl cg fragment-shader vertex-shader

opengl - Vertex shader vs Fragment Shader



cg fragment-shader (5)

Esta pregunta ya tiene una respuesta aquí:

He leído algunos tutoriales sobre Cg, pero 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 uno que el otro?


Al renderizar imágenes a través de hardware 3D, normalmente tiene una malla (punto, polígonos, líneas) que están definidas por 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.


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 el texto del enlace de la tubería de GPU de sombreadores


Un shader de fragmento es lo mismo que pixel shader.

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 quieres que tu polígono sea completamente rojo, definirás 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 sombreador de vértices es parte de los primeros pasos en la tubería gráfica, en algún lugar entre la transformación de coordenadas del modelo y el recorte de polígono, creo. 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.

Acabo de leer sobre el desarrollo de gráficos aquí y todo se revelará: http://en.wikipedia.org/wiki/Graphics_pipeline


Vertex Shaders y Fragment Shaders son características de la implementación en 3-D que no utiliza renderización de tubería fija. En cualquier renderización en 3-D, los sombreadores Vertex se aplican antes de sombreadores de fragmentos / píxeles.

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 el sombreado de vértices. Cualquier cambio físico en las aplicaciones de vértice puede realizarse en sombreadores de vértices.

Los sombreadores de fragmentos toman el resultado del sombreado de vértices y asocia colores, el 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.

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


Libro Nvidia CG

La transformación de Vertex es la primera etapa de procesamiento en la canalización 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, así como 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 pensara en un fragmento como un píxel si no sabía con precisión qué era un fragmento. 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 búfer de fotogramas 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 requerido potencialmente para actualizar un pixel particular.

El término "fragmento" se utiliza porque la rasterización divide cada primitiva geométrica, como un triángulo, en fragmentos de 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, 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. Puedes pensar en un fragmento como un "pixel potencial". Si un fragmento pasa las diversas pruebas de rasterización (en la etapa de operaciones de ráster, que se describe en breve), el fragmento actualiza un píxel en el búfer del fotograma.