Output-Merger Étape

L’étape de fusion de sortie (OM) génère la couleur finale des pixels rendus à l’aide d’une combinaison d’état de pipeline, des données de pixel générées par les nuanceurs de pixels, du contenu des cibles de rendu et du contenu des mémoires tampons de profondeur/gabarit. L’étape om est l’étape finale pour déterminer quels pixels sont visibles (avec des tests de gabarit en profondeur) et mélanger les couleurs des pixels finaux.

Différences entre Direct3D 9 et Direct3D 10 :

  • Direct3D 9 implémente le test alpha (à l’aide de l’état de test alpha) pour contrôler si un pixel est écrit dans une cible de rendu de sortie.
  • Direct3D 10 et versions ultérieures n’implémente pas de test alpha (ou d’état de test alpha). Cela peut être contrôlé à l’aide d’un nuanceur de pixels ou d’une fonctionnalité de profondeur/gabarit.

Vue d’ensemble des tests Depth-Stencil

Une mémoire tampon de gabarit de profondeur, qui est créée en tant que ressource de texture, peut contenir à la fois 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 l’appareil photo, et les données de gabarit sont utilisées pour masquer les pixels qui peuvent être mis à jour. En fin de compte, les données de valeurs de profondeur et de gabarit sont utilisées par l’étape sortie-fusion pour déterminer si un pixel doit être dessiné ou non. Le diagramme suivant montre conceptuellement comment le test de gabarit en profondeur est effectué.

diagramme du fonctionnement du test de gabarit en profondeur

Pour configurer le test de gabarit en profondeur, consultez Configuration des fonctionnalités de Depth-Stencil. Un objet de gabarit de profondeur encapsule l’état du gabarit de profondeur. Une application peut spécifier l’état du gabarit de profondeur, ou la phase om utilise des valeurs par défaut. Les opérations de fusion sont effectuées par pixel si le multi-échantillonnage est désactivé. Si le multi-échantillonnage est activé, le mélange se produit sur une base par échantillon multiple.

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, parfois appelé z-buffering.

Une fois que les valeurs de profondeur atteignent l’étape sortie-fusion (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 le serrage, la valeur de profondeur est comparée (à l’aide de DepthFunc) à la valeur de la 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 dans le format de mémoire tampon de profondeur ou s’il n’y a pas de limite de mémoire tampon de profondeur, le test de gabarit réussit toujours. Sinon, les fonctionnalités sont inchangées par rapport à Direct3D 9.

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) à l’affichage profondeur/gabarit. Cela ne signifie pas que la taille de la ressource doit correspondre, mais que la taille de la vue doit correspondre.

Pour plus d’informations sur le test de gabarit en profondeur, consultez le tutoriel 14.

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 de la fusion des données

D’un point de vue conceptuel, vous pouvez visualiser cet organigramme implémenté deux fois dans l’étape sortie-fusion : le premier mélange des données RVB, tandis qu’en parallèle, un second fusionne des données alpha. Pour savoir comment utiliser l’API pour créer et définir l’état de fusion, consultez Configuration des fonctionnalités de fusion.

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, de sorte que le même mélange est appliqué à tous les RenderTargets avec la fusion activée. Les valeurs de fusion (y compris BlendFactor) sont toujours limitées à la plage du format cible de rendu avant la fusion. Le serrage est effectué 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 bridés afin que les opérations de fusion sur ces formats puissent être effectuées avec au moins la même précision/plage que le format de sortie. Les zéros signés et naN sont propagés pour tous les cas (y compris les pondérations de mélange de 0,0).

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

Différences entre Direct3D 9 et Direct3D 10 :

  • Dans Direct3D 9, le mélange de fonctions fixes peut être activé indépendamment pour chaque cible de rendu.
  • Dans Direct3D 10 et versions ultérieures, il existe une description d’état mixte ; par conséquent, une valeur de fusion peut être définie pour toutes les cibles de rendu.

fusion de couleurs Dual-Source

Cette fonctionnalité permet à l’étape sortie-fusion d’utiliser simultanément les deux sorties de nuanceur de pixels (o0 et o1) comme entrées pour une opération de fusion avec la cible de rendu unique à l’emplacement 0. Les opérations de fusion valides incluent : ajouter, soustraire et revsubtract. Les options de fusion valides pour SrcBlend, DestBlend, SrcBlendAlpha ou DestBlendAlpha sont les suivantes : D3D11_BLEND_SRC1_COLOR, D3D11_BLEND_INV_SRC1_COLOR, D3D11_BLEND_SRC1_ALPHA, D3D11_BLEND_INV_SRC1_ALPHA. L’équation de fusion et le masque d’écriture de sortie spécifient les composants que 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 lors du mélange de couleurs double source.

Pour obtenir des exemples, consultez Fusion des sorties du nuanceur de pixels.

Vue d’ensemble de Plusieurs RenderTargets

Un nuanceur de pixels peut être utilisé pour effectuer un rendu vers au moins 8 cibles de rendu distinctes, qui doivent toutes être du même type (tampon, Texture1D, Texture1DArray, etc.). En outre, toutes les cibles de rendu doivent avoir la même taille dans toutes les dimensions (largeur, hauteur, profondeur, taille de 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 ressources ne peut pas être liée à plusieurs emplacements de cible de rendu simultanément. Une vue peut être réutilisée tant que les ressources ne sont pas utilisées simultanément.

Vue d’ensemble du masque Output-Write

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

Vue d’ensemble de l’exemple de masque

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

Contenu de cette section

Rubrique Description
Configuration des fonctionnalités de Depth-Stencil
Cette section décrit les étapes de configuration de la mémoire tampon de gabarit de profondeur et de l’état du gabarit de profondeur pour l’étape de fusion de sortie.
Configuration des fonctionnalités de fusion
Les opérations de fusion sont effectuées sur chaque sortie de nuanceur de pixels (valeur RVBA) avant que la valeur de sortie ne soit écrite sur une cible de rendu. Si le multi-échantillonnage est activé, le mélange est effectué sur chaque échantillon multiple ; sinon, la fusion est effectuée sur chaque pixel.
Biais de profondeur
Les polygones coplanaires dans l’espace 3D peuvent apparaître comme s’ils ne sont pas coplanaires en ajoutant un biais z (ou biais de profondeur) à chacun d’eux.

Pipeline graphique

Étapes de pipeline (Direct3D 10)