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?
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?
la source
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.
la source
L'exemple sur le site Web des créateurs XNA utilise plusieurs passes pour calculer l'éclairage à partir de nombreuses (centaines) de sources lumineuses.
la source
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.
la source
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.
la source