5 puntos por GN⁺ 2025-09-02 | 1 comentarios | Compartir por WhatsApp
  • Código fuente de shader para implementar el efecto de sticker foil, simulando de forma realista los reflejos y destellos de la superficie
  • Permite ajustar con precisión varias propiedades como metallicidad, rugosidad y reflejo iridiscente
  • El punto clave es la representación del efecto de micropartículas (flakes) de la superficie foil y los colores iridiscentes que cambian según el ángulo
  • Aprovecha diversas técnicas de gráficos basados en física como muestreo de environment map, efecto Fresnel, sombras AO y alpha cutoff
  • Es una implementación avanzada de shader que puede usarse para renderizado de stickers foil de alta calidad en entornos reales 2D/3D

Resumen general

Este contenido presenta código GLSL de shader para implementar un efecto visual brillante similar al de un sticker foil. Su objetivo es crear una textura visual de alta calidad combinando metallicidad, iridiscencia, efecto de micropartículas en la superficie y reflejos del entorno. Genera un efecto foil realista usando texturas 2D, environment maps y varios parámetros de ajuste.

Variables y constantes principales

  • El efecto puede ajustarse con varias variables uniform
    • Ejemplo: uFlakeSize (tamaño de flake), uRoughness (rugosidad), uMetalness (metallicidad), uIridescence (iridiscencia), etc.
  • Soporta texturas, environment maps e información del sistema de coordenadas del mundo

Estructura principal de funciones

Función hash

  • Se usa para generar valores aleatorios necesarios para el efecto de micropartículas (flakes)

Conversión de coordenadas del environment map (dirToEquirectUv) y muestreo del environment map (sampleEnvRough)

  • Permite muestreo según la dirección desde el environment map
  • Aplica el mip level adecuado según la rugosidad (lod)

Efecto iridiscente (iridescenceColor)

  • Genera colores dinámicamente según el ángulo y el grosor de la superficie
  • El color cambia según el ángulo de visión, como en una superficie foil real

Luminancia (luminance)

  • Calcula la información de brillo del color para reflejarla en posprocesado y otros usos

Lógica principal del shader

Alpha cutoff y procesamiento de cara frontal/posterior

  • Determina si el píxel sobrevive según el valor alpha de la textura base
  • Según si es cara frontal o posterior, ajusta la intensidad de AO, el tratamiento de peeled y el color

Procesamiento de reflejos, flakes, iridiscencia y metallicidad

  • Calcula la normal de la superficie (normal), el vector de vista, el vector de reflexión y los reflejos del entorno
  • Para el efecto de flakes, aplica hash por posición y offsets aleatorios según el ángulo
  • Permite controlar con detalle el brillo, enmascarado y boost de los flakes
  • Usa perturbedNormal para reflejar el desplazamiento de la superficie de los flakes
  • Mezcla los flakes y el color circundante junto con colores iridiscentes

Combinación del environment map y cálculo del color final

  • Cambia dinámicamente la rugosidad según la intensidad de los flakes
  • Mejora el realismo con máscaras de metal/normal/reflexión y cálculo Fresnel
  • Genera el color final mezclando componentes diffuse (difusa) y spec (reflejo especular)
  • Lo entrega como color final junto con el alpha base

Implicaciones

Este shader es adecuado para reproducir con realismo los complejos efectos visuales propios del material foil (reflejos intensos, micropartículas, iridiscencia, etc.). Como permite ajustar el efecto con precisión mediante muchos parámetros, ofrece una personalización flexible y renderizado de stickers foil de alta visibilidad. Tiene ventajas para su uso en 3D, web 2D, juegos, UI interactiva y muchos otros contextos.

1 comentarios

 
GN⁺ 2025-09-02
Comentarios de Hacker News
  • Cuando antes desarrollaba juegos móviles, llegué a añadir a unas cartas geniales un efecto en el que el “brillo” cambiaba según la inclinación del teléfono, como si fueran objetos 3D reales. Me pareció curioso enterarme de que hoy en día iOS ya ofrece este tipo de efecto de sticker de forma nativa

  • En un sitio de marketplace de cartas de Magic están aplicando un efecto CSS simple a las cartas foil. Aun así, siempre me he preguntado cómo implementar de forma más realista, sin afectar el rendimiento y ajustándolo a una UX CRUD en Svelte, la variedad de efectos foil que se ven en las cartas reales de Magic

  • La tecnología de shaders es realmente fascinante. En el sitio web Shadertoy se pueden probar directamente distintos shaders

  • Tim Oliver hizo una gran presentación sobre su experiencia creando el efecto de foil holográfico aplicado al "golden ticket" de Threads. El video puede verse aquí

  • Siento que este efecto es realmente genial y visualmente sobresaliente, pero la verdad es que el efecto de foil brillante en sí no me gusta tanto. También se usa en stickers y cartas, pero creo que se ve mejor cuando hay un brillo metálico suave usado solo como acento, en lugar de este estilo. Parece que soy de los pocos que opinan así, aunque viendo la popularidad de este efecto, supongo que sigue siendo un gusto minoritario

  • Es un efecto realmente genial. Me recordó al shader de rejilla de difracción que Alan Zucconi creó para renderizar CDs. El contenido relacionado puede verse aquí

  • El resultado es más genial de lo esperado. Fue divertido ir ajustando los valores de configuración mientras observaba la imagen reflejada de toda la habitación

    • Yo también tuve curiosidad por el mapa de reflejos y lo busqué. Resulta que esa habitación es el Palacio Jedlinka, ubicado en Polonia. La imagen de textura real puede verse aquí
  • En iOS existe un efecto “shiny” para stickers que reacciona cuando inclinas el teléfono. La primera vez que lo vi, de verdad me impresionó

  • Aunque sea off-topic, al leer este post pensé que la IA en el futuro también podrá aprender a implementar este tipo de efectos. Por un lado, sentí cierta liberación al pensar que ya no haría falta acumular marcadores, porque la IA podría cumplir el papel de marcador definitivo. Pero también hay algo triste y amargo en pensar que posts tan geniales quizá no sean reconocidos adecuadamente por la IA

    • Creo que de todos modos seguirá siendo bueno mantener los marcadores. Incluso ahora, solo con la búsqueda de Google, ya se está olvidando mucha información, y en la era de la IA aún más información podría desaparecer fácilmente
    • Al final, la IA también terminará escribiendo este tipo de posts, y la IA volverá a aprender de otra IA. Y entonces podría llegar un punto en el que desaparezcan los programadores o expertos con sensibilidad artística, y solo queden trabajos comunes de combinar soluciones de negocio generadas automáticamente por computadoras
  • Me da mucha alegría poder encontrar justamente este tipo de textos interesantes e inesperados