5 Punkte von GN⁺ 2025-09-02 | 1 Kommentare | Auf WhatsApp teilen
  • Shader-Quellcode zur Umsetzung eines Foliensticker-Effekts, der Reflexionen und Glitzern der Oberfläche realistisch simuliert
  • Verschiedene Eigenschaften wie Metallizität, Rauheit und irisierende Reflexionen lassen sich fein abstimmen
  • Zentrale Elemente sind der Mikro-Partikel-(Flake)-Effekt der Folienoberfläche und irisierende Farben, die sich je nach Blickwinkel verändern
  • Nutzt verschiedene physikalisch basierte Grafiktechniken wie Environment-Map-Sampling, Fresnel-Effekt, AO-Schatten und Alpha-Cutoff
  • Eine fortgeschrittene Shader-Implementierung, die sich für hochwertiges Rendering von Folienstickern in realen 2D-/3D-Umgebungen einsetzen lässt

Überblick

Dieser Inhalt ist GLSL-Shader-Code zur Umsetzung eines visuell schimmernden Effekts wie bei einem Foliensticker. Ziel ist es, durch die kombinierte Verarbeitung von Metallizität, Irisierung, Mikro-Partikel-Oberflächeneffekten und Umgebungsreflexionen eine hochwertige visuelle Materialität zu erzeugen. Mithilfe von 2D-Texturen, Environment-Maps und verschiedenen Anpassungsparametern wird ein realistischer Folieneffekt erzeugt.

Wichtige Variablen und Konstanten

  • Der Effekt lässt sich über verschiedene Uniform-Variablen anpassen
    • Beispiel: uFlakeSize (Flake-Größe), uRoughness (Rauheit), uMetalness (Metallizität), uIridescence (Irisierung) usw.
  • Unterstützung für Texturen, Environment-Maps sowie Informationen zum Weltkoordinatensystem

Struktur der wichtigsten Funktionen

Hash-Funktion (hash)

  • Wird zur Erzeugung von Zufallswerten verwendet, die für den Mikro-Partikel-(Flake)-Effekt benötigt werden

Umwandlung der Environment-Map-Koordinaten (dirToEquirectUv), Sampling der Environment-Map (sampleEnvRough)

  • Unterstützt richtungsabhängiges Sampling aus der Environment-Map
  • Wendet abhängig von der Rauheit (lod) das passende Mip-Level an

Irisierender Effekt (iridescenceColor)

  • Erzeugt dynamisch Farben abhängig von Winkel und Oberflächendicke
  • Wie bei einer echten Folienoberfläche ändern sich die Farben je nach Betrachtungswinkel

Luminanz (luminance)

  • Berechnet Helligkeitsinformationen einer Farbe und berücksichtigt sie für Nachbearbeitung usw.

Hauptlogik des Shaders

Alpha-Cutoff sowie Behandlung von Vorder- und Rückseite

  • Der Alpha-Wert der Base-Textur entscheidet, ob ein Pixel erhalten bleibt
  • Je nach Vorder- oder Rückseite werden AO-Intensität, Ablösungs-(peeled)-Verarbeitung und Farbanpassungen angewendet

Verarbeitung von Reflexionen, Flakes, Irisierung und Metallizität

  • Berechnet Oberflächennormale (normal), Sichtvektor, Reflexionsvektor und Umgebungsreflexionen
  • Für den Flake-Effekt werden positionsabhängiger Hash und winkelbasierte Zufallsoffsets angewendet
  • Helligkeit, Maskierung und Boost der Flakes lassen sich fein steuern
  • Mit perturbedNormal wird die Verformung der Flake-Oberfläche berücksichtigt
  • Flakes und Umgebungsfarbe werden zusammen mit irisierenden Farben gemischt

Kombination der Environment-Map und Berechnung der finalen Farbe

  • Verändert die Rauheit dynamisch abhängig von der Flake-Intensität
  • Erhöht den Realismus durch Maskierung von Metall/Normalen/Reflexion und Fresnel-Berechnung
  • Erzeugt die finale Farbe durch Mischung der Bestandteile diffuse (diffus) und spec (Reflexion)
  • Gibt sie zusammen mit dem Base-Alpha als finale Farbe aus

Implikationen

