Archive pour 'Technique'
A propos de Shadow Maps
Posté le 25 novembre 2008, dans Technique.
Je devais corriger un bug d’éclairage avant d’attaquer le système de particules, et pour une fois je n’ai pas passé la nuit à débugger des shaders !
Le problème était que certaines zones étaient illuminées alors qu’elles étaient hors champs, le souci venait d’une mauvaise lecture du ShadowMap par le texture sampler, qui était en mode AddressU = clamp. Ce mode utilise la couleur du bord de la texture pour les coordonnées qui sont au delà des limites de la texture, causant mes problèmes d’éclairage. J’ai pu découvrir en fouillant sur le net un mode de sampling très pratique pour ces utilisations : AddressU = border (à utiliser conjointement avec BorderColor = 0x000000;) qui utilise une couleur donnée pour les coordonnées à l’extérieur de la texture.
La projection des spots est maintenant correcte, prochaine étape : les particules.
Optimisation pour le Multi Render Target (MRT)
Au cours du développement j’ai pu rencontrer un problème de fuite mémoire assez conséquent, il était causé par un nombre croissant de Surface qui n’étaient pas libérés.
Le souci venait des Device.GetRenderTarget(); que j’utilisais à chaque changement de RenderTarget pour récupérer le BackBuffer, ce qui créait un objet Surface à chaque fois, sans le libérer.
Il suffisait en fait de garder une référence vers le BackBuffer tout au long de l’exécution et de l’utiliser pour rétablir la bonne RenderTarget avant l’affichage sur écran.