Qu'est-ce qu'un fragment dans la programmation graphique 3D?

37

Qu'est-ce qu'un fragment dans un fragment shader? Wikipedia dit que:

En général, un fragment peut être considéré comme les données nécessaires pour ombrer le pixel, plus les données nécessaires pour vérifier si le fragment survit et devient un pixel (profondeur, alpha, pochoir, ciseaux, identifiant de fenêtre, etc.).

Alors, s'agit-il de textures, de sommets ou de quelque chose d'autre?

Albus Dumbledore
la source

Réponses:

31

En infographie, un fragment est constitué des données nécessaires pour générer une primitive de dessin représentant un pixel unique dans le tampon de trame.

Ces données peuvent inclure, sans toutefois s'y limiter:

  • position du raster
  • profondeur
  • attributs interpolés (couleur, coordonnées de texture, etc.)
  • pochoir
  • alpha
  • identifiant de fenêtre

Lorsqu'une scène est dessinée, les primitives de dessin sont tramées en fragments qui sont texturés et combinés avec le tampon d'images existant. La manière dont un fragment est combiné aux données déjà présentes dans le tampon d'images dépend de divers paramètres. Dans un cas typique, un fragment peut être ignoré s'il est plus éloigné que le pixel qui se trouve déjà à cet emplacement (en fonction de la mémoire tampon de profondeur). Si elle est plus proche que le pixel existant, elle peut remplacer ce qui existe déjà ou, si la fusion alpha est utilisée, la couleur du pixel peut être remplacée par un mélange de la couleur du fragment et de la couleur existante du pixel, comme dans le cas de dessiner un objet translucide.

En général, un fragment peut être considéré comme les données nécessaires pour ombrer le pixel, plus les données nécessaires pour vérifier si le fragment survit et devient un pixel (profondeur, alpha, pochoir, ciseaux, identifiant de fenêtre, etc.).

De wikipedia

concept3d
la source
6

Un fragment est simplement la donnée donnée par la contribution des 3 sommets autour du pixel que vous ombragez.

Dans Vertex Shader, vous générez des données par sommet (couleur, coordonnées de texture, ...). Ensuite, dans Fragment Shader, vous obtenez pour chaque pixel une moyenne pondérée de ces valeurs, que vous utilisez ensuite pour créer la ou les couleurs finales du pixel.

XGouchet
la source
Le pixel et toutes les autres données sur les tampons invisibles, comme mentionné ci-dessus.
StarWeaver
4

De la même manière qu'un vertex shader agit sur des sommets, un fragment (ou pixel) shader agira uniquement sur des pixels.

Le canard communiste
la source
Désolé, mais ce n'est pas correct sans mentionner le mot "rastarisation" et les interpolations.
Notabene
Pire encore, il est dit pixels - qui sont distincts des fragments, en particulier lorsque les cibles de rendu AA multi-échantillonnage sont impliquées, la couverture à alpha, ou de nombreuses autres situations - je voterais si j'avais le représentant
jheriko
4

Qu'est-ce qu'un fragment dans un fragment shader?

La seule chose précise à dire est de définir les entrées et les sorties du fragment shader.

Comme cela a été fait / est trop large, je vais me concentrer sur le côté visuel intuitif de celui-ci.

Un fragment est la sortie du raster

Le wiki OpenGL dit:

Un fragment est un ensemble de valeurs produites par le rastériseur.

Cela a du sens puisque le fragment shader vient après le rasterizer qui produit son entrée.

Et voici la représentation visuelle de la sortie du rasterizer:

Source de l'image .

L'entrée du rasterizer est un triangle 3D et un point de vue, et la sortie est un ensemble de pixels pouvant apparaître à l'écran (s'ils ne sont pas bloqués par d'autres).

Chacun de ces petits carrés (qui sont codés comme un simple plixel) est un morceau du triangle, et fragment est juste un autre nom pour le morceau.

Ciro Santilli 改造 中心 六四 事件
la source
Downvoters, s'il vous plaît expliquer donc je peux apprendre et améliorer le contenu ;-)
Ciro Santilli新疆改造中心法轮功六四事件
L'information dans la réponse supérieure mélangée à vos explications visuelles serait la meilleure.
StarWeaver