Autocollants différés problème normal

11

J'ai travaillé sur un système de décalcomanie différé. Jusqu'à présent, j'ai terminé la partie de projection, ce qui signifie que je peux cliquer sur quelque chose dans la scène et qu'elle projettera correctement une décalcomanie sur la surface de l'objet.

Il y a quelques autres choses que je souhaite ajouter à ce système: écrêtage normal et décalcomanies mappées normales. L'écrêtage normal consiste à éliminer des fragments étirés sur un angle aigu. Vu ici . Un moyen de résoudre ce problème consiste à éliminer les fragments qui ont une grande différence entre la normale dans le G-Buffer et la normale de l'autocollant. Cela nécessiterait de lire la texture normale du tampon G.

Afin de faire un mappage normal de décalcomanie, j'ai besoin de mélanger la normale du décalque (à partir d'une carte normale) avec la normale du tampon G. Le nécessite d'écrire sur la texture normale du tampon G.

J'espère qu'il est clair que pour prendre en charge ces deux fonctionnalités, je dois lire et écrire sur la texture normale dans la même passe de shader. Malheureusement, il s'agit d'un comportement non défini, je me demande donc s'il existe un autre moyen de mettre en œuvre ces fonctionnalités.

Ian
la source

Réponses:

1

Quel système de rendu utilisez-vous? Les informations suivantes doivent être valables pour tous les systèmes de rendu, mais dans les versions DX11 ou OpenGL ultérieures, il pourrait y avoir une meilleure solution en utilisant des drones.

-

Vous devrez copier le tampon normal avant chaque passage. Tant que vous savez que les décalcomanies ne modifient pas les mêmes fragments d'espace d'écran, vous n'avez pas à mettre à jour la copie.

Vous pouvez également rendre tous vos décalcomanies dans des tampons séparés et ne faire qu'un seul mélange dans votre tampon normal en utilisant une seule copie de tampon normal. Cela serait beaucoup mieux adapté à la quantité de décalcomanies dont vous disposez.

Tant que vous n'écrivez pas le tampon normal, par exemple, effectuez uniquement un écrêtage normal, comme vous l'appelez, vous pouvez simplement échantillonner le tampon normal d'origine, mais vous ne pouvez pas le lier comme cible de rendu.

Dans DX9, j'ai trouvé que la lecture et l'écriture dans la même texture aboutissent à la sortie attendue tant que vous n'utilisez que le filtrage par point le plus proche et que vous ne lisez jamais un pixel différent de celui sur lequel vous écrivez actuellement, MAIS! comme il s'agit d'un comportement indéfini, des pilotes et des cartes graphiques peuvent ne pas se comporter de cette façon. DX10 vous empêchera de le faire en dissociant les textures actuellement liées en tant que cibles de rendu.

Archy
la source