2017-05-01 4 views
1

J'essaie de créer une transition simple entre deux couleurs. Donc, un rendu d'un quad avec les couleurs du bord supérieur étant # 2c2b35 et la couleur du bas étant # 1a191f. Quand je le mets à travers un simple pixel shader qui applique juste des couleurs aux sommets et les interpole, j'obtiens un effet de bande de couleur et je me demande s'il y a une option pour éliminer cet effet sans certaines techniques avancées de tramage.Direct3D11 Pixel Shader Interpolation

Je joins un a picture d'un rendu où la partie gauche est rendue dans mon application et la partie à droite est rendue dans Photoshop avec l'option "Dithered" cochée.

Merci d'avance.

Répondre

1

La bande est un problème auquel chaque moteur de rendu doit faire face à un moment donné. Avant de commencer à implémenter le dithering, vous devez d'abord confirmer que vous suivez un pipeline srgb approprié. (https://en.wikipedia.org/wiki/SRGB)

À corriger SRGB: Les surfaces de mappage et de rendu dans RGBX8 doivent contenir des valeurs SRGB. Le plus simple est de créer une vue cible de rendu avec un format XXXX_UNORM_SRGB. La texture doit utiliser une vue au format UNORM_SRGB lorsque cela est approprié (carte albédo) et UNORM si elle n'est pas appropriée (carte normale) Le calcul du shader comme l'éclairage doit être dans l'espace linéaire. La texture et la cible de rendu lorsque vous utilisez le bon format effectueront la conversion pour vous en lecture et en écriture, mais pour constante, vous devez le faire manuellement. Par exemple dans # 2c2b35: 0x2c est dans srgb 44 (0.1725) mais en valeur linéaire est 0.025

Pour faire un dégradé, vous devez le faire dans un espace linéaire dans le shader et laisser la cible de rendu le convertir en srgb sur écrire.