Implémentation d’un effet d’autocollant foil
(4rknova.com)- Code source de shader implémentant un effet d’autocollant foil, avec une simulation réaliste des reflets et des scintillements de surface
- Réglage fin possible de diverses caractéristiques comme la métallisation, la rugosité et les reflets irisés
- L’élément clé est le rendu de l’effet de micro-particules (flakes) sur la surface foil et des couleurs irisées qui changent selon l’angle
- Exploite diverses techniques de graphisme à base physique comme l’échantillonnage de carte d’environnement, l’effet de Fresnel, les ombres AO et l’alpha cutoff
- Une implémentation avancée de shader pouvant être utilisée pour un rendu d’autocollants foil haute qualité dans des environnements 2D/3D réels
Vue d’ensemble
Ce contenu présente un code de shader GLSL permettant de reproduire un effet visuel scintillant de type autocollant foil. L’objectif est de créer une texture visuelle de haute qualité en combinant métallisation, iridescence, effet de micro-particules de surface et reflets d’environnement. Il génère un effet foil réaliste à l’aide de textures 2D, de cartes d’environnement et de divers paramètres de réglage.
Variables et constantes principales
- L’effet peut être ajusté via diverses variables uniform
- Ex. :
uFlakeSize(taille des flakes),uRoughness(rugosité),uMetalness(métallisation),uIridescence(iridescence), etc.
- Ex. :
- Prise en charge des textures, des cartes d’environnement et des informations du repère en coordonnées monde
Structure des fonctions principales
Fonction de hash (hash)
- Utilisée pour générer des valeurs aléatoires nécessaires à l’effet de micro-particules (flakes)
Conversion des coordonnées de carte d’environnement (dirToEquirectUv), échantillonnage de carte d’environnement (sampleEnvRough)
- Permet un échantillonnage de la carte d’environnement en fonction de la direction
- Applique le niveau de mip approprié selon la rugosité (
lod)
Effet irisé (iridescenceColor)
- Génère dynamiquement la couleur selon l’angle et l’épaisseur de surface
- La couleur change selon l’angle de vue, comme sur une véritable surface foil
Luminance (luminance)
- Calcule les informations de luminosité de la couleur pour les réinjecter dans le post-traitement, entre autres
Logique principale du shader
Alpha cutoff et traitement face avant / face arrière
- La survie du pixel est déterminée par la valeur alpha de la texture de base
- Selon qu’il s’agit de la face avant ou arrière, ajuste l’intensité de l’AO, le traitement de pelage (
peeled) et la couleur
Gestion des reflets, des flakes, de l’iridescence et de la métallisation
- Calcule la normale de surface (
normal), le vecteur de vue, le vecteur de réflexion et les reflets d’environnement - Pour l’effet flakes, applique un hash par position et un décalage angulaire aléatoire
- Contrôle fin de la luminosité, du masquage, du boost, etc. des flakes
- Utilise
perturbedNormalpour refléter la perturbation de surface des flakes - Mélange les flakes et la couleur environnante avec une couleur irisée
Combinaison de la carte d’environnement et calcul de la couleur finale
- Fait varier dynamiquement la rugosité selon l’intensité des flakes
- Renforce le réalisme grâce au masquage métal/normal/réflexion et au calcul de Fresnel
- Produit la couleur finale en mélangeant les composantes diffuse (diffusion) et spec (réflexion spéculaire)
- Sort la couleur finale avec l’alpha de base
Points à retenir
Ce shader est bien adapté à la reproduction réaliste des effets visuels complexes propres aux matériaux foil (forte réflexion, micro-particules, iridescence, etc.). Les nombreux paramètres permettent un réglage précis de l’effet, offrant une personnalisation souple et un rendu d’autocollants foil très visible. Il présente de grands avantages pour des usages variés en 3D, sur le web 2D, dans les jeux ou les interfaces interactives.
1 commentaires
Commentaires sur Hacker News
Quand je développais des jeux mobiles il y a quelque temps, j’avais ajouté sur de jolies cartes un effet où la « brillance » changeait selon l’inclinaison du téléphone, comme s’il s’agissait d’un véritable objet 3D. Je trouve fascinant qu’iOS prenne désormais en charge ce type d’effet de sticker nativement
Un site de marketplace de cartes Magic applique un effet CSS simple aux cartes foil. Mais je me demande toujours comment reproduire de façon plus réaliste les différents effets foil que l’on voit sur les vraies cartes Magic, sans dégrader les performances et en restant adapté à une UX CRUD en Svelte
La technologie des shaders est vraiment fascinante. On peut essayer soi-même différents shaders sur le site Shadertoy
Tim Oliver a déjà fait une excellente présentation sur son expérience de création de l’effet holographique foil appliqué au « golden ticket » de Threads. La vidéo peut être vue ici
Je trouve cet effet vraiment superbe et visuellement impressionnant, mais en réalité je n’aime pas tant que ça l’effet foil scintillant en lui-même. On le voit aussi sur des stickers ou des cartes, mais je trouve plus élégant quand une brillance métallique douce n’est utilisée que comme accent. J’ai l’impression d’être seul à penser ça, mais vu la popularité de cet effet, cela reste probablement un goût minoritaire
C’est vraiment un très bel effet. Cela me rappelle le shader de réseau de diffraction qu’Alan Zucconi avait créé pour le rendu d’un CD. On peut en lire plus ici
Le résultat est encore plus impressionnant que je ne l’attendais. C’était amusant d’ajuster les paramètres tout en observant l’image réfléchie de toute la pièce
Sur iOS, il existe un effet de sticker « shiny » qui réagit quand on incline le téléphone. La première fois que je l’ai vu, j’ai été vraiment impressionné
C’est un peu hors sujet, mais en lisant ce billet, je me suis dit que l’IA pourrait à l’avenir apprendre aussi ce genre de techniques d’implémentation. D’un autre côté, je ressens une forme de libération à l’idée que l’IA puisse devenir le bookmark ultime, au point qu’on n’ait plus besoin d’accumuler des signets. Mais il y a aussi quelque chose d’un peu triste et amer dans l’idée que ce genre de superbes posts ne soit peut-être pas vraiment reconnu par l’IA
Je suis vraiment heureux de pouvoir tomber sur ce genre de billets intéressants et inattendus