Comment mettriez-vous en œuvre l'effet de l'aberration chromatique avec des shaders?
Le rendu du monde avec des distances de mise au point différentes pour chaque couleur résoudrait-il le problème (peut-être avec l'utilisation d'une seule passe de rendu en profondeur)?
Réponses:
L'aberration chromatique est causée lorsqu'un objectif ne peut pas focaliser chaque couleur sur le même point focal. Un moyen simple de simuler cet effet et de le rendre en tant que post-traitement plein écran rapide consiste à appliquer un décalage à chaque canal de couleur dans un shader de fragment.
En utilisant un décalage différent pour chaque canal, vous pouvez obtenir un fac-similé raisonnable de l'effet souhaité. Un exemple de cette technique peut être trouvé ici ; le fragment shader ressemblerait à ceci:
Ce simple hack ne prend pas vraiment en compte le fait que l'aberration chromatique est un effet d'objectif, cependant: pour obtenir une meilleure simulation, vous voudriez réellement rendre quelque chose pour agir comme l'objectif. Ceci est similaire à la façon dont vous effectuez le rendu d'objets réfléchissants ou réfringents. Par conséquent, un shader de réflexion / réfraction typique peut être la base de la mise en œuvre de l'aberration chromatique.
Normalement, vous devriez calculer un seul vecteur de réfraction basé sur un vecteur de vue et certains défini indice de réfraction , en utilisant de GLSL réfractent fonction dans un vertex shader:
Ensuite, vous utiliseriez ce vecteur dans un shader de fragment pour effectuer une recherche de texture de cube (dans une carte d'environnement). En règle générale, cela se fait parallèlement à un effet de réflexion, et combiné utilisé un terme de Fresnel calculé .
Pour simuler l'aberration chromatique, vous pouvez alors effectuer trois calculs de vecteur de réfraction différents , chacun légèrement décalé via différents indices de réfraction, dans le vertex shader:
Ces trois vecteurs différents peuvent être utilisés pour effectuer trois recherches de carte de cube différentes, qui peuvent être mélangées de la même manière que les couleurs ont été mélangées dans l'exemple simple:
Pour plus de détails, l' OpenGL Orange Book est disponible et contient un exemple des effets de réflexion et de réfraction de base, ainsi qu'un exemple de l'effet d'aberration chromatique.
la source