Le rendu direct est le processus de calcul d'une valeur d'éclat pour un fragment de surface directement à partir de la géométrie d'entrée et des informations d'éclairage. Le rendu différé divise ce processus en deux étapes: tout d'abord, produire un tampon d'espace d'écran contenant les propriétés des matériaux (un tampon de géométrie ou un tampon G) construit en pixellisant la géométrie d'entrée, puis produire une valeur d'éclat pour chaque pixel en combinant le G- tampon avec informations d'éclairage.
Le rendu différé est souvent présenté comme une optimisation du rendu direct. Une explication est que l'éclairage est assez cher et si vous avez un surplomb, vous allumez des pixels qui ne seront jamais vus à l'écran, alors que si vous stockez les propriétés des matériaux dans un tampon G et que vous allumez ensuite, vous n'éclairez qu'un pixel qui apparaissent réellement à l'écran. Est-ce en fait un avantage de différé, étant donné que vous pouvez également effectuer une pré-passe en profondeur, puis effectuer une passe de rendu avant avec un test de profondeur défini sur D3D11_COMPARISON_EQUAL
ou GL_EQUAL
ou l'équivalent?
Le rendu différé a également le potentiel de mieux planifier sur le GPU. La division d'un grand warp / front d'onde en un front d'onde géométrique plus petit, puis des fronts d'onde d'éclairage plus petits améliorent plus tard l'occupation (plus de fronts d'onde en vol simultanément). Mais vous vous retrouvez également avec beaucoup plus de bande passante (en écrivant un grand nombre de canaux dans le G-buffer, puis en les relisant pendant l'éclairage). Évidemment, les détails ici dépendent beaucoup de votre GPU, mais quels sont les principes généraux?
Y a-t-il d'autres considérations pratiques sur les performances lors du choix entre le rendu direct et le rendu différé? (Supposons que nous pouvons utiliser des variations de chaque technique si nécessaire: c'est-à-dire que nous pouvons également comparer le carrelage en avant au carrelage différé.)