Partager via


Étape Output Merger (OM)

L’étape Fusion de sortie (OM) combine différents types de données de sortie (valeurs du nuanceur de pixels, informations de profondeur et de gabarit) avec le contenu des mémoires tampons de cible de rendu et de profondeur/gabarit pour générer le résultat final du pipeline.

Objectif et utilisations

L’étape de fusion de sortie (OM) est l’étape finale pour déterminer quels pixels sont visibles (avec test de profondeur de gabarit) et fusionner les couleurs finales des pixels.

L’étape OM génère la couleur de pixel rendue finale à l’aide d’une combinaison des éléments suivants :

  • État du pipeline
  • Données de pixel générées par les nuanceurs de pixels
  • Contenu des cibles de rendu
  • Contenu des mémoires tampons de profondeur/gabarit.

Vue d’ensemble de la fusion

La fusion combine une ou plusieurs valeurs de pixels pour créer une couleur de pixel finale. Le diagramme suivant montre le processus impliqué dans la fusion de données de pixels.

diagramme du fonctionnement des données de fusion

Conceptuellement, vous pouvez visualiser ce graphique de flux implémenté deux fois dans l’étape fusion de sortie : le premier fusionne les données RVB, tandis qu’en parallèle, un deuxième mélange les données alpha. Pour savoir comment utiliser l’API pour créer et définir l’état de fusion, consultez Configuration de la fonctionnalité Blending.

Le mélange de fonction fixe peut être activé indépendamment pour chaque cible de rendu. Toutefois, il n’existe qu’un seul ensemble de contrôles de fusion, afin que le même mélange soit appliqué à tous les RenderTargets avec fusion activé. Les valeurs blend (y compris BlendFactor) sont toujours limitées à la plage du format de la cible de rendu avant la fusion. La pince est effectuée par cible de rendu, en respectant le type de cible de rendu. La seule exception concerne les formats float16, float11 ou float10 qui ne sont pas limités afin que les opérations de fusion sur ces formats puissent être effectuées avec au moins une précision/plage égale comme format de sortie. Les zéros signés et naN sont propagés pour tous les cas (y compris 0,0 poids de mélange).

Lorsque vous utilisez des cibles de rendu sRVB, le runtime convertit la couleur de la cible de rendu en espace linéaire avant d’effectuer la fusion. Le runtime convertit la valeur fusionnée finale en espace sRGB avant d’enregistrer la valeur dans la cible de rendu.

Fusion de couleurs double source

Cette fonctionnalité permet à l’étape de fusion de sortie d’utiliser simultanément les sorties du nuanceur de pixels (o0 et o1) comme entrées d’une opération de fusion avec la cible de rendu unique à l’emplacement 0. Les opérations de fusion valides sont les suivantes : ajouter, soustraire et revsubtract. L’équation de fusion et le masque d’écriture de sortie spécifient quels composants le nuanceur de pixels sort. Les composants supplémentaires sont ignorés.

L’écriture dans d’autres sorties de nuanceur de pixels (o2, o3, etc.) n’est pas définie ; vous ne pouvez pas écrire dans une cible de rendu si elle n’est pas liée à l’emplacement 0. L’écriture d’oDepth est valide pendant le mélange de couleurs double source.

Vue d’ensemble des tests de profondeur

Une mémoire tampon de profondeur de gabarit, créée en tant que ressource de texture, peut contenir des données de profondeur et des données de gabarit. Les données de profondeur sont utilisées pour déterminer les pixels les plus proches de la caméra, et les données de gabarit sont utilisées pour masquer les pixels pouvant être mis à jour. En fin de compte, les données de profondeur et de gabarit sont utilisées par l’étape de fusion de sortie pour déterminer si un pixel doit être dessiné ou non. Le diagramme suivant montre conceptuellement comment les tests de profondeur-gabarit sont effectués.

diagramme du fonctionnement des tests de profondeur-gabarit

Pour configurer les tests de profondeur de gabarit, consultez Configuration des fonctionnalités de profondeur-gabarit. Un objet de gabarit de profondeur encapsule l’état de profondeur-gabarit. Une application peut spécifier l’état du gabarit de profondeur, ou l’étape OM utilise des valeurs par défaut. Les opérations de fusion sont effectuées par pixel si l’échantillonnage multiple est désactivé. Si l’échantillonnage multiple est activé, la fusion se produit sur une base par multisample.

Le processus d’utilisation de la mémoire tampon de profondeur pour déterminer quel pixel doit être dessiné est appelé mise en mémoire tampon de profondeur, également parfois appelé mise en mémoire tampon z.

Une fois que les valeurs de profondeur atteignent l’étape de fusion de sortie (qu’elles proviennent de l’interpolation ou d’un nuanceur de pixels), elles sont toujours limitées : z = min(Viewport.MaxDepth,max(Viewport.MinDepth,z)) en fonction du format/précision de la mémoire tampon de profondeur, à l’aide de règles à virgule flottante. Après la fixation, la valeur de profondeur est comparée (à l’aide de DepthFunc) par rapport à la valeur de mémoire tampon de profondeur existante. Si aucune mémoire tampon de profondeur n’est liée, le test de profondeur réussit toujours.

S’il n’existe aucun composant de gabarit au format de mémoire tampon de profondeur ou qu’aucune limite de mémoire tampon de profondeur n’est liée, le test de gabarit réussit toujours.

Une seule mémoire tampon de profondeur/gabarit peut être active à la fois ; toute vue de ressource liée doit correspondre (même taille et dimensions) à la vue profondeur/gabarit. Cela ne signifie pas que la taille de ressource doit correspondre, simplement que la taille de la vue doit correspondre.

Vue d’ensemble de l’exemple de masque

Un exemple de masque est un masque de couverture multisample 32 bits qui détermine les exemples mis à jour dans les cibles de rendu actives. Un seul exemple de masque est autorisé. Le mappage de bits dans un exemple de masque aux exemples d’une ressource est défini par un utilisateur. Pour le rendu n-sample, les premiers n bits (à partir de l’objet LSB) de l’exemple de masque sont utilisés (32 bits, le nombre maximal de bits).

Entrée

L’étape De fusion de sortie (OM) génère la couleur de pixel rendue finale à l’aide d’une combinaison des éléments suivants :

  • État du pipeline
  • Données de pixel générées par les nuanceurs de pixels
  • Contenu des cibles de rendu
  • Contenu des mémoires tampons de profondeur/gabarit.

Sortie

Vue d’ensemble du masque d’écriture de sortie

Utilisez un masque d’écriture de sortie pour contrôler (par composant) les données pouvant être écrites dans une cible de rendu.

Vue d’ensemble de plusieurs cibles de rendu

Un nuanceur de pixels peut être utilisé pour effectuer un rendu sur au moins 8 cibles de rendu distinctes, qui doivent tous être du même type (tampon, Texture1D, Texture1D, Texture1DArray, etc.). En outre, toutes les cibles de rendu doivent avoir la même taille dans toutes les dimensions (largeur, hauteur, profondeur, taille du tableau, nombre d’échantillons). Chaque cible de rendu peut avoir un format de données différent.

Vous pouvez utiliser n’importe quelle combinaison d’emplacements de cibles de rendu (jusqu’à 8). Toutefois, une vue de ressource ne peut pas être liée simultanément à plusieurs emplacements de cible de rendu. Une vue peut être réutilisée tant que les ressources ne sont pas utilisées simultanément.

Dans cette section

Sujet Description

Configuration de la fonctionnalité de profondeur-gabarit

Cette section décrit les étapes de configuration de la mémoire tampon du gabarit de profondeur et de l’état du gabarit de profondeur pour l’étape de fusion de sortie.

 

Pipeline graphique