Dieser Shader eignet sich gut dazu, die komplexen visuellen Effekte eines Folienmaterials – starke Reflexionen, Mikro-Partikel, Irisierung usw. – realitätsnah nachzubilden. Da sich der Effekt über zahlreiche Parameter präzise steuern lässt, sind flexible Anpassungen und gut sichtbares, hochwertiges Rendering von Folienstickern möglich. Er bietet große Vorteile für den Einsatz in 3D, 2D-Web, Games, interaktiven UIs und vielen weiteren Bereichen.

1 Kommentare

 
GN⁺ 2025-09-02
Hacker-News-Kommentare
  • Als ich früher Mobile Games entwickelt habe, habe ich einmal einen Effekt eingebaut, bei dem sich der „Glanz“ auf einer coolen Karte je nach Neigung des Smartphones verändert hat, fast wie bei einem echten 3D-Objekt. Dass iOS heutzutage so einen Sticker-Effekt standardmäßig unterstützt, finde ich faszinierend.

  • Auf einem Marktplatz für Magic-Karten wird auf Foilkarten ein einfacher CSS-Effekt angewendet. Ich überlege aber schon lange, wie man die verschiedenen Foil-Effekte echter Magic-Karten realistischer umsetzen könnte, ohne die Performance zu beeinträchtigen und passend zu einer Svelte-CRUD-UX.

    • In diesem Zusammenhang kann ich nur empfehlen, sich das Repository pokemon-cards-css anzusehen.
  • Shader-Technik ist wirklich faszinierend. Auf der Website Shadertoy kann man viele verschiedene Shader direkt ausprobieren.

  • Tim Oliver hat einmal eine großartige Präsentation über seine Erfahrungen bei der Erstellung des holografischen Foil-Effekts für das „golden ticket“ von Threads gehalten. Das Video gibt es hier.

  • Ich finde diesen Effekt wirklich toll und visuell beeindruckend, aber den glitzernden Foil-Effekt selbst mag ich ehrlich gesagt nicht besonders. Er wird zwar auch auf Stickern und Karten eingesetzt, aber ich finde es schöner, wenn statt dieses Stils eher ein sanfter metallischer Glanz nur als Akzent verwendet wird. Es wirkt, als wäre ich mit dieser Meinung ziemlich allein, aber wenn man sieht, wie beliebt der Effekt ist, bleibt das wohl eine Minderheitenmeinung.

  • Wirklich ein großartiger Effekt. Er erinnert mich an das Beugungsgitter-Shader von Alan Zucconi, das er für das Rendern von CDs gemacht hat. Mehr dazu gibt es hier.

  • Das Ergebnis ist noch cooler geworden als erwartet. Es hat Spaß gemacht, die Einstellungen anzupassen und sich dabei die Spiegelung des ganzen Raums anzusehen.

    • Ich war auch neugierig auf die Reflection Map und habe danach gesucht. Wie sich herausstellte, ist dieser Raum der Jedlinka Palace in Polen. Die eigentliche Textur findet man hier.
  • Unter iOS gibt es einen „shiny“-Sticker-Effekt, der auf das Neigen des Smartphones reagiert. Als ich das zum ersten Mal gesehen habe, war ich wirklich beeindruckt.

  • Das ist zwar off-topic, aber beim Lesen dieses Beitrags dachte ich daran, dass KI in Zukunft wohl auch lernen wird, wie man solche Effekte umsetzt. Gleichzeitig empfinde ich eine gewisse Befreiung dabei, dass KI als ultimatives Bookmark dienen könnte, sodass man Lesezeichen vielleicht gar nicht mehr sammeln muss. Andererseits finde ich es schade und etwas bitter, dass solche großartigen Posts von KI womöglich nicht richtig gewürdigt werden.

    • Ich denke trotzdem, dass es sinnvoll ist, weiterhin Bookmarks zu pflegen. Schon durch die Google-Suche heute geht viel Wissen verloren, und im KI-Zeitalter könnte noch mehr Information leicht verschwinden.
    • Letztlich wird KI wohl auch solche Posts selbst schreiben, und KI wird dann wieder von KI lernen. Manchmal denke ich, dass dadurch Programmierer oder Fachleute mit künstlerischem Gespür verschwinden könnten und am Ende nur noch gewöhnliche Jobs übrig bleiben, bei denen man automatisch von Computern generierte Business-Lösungen zusammensteckt.
  • Ich freue mich wirklich darüber, dass man genau solche unerwarteten und interessanten Beiträge entdecken kann