pouët.net

Go to bottom

Brut by Abyss [web]

           ·                                                 ·      __
  _ __  __ : __________/\___________ ______/\________________│_ _ __\/__ _ _
  /  / /_//_/~________/ _\_  ¬\_/~ ¬Y~ ¬\_/  \______/~  ______/     \/
           7: \__   ¬│! \__   _│_____   !│_____   ¬│_____   ¬│
           │!   │   .│·   │   ¬│~  ¬│   ·│~  ¬│   :│~  ¬│   :│
 _ __ _ _ _└____│   :│_________│:   _____│:   _____│!   _____;_ __ __ _ __
           :    └────┘         └────┘    └────┘    └────┘    :-Sd
           ·      Abyss - L'expérience la plus profonde      .


                               - B R U T -

            « Un instant de plaisir pour une vie de bonheur »

                          Une intro 8k pour WebGPU
                       Présentée à la ComParade 2026

                          Réalisation : Bartman
                       Implémentation : Claude
                              Musique : Bartman

Windows: Run ays-brut.cmd; it unpacks itself and opens your default browser
Other platforms: Open ays-brut.uncompressed.html in your web browser
Requires: Chrome/Edge 113+, Firefox 141+ or Safari 26+
Tested on: Chrome 152, Edge 156 and Firefox 157

Renders at 1600x900, NVIDIA GeForce RTX 4070 or higher recommended.

Source code: https://github.com/BartmanAbyss/ays-brut


Credits and references:

    Prior art and packaging:

    - INCENDIUM (Bercon + pestis, Revision 2025) - 4 kb WebGPU intro with a 3D
      fluid sim and compute-shader music. The packaging model, the byte budget
      and the dropper's trick - PowerShell serving its own bytes as
      "Content-Encoding: br" - come from it. MIT.
    - Roquefort (Bercon) - 256^3 WebGPU fluid. MIT.
    - Shadertoy work by wyatt and michael0884 informed the
      nearest-particle-as-SDF idea. Studied only - Shadertoy defaults to
      CC BY-NC-SA.
    - Pakettic (Veikko Sariola / pestis, MIT) - the model for build/pack.py:
      packing as a search over orderings and names, scored by compressed size,
      with late-acceptance hill climbing. Reimplemented.
    - Shader Minifier (Laurent Le Brun / Ctrl-Alt-Test, Apache-2.0) - the
      trick of letting a local take the name of a global its function never
      touches. Idea only.

    Rendering:

    - Sphere tracing - J. C. Hart, "Sphere tracing: a geometric method for the
      antialiased ray tracing of implicit surfaces", The Visual Computer
      12(10), 1996.
    - Over-relaxed sphere tracing - B. Keinert, H. Schäfer, J. Korndörfer,
      U. Ganse, M. Stamminger, "Enhanced Sphere Tracing", STAG 2014
      (Eurographics Italian Chapter), doi:10.2312/stag.20141233.
    - Distance-field modelling - Inigo Quilez's articles: SDF primitives
      (capped cylinder, capsule) and the polynomial smooth minimum used for
      the glass's joins (iquilezles.org/articles/distfunctions, /smin).
    - Nested dielectrics by priority (glass, champagne and bottle glass
      meeting without coincident surfaces) - C. M. Schmidt, B. Budge, "Simple
      Nested Dielectrics in Ray Traced Images", Journal of Graphics Tools
      7(2):1-8, 2002.
    - Fresnel term - C. Schlick, "An Inexpensive BRDF Model for
      Physically-based Rendering", Computer Graphics Forum 13(3), 1994
      (Schlick's approximation).
    - Absorption - the Beer-Lambert law.
    - Caustics by tracing photons from the light - after H. W. Jensen,
      "Global Illumination using Photon Maps", Eurographics Rendering
      Workshop 1996; here splatted into a table texture.
    - Jump flooding (the spray's far field) - G. Rong, T.-S. Tan, "Jump
      Flooding in GPU with Applications to Voronoi Diagram and Distance
      Transform", I3D 2006.
    - Hash - pcg3d from M. Jarzynski, M. Olano, "Hash Functions for GPU
      Rendering", Journal of Computer Graphics Techniques 9(3):21-38, 2020.
    - Tonemapping - K. Narkowicz's fit of the ACES filmic curve, "ACES Filmic
      Tone Mapping Curve" (blog, 2016).
    - Smootherstep (shapes and camera easing) - the quintic fade from
      K. Perlin, "Improving Noise", SIGGRAPH 2002.

    Simulation:

    - Collision as a position constraint (no tunnelling through the 1.4 mm
      glass at any speed) - in the spirit of M. Müller, B. Heidelberger,
      M. Hennix, J. Ratcliff, "Position Based Dynamics", J. Visual
      Communication and Image Representation 18(2), 2007.
    - The per-glass surface waves are the discrete 2D wave equation.
      Textbook, no single source.

    Sound:

    - Bubble acoustics - M. Minnaert, "On musical air-bubbles and the sounds
      of running water", Philosophical Magazine 16(104):235-248, 1933 (the
      resonance 3/r).
    - The liquid's bubble model (damping, pitch rise, size and depth
      distributions) - K. van den Doel, "Physically Based Models for Liquid
      Sounds", ACM Transactions on Applied Perception 2(4), 2005; first at
      ICAD 2004.
    - Fizz (bubbles bursting at the surface, pitch rising as the cavity
      collapses) - M. Poujol, R. Wunenburger, F. Ollivier, A. Antkowiak,
      J. Pierre, "Sound of effervescence", Physical Review Fluids 6, 013604,
      2021.
    - The cork pop - shaped after G. Liger-Belair, D. Cordier, R. Georges,
      "Under-expanded supersonic CO2 freezing jets during champagne cork
      popping", Science Advances 5(9), 2019, doi:10.1126/sciadv.aav5528; and
      the Helmholtz resonance of the open neck.
    - The pad - PADsynth, by Nasca Octavian Paul (ZynAddSubFX): harmonics as
      bands of frequencies with random phases in one looped table. A lite
      version without the FFT.
    - Champagne acoustics background (not implemented directly): K. Spratt,
      K. Lee, P. Wilson, "Champagne acoustics", Physics Today 2018.

    Build tools:

    - wgslender (Hugo Daniel, CC0-1.0) - WGSL tree-shaking.
    - terser (BSD-2-Clause) - JS minification, with its dependencies acorn,
      commander, source-map-support, buffer-from, @jridgewell/* (MIT) and
      source-map (BSD-3-Clause).
    - Closure Compiler (Google, Apache-2.0), v20261015 native Windows build -
      JS optimisation in SIMPLE mode, before esbuild and terser.
    - esbuild (Evan Wallace, MIT), 0.28.2 native Windows build - between
      Closure and terser.
    - Brotli (Google, MIT) - via Python's brotli package.
    - Late-acceptance hill climbing (the packer search) - E. K. Burke,
      Y. Bykov, "The Late Acceptance Hill-Climbing Heuristic", European
      Journal of Operational Research 258(1), 2017 (Bykov's 2008 report
      first).
    - Roadroller (Kang Seonghoon, MIT), in Aske Simon Christensen's
      (Blueberry's) intro-size fork, https://github.com/askeksa/roadroller -
      packs the page's script. Its decoder, which ships, is public domain.

    Font:

    - Josefin Sans (Santiago Orozco, SIL Open Font License 1.1) - the
      lettering's capitals, redrawn as pen strokes.

AI Disclosure: AI coding assistant (Claude, by Anthropic) implemented the code
and helped with French translations.
AI was not involved in creative decisions. Music composed by the author.
A human spent 3 weeks ideating, designing, tech speccing, creating scenes,
lighting, positioning cameras, rotating the bottle, tweaking the caustics,
creating texts, providing guidance on performance and size optimizations,
tuning parameters, profiling, timing, coloring, composing, testing,
eating and sleeping.
Go to top