Un bon exemple d'effet multi-passes?


9

Dans XNA (et Direct3D en général AFAIK), plutôt que de créer des vertex et des shaders de fragments individuels, vous regroupez potentiellement de nombreux shaders associés dans des `` Effets ''. Lorsque vous venez d'utiliser un effet, vous sélectionnez une «technique» (ou parcourez chacun d'entre eux), puis chaque «technique» a un certain nombre de «passes». Vous parcourez chaque passage, il sélectionne le vertex et le fragment shader pertinents et vous dessinez la géométrie.

Ce que je suis curieux de savoir, c'est pour quoi vous auriez besoin de plusieurs passes? Je comprends qu'au début de la 3D, vous n'aviez qu'une seule unité de texture, puis vous en aviez 2 et cela n'était souvent pas suffisant si vous vouliez également faire une cartographie de l'environnement. Mais sur les appareils modernes, même dans la classe mobile, vous pouvez échantillonner 8 textures ou plus et faire autant de calculs d'éclairage que vous le souhaitez dans un seul shader.

Les plus expérimentés ici peuvent-ils offrir des exemples pratiques de cas où le rendu multi-passes est encore nécessaire, ou s'agit-il simplement d'une ingénierie excessive de la part de XNA / Direct3d?

Réponses:


5

Chaque fois que vous effectuez des effets de post-traitement sur un ensemble de tampons capturés serait un temps raisonnable pour utiliser un effet multi-passes, c'est-à-dire un contour, un flou de mouvement, SSAO, une floraison. L'idée étant que la première passe serait l'endroit où vous rendriez tout dans les tampons appropriés, et chaque passe suivante gérerait chaque effet de post-traitement.

Comme Ranieri l'a mentionné à propos de l'exemple XNACC, ils utilisent plusieurs passes pour restituer un grand nombre de lumières. Bien que dans cet exemple, ils exécutent la même passe, une seule fois pour chaque lumière.

Gardez à l'esprit que Shader Model 2 et avant ne peuvent pas gérer autant d'instructions que Shader Model 3 ou 4 dans chaque shader, encore une autre raison de diviser un effet en plusieurs passes - pour prendre en charge le matériel plus ancien.


Pouvez-vous donner un exemple où un objet XNA Effect dans lequel vous effectuez une boucle via EffectPasses a plusieurs passes au lieu d'utiliser différents effets et pourquoi?
Jason Goemaat

4

Comme indiqué dans les autres réponses, le rendu multi-passes (dessiner un seul maillage plusieurs fois avec différents shaders / paramètres), comme suggéré dans d'autres réponses, est définitivement encore utilisé, principalement pour l'éclairage et les effets spéciaux

Les passes d'effet D3DX pourraient être utilisées pour ce genre de chose. Mais il pourrait également être implémenté avec plus d'un shader / effet.

L'intention initiale des passes était d'aider à l'implémentation de shaders complexes sur du matériel bas de gamme (pré-shader-2.0), où les restrictions sur le nombre d'étapes de texture et les instructions de shader par passe étaient assez limitantes.

Dans l'exemple de l'éclairage à passages multiples, y a-t-il des gains de performances importants à réaliser en utilisant des passes au lieu de changer d'effets?


3

En plus de l'éclairage que tout le monde a mentionné, le flou est une autre utilisation importante . L'horizontale et la verticale se font en passes séparées (donc pour obtenir un flou de 9x9, seuls 18 pixels doivent être échantillonnés pour chaque pixel de sortie au lieu de 81). Ceci est utilisé pour la floraison / HDR, la profondeur de champ, la lueur, etc.


Peut-être, mais je pense que la plupart des implémentations de flou utiliseraient le même shader pour les passes horizontales et verticales - et passeraient simplement les décalages d'échantillonnage (sous forme de constantes de shader ou de données par sommet)?
bluescrn

1
@bluescrn - Bloom est généralement considéré comme un effet à 4 passes: un pour extraire les zones lumineuses et la réduction d'échelle, un pour le flou horizontal, un pour le flou vertical, un pour combiner / mettre à l'échelle l'image floue avec l'original. Bien que les paramètres du shader puissent être utilisés pour les contrôler, une ramification serait nécessaire pour différencier tout sauf les deux passes de flou
Robert Fraser


1

Comme l'a dit Ranieri, vous pouvez utiliser plusieurs passes pour plusieurs lumières, par exemple avec un seul matériau, vous pouvez avoir une passe `` ambiante '', une passe additive par lumière ponctuelle, une autre passe additive par projecteur et ensuite une passe décalcomanie pour se multiplier dans le diffus texture (j'ai utilisé une configuration comme celle-ci dans le passé et c'est la façon la plus flexible de gérer un ombrage d'éclairage que j'ai vu sans entrer dans l'ombrage différé).

De plus, je crois que la plupart des shaders de fourrure utilisent plusieurs passes.


0

Les cartes d'ombres pour créer des ombres peuvent être effectuées en utilisant plusieurs passes. Juste une note, certains effets multi-passes peuvent être effectués en une seule passe si la carte vidéo prend en charge le même nombre d'unités de texture que le nombre de passes. Donc, si vous n'avez pas assez d'unités de texture, vous devrez utiliser plusieurs passes. Une plate-forme matérielle fixe (comme les consoles de jeu), vous pouvez probablement coder simplement en utilisant la multi-texturation car vous connaissez le nombre d'unités de texture. Mais pour les PC, il existe un nombre infini de configurations matérielles. Si vous souhaitez avoir la portée la plus large auprès des consommateurs, vous souhaiterez probablement diviser certains de vos effets les plus complexes en plusieurs passes afin que les utilisateurs disposant d'un matériel de qualité inférieure (c'est-à-dire n'ayant pas autant d'unités de texture sur le GPU) puissent toujours voir l'effet. Brièvement, Les cartes d'ombre sont créées en créant d'abord une carte d'ombre de la scène du point de vue de la lumière en un seul passage. Ensuite, la texture de la carte d'ombre est mélangée à la scène avec les autres textures de la scène.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.