Je faisais une fois de plus joujou avec les shaders et SwiftUI. Tout a dérapé. Ce qui devait être une petite expérimentation dans la version 2 de Storma s'est terminé en package Swift.
Voici Sticker, un petit utilitaire qui vous permettra d’appliquer un effet carte Pokémon sur n’importe quelle vue. C’est open source et dispo dès à présent sur mon GitHub. N’hésitez pas à jouer avec, à me dire ce que vous en pensez et à lâcher votre meilleure star si le travail vous plaît !
Je suis encore loin d’être un expert des shaders. Leur code est en général peu digeste. C’est pour cette raison que je vous conseille de jeter un œil aux éditeurs visuels de Godot ou Unity si vous souhaitez vous lancer. Connecter des blocs entre eux aide à se familiariser avec leur fonctionnement.
Pour ma part, sur des shaders complexes, j’essaye de bien décomposer le problème en plusieurs parties bien distinctes et je m’aide de ChatGPT sur certains points. Attention toutefois, l’ami Chat a parfois du mal avec les concepts visuels. Pour les plus curieux, voici la recette.
1. Faire un dégradé de couleur
Créez une fonction de pseudo aléatoire basée sur la position du pixel.
Créez le dégradé en utilisant la fonction d’aléatoire tout en ajoutant une pointe de sinus et cosinus.
2. Grillade de losanges
Afin de donner plus de réalisme, créez une grille de carrés et appliquez-y une rotation à 45°.
3. Grain de sel
Afin de donner de la texture à votre effet, vous pouvez lui ajouter un effet de grain. Pour cela créez une fonction permettant de générer du bruit1.
4. Préparez à mixer
Créez une fonction permettant de calculer la luminosité d’une couleur.
Créez une fonction utilitaire permettant de mélanger deux couleurs en fonction de la luminosité de la couleur de base.
Créez une fonction permettant d’augmenter le contraste d’une couleur.
Vous êtes prêt pour la tambouille finale : le mélange.
5. Mixez
Mélangez le tout avec précaution en respectant l’ordre suivant :
Mélangez la couleur d’entrée avec votre dégradé de couleur en prenant en compte la luminosité de la couleur en entrée.
Mélangez le résultat de l’étape nº1 avec la grillade de losange en utilisant un mix augmentant le contraste.
Mélangez le résultat de l’étape n°2 avec votre grain de sel en utilisant encore une fois un mix augmentant le contraste.
Ce mélange vous donnera un effet plus prononcé sur les couleurs claires et plus discret sur les couleurs sombres pour encore plus de réalisme.
Comparaison des icônes avec et sans effet. Remarquez l'effet plus prononcé sur les couleurs claires.
Footnotes
Cette étape ne constitue aucun danger pour les oreilles attentives de vos voisins. ↩