2010-08-09 18 views
1

J'ai réfléchi à la façon d'implémenter un gestionnaire PostProcessing dans mon moteur (Vanquish). Je me bats pour comprendre comment fonctionne une technique de post-traitement. J'ai lu et visualisé l'exemple de post-traitement sur le webiste creators.xna.com, mais cela semble rendre le modèle en appliquant l'effet Post-traitement.

Implémentation d'un gestionnaire PostProcessing

Je peux ajouter cette fonctionnalité pour les modèles statiques, mais quand il s'agit de redessiner les modèles dépouillés, je suis alors confus car ils ont déjà leurs propres techniques à leurs effets. Est-ce que quelqu'un peut m'aider à redresser mes pensées en me dirigeant dans la bonne direction?

Répondre

1

Généralement, le post-traitement fonctionne sur tout l'écran. C'est assez simple, vraiment.

Ce que vous faites est de définir une cible de rendu sur l'appareil (je suppose que vous pouvez comprendre comment créer une cible de rendu de l'échantillon):

GraphicsDevice.SetRenderTarget(renderTarget); 

A partir de ce point tout ce que vous restituez sera rendu à cette cible de rendu. Lorsque vous avez terminé, vous pouvez configurer l'appareil de retour à dessin au tampon de retour:

GraphicsDevice.SetRenderTarget(null); 

Et enfin, vous pouvez dessiner avec votre cible de rendu comme si elle était une texture (this is new in XNA 4.0, XNA 3.1 vous deviez appeler GetTexture dessus).

Donc, pour faire un effet post-traitement:

  • effectue le rendu de la scène pour un rendu cible
  • Revenez au tampon arrière
  • Render votre rendu plein écran cible (en utilisant SpriteBatch fera) avec un pixel shader qui appliquera votre effet de post-traitement.

Vous semblez vouloir faire cela par modèle? Ce qui semble un peu étrange mais certianly possible. Assurez-vous simplement que votre cible de rendu dispose d'un canal alpha transparent pour commencer, puis dessinez-la avec l'alpha-blending. Ou ne voulez-vous pas dire du tout du post-traitement? Voulez-vous réellement changer le pixel shader avec lequel le modèle est dessiné, tout en gardant le vertex du modèle skinné?

+0

C'est une excellente information. Je ne veux pas le faire sur une base par modèle, c'est exactement ce que j'essaie de faire: o) –