Собрано 29 августа 2026. Четыре разведчика разобрали пул по участкам; каждый сайт открыт в настоящем headless-браузере, сильнейшие разобраны по исходникам. Затем документ прошёл внешнюю критику (gpt-5.6-sol, максимальный режим рассуждения), которая нашла в первой редакции две фактические ошибки и систематически заниженные оценки труда. Здесь — исправленная версия; что именно было исправлено, перечислено в конце отдельным разделом.
Полные разборы: Студии · Клубы DE/UK/NL · Юг/СНГ/мир · Галереи и культура.
Первая редакция этого документа читалась как план с нуля — «сначала прелоудер, потом знак, потом монолит». Это была неверная рамка, и внешняя критика справедливо на неё указала. Все семнадцать пиков Жана уже реализованы в коде, и разговор идёт не о том, с чего начать, а о том, что в уже стоящем поменять.
| Пик | Компонент | Состояние |
|---|---|---|
| §13 прелоудер | Preloader.tsx (51 строка) |
Маска, вскрывающаяся в герой, на двух CSS-анимациях. Не заставка, JS не участвует. |
| Монолит | MonolithScene.tsx (373) |
Чистый three.js, без react-three-fiber. Вторая кромка серым со сдвигом — монохром (30.08: была красной). |
| §17 жидкий металл | liquidMetalScene.ts (401) |
Один рендерер на страницу, который перецепляется к элементу под курсором, и берёт GPU по очереди с монолитом через claimGpu. Уже портирован на сырой WebGL. |
| §5 список HÖR | ArtistRows.tsx (147) |
Строки во всю ширину, инверсия на ховере, вторая строка через слэш. |
| §15 цифры | StatCards.tsx (62) |
Наклон на CSS от одного общего планировщика указателя, фото внутри панелей. |
| Искривлённая сетка | WarpGrid.tsx (117) |
Считается на сборке, отдаётся готовыми путями — ни математики в рантайме, ни библиотеки. |
| Тиры устройств | tier.ts (68) |
Три уровня; шейдеры и сцена героя — только тир 3. |
Отсюда простой вывод: улов ценен не как список «что построить», а как набор поправок и добавок к тому, что стоит. Ниже он в этом виде и разложен.
Главный методический вывод разведки, и он экономит недели.
Машина открыла все 340 сайтов и засчитала графический контекст у 69. Значительная часть этих 69 — не графика. Контекст создаёт антифрод Shopify, reCAPTCHA и маячок Cloudflare: они снимают отпечаток видеокарты, рисуя в скрытый канвас в несколько пикселей. Гуще всего в моде — Rick Owens, Acne Studios, Machine-A, Diesel, Rombaut оказались именно этим.
Точный признак обмана найден в коде MUTEK: канвас размером один на один пиксель, чтение параметров видеокарты и немедленное удаление узла. То есть подпись «контекст создан, а канваса на странице нет» отличает снятие отпечатка от настоящей графики. Признак применён ко всем 69: 49 остались с видимым канвасом, 20 отсеялись.
Но и он не абсолютен. Depot Mayfield и igloo.inc — сайты с доказанной авторской графикой — тоже попали в бакет «канвасов ноль»: их холст создаётся и снимается вне окна измерения. Машина врёт в обе стороны: Bootshaus с настоящей металлической моделью знака числился по таймауту как мёртвый.
Поэтому метка на полигоне — сигнал к проверке, а не вердикт. Строки, которые разведчики действительно разобрали, помечены отдельно и ведут прямо в свой блок разбора; фильтр «только разобранные» оставляет их одни.
Это исправление фактической ошибки первой редакции. Я написал, что переход load_grid
у Teletech переживает настоящую навигацию и потому годится статическому экспорту. Разбор участка
это опроверг: load_grid у Teletech — просто CSS-класс сетки, никакого перехода там нет.
Настоящий переход найден у Institut für Zukunft — ifz.me. Гиперболический
вихрь на курсоре: сорок строк GLSL и ноль ассетов. Функции suckIn и spitOut твинят коэффициент
u_warp между единицей и нулём за полсекунды, и при u_warp → 0 весь фон всасывается в точку
курсора. Вызываются они из клиентского роутера, и каждый переход утягивает фон в воронку
и выплёвывает обратно уже с новой картинкой. Гашение краёв сделано в чёрный, а не в прозрачность —
на нашем фоне это ровно то, что нужно.
Заодно снимается ложная посылка, на которой стоял мой абзац: статический экспорт не отменяет
клиентскую навигацию. Next генерирует HTML и RSC-payload, <Link> продолжает давать переходы
без перезагрузки, и сайт уже ими пользуется. Приём window.location = destination, который
я предлагал, технически сработает, но выбросит prefetch, постоянный макет и состояние холста
и перезапустит WebGL — это ухудшение архитектуры, а не обход ограничения.
Карта разделов IFZ почти дословно наша: события с датой и слагом, серии (у нас бренды JILT, JAR,
ZVUK, Massive), артисты списком и по одному, архив, букинг (у нас /hire), safer-clubbing
(у нас «билеты и правила»), about, контакты.
Первая редакция утверждала, что жидкий металл «уже написали за нас» в React Bits и что это стоит
ТРУД 1–2. Это была ошибка масштаба. В репозитории уже лежит liquidMetalScene.ts на 401 строку,
и почти весь этот объём — не шейдер, а инфраструктура: жизненный цикл, размеры, плотность пикселей,
компиляция, потеря контекста, перецепление к элементу под курсором и дележ GPU с героем. Короткий
GLSL никогда не был дорогой частью.
Что из галерей остаётся полезным — не «готовое решение», а библиотека вариантов материала, которые можно подставить в уже существующий рендерер:
| Вариант | Адрес | Чем сделан |
|---|---|---|
| Liquid Chrome | reactbits.dev/backgrounds/liquid-chrome | OGL, один полноэкранный треугольник, ~23 строки GLSL |
| Molten Metal | reactbits.dev/backgrounds/molten-metal | OGL, ~33 строки GLSL |
| Ferrofluid | reactbits.dev/backgrounds/ferrofluid | OGL, ~42 строки GLSL |
| Metallic Paint | reactbits.dev/animations/metallic-paint | сырой WebGL без библиотеки, ~53 строки GLSL |
Брать оттуда надо тело шейдера, а не компонент: компоненты создают собственный рендерер либо тянут OGL, и оба варианта ломают наш закон одного активного контекста.
Отдельная поправка по цене: полноэкранный треугольник — не синоним дешевизны. Фрагментный шейдер выполняется для каждого пикселя, и несколько октав шума на трёх миллионах пикселей при шестидесяти кадрах могут стоить дороже небольшой модели.
Amnesia — amnesia.es даёт самый близкий к нам рецепт: логотип клуба — выдавленный SVG в модели весом 16,8 килобайта, металл сделан картой маткап в обычном PNG, а не HDR-окружением, объём даётся параллаксом группы камеры. Клуб решил ровно нашу задачу самым бюджетным способом. Оговорка: маткап не эквивалент карты окружения — он зафиксирован относительно камеры и не отражает сцену, поэтому на вращающемся или разламывающемся монолите поведёт себя иначе. Это допустимая стилизация, а не замена.
Tenax — tenax.org — сцена не нужна, а слой пост-обработки поверх неё нужен: композитор с цифровым глитчем, плёночным шумом и сдвигом каналов. Палитра у них уже наша, и это готовый пример того, как сдвиг канала делает цвет свойством материала — у нас приём остаётся монохромным.
Teletech — teletech.events держит морф-таргет Break, и скролл
гонит его от нуля к единице: модель не крутится, а разламывается по мере прокрутки. Параллельно
пять глитч-морфов дёргаются случайно — микродвижение живого объекта в покое. Разлом ближе
к «металлу и бетону», чем любое вращение. Палитра сайта совпадает с нашей до значения токена:
--darkest-hour:#0a0a0a, --dusk:#141414.
Честная цена: ТРУД 5, а не 4. Согласованные морф-таргеты требуют шейпкеев в Blender, сжатия геометрии, художественной постановки и проверки на реальных телефонах. Материал отдельно — 2–3.
Lusion — lusion.co/work показывает механику: униформы u_domXY,
u_domWH, u_activeRatio передают шейдеру прямоугольник наведённой карточки, и общий холст красит
ховер ровно в её границах.
Но ставить это сейчас преждевременно. Наш ArtistRows уже работает на DOM и CSS
с преразмытыми картинками, а перевод на холст требует синхронизации прямоугольников при прокрутке,
изменении размера, смене ориентации, догрузке шрифтов и клиентской навигации; неаккуратный вызов
измерения геометрии в кадровом цикле даст пробуксовку раскладки. ТРУД 4, а не 3. Сперва надо
закрыть у списка тач, фокус и клавиатуру — там дыра реальная, а холст пока не решает доказанной
проблемы.
Depot Mayfield — depotmayfield.com — ближайший к ДНК Колоссуса сайт
всего пула. Бетонное депо, тёмное, один акцент #ff3814 — их, не наш: у Colossus цветного акцента нет. Полноэкранные
фотографии выводятся не тегом img, а плоскостью в WebGL: волновой зум расходится рябью от точки
наведения, вершинный шейдер выгибает саму плоскость, поверх работает чёрная шторка-вскрытие.
Эффект не кричит — он делает бетон материальным.
Снимаю формулировку «бюджет доказан», она была неверной. 113 килобайт — вес одного чужого куска кода, и он ничего не доказывает про наш сайт: не посчитаны основной и вендорный код, runtime фреймворка, текстуры, видео, декодирование, компиляция шейдеров и работа видеокарты. Полноэкранный шейдер упирается в скорость заливки, а не в размер кода. Наш собственный счёт при этом уже красный: three весит 179 килобайт против цели в 160 (задача WEB3.6 открыта).
Relighting Images with Depth Maps — кадры бетона и металла оживают под движущимся светом на одном кваде с двумя текстурами. «Как выглядит наш свет» перестаёт быть мудбордом и становится механикой.
Bootshaus — bootshaus.tv светит на свой логотип контровым 0xF74300
снизу-сзади: знак остаётся своим, а цвет на нём появляется светом (у нас контровой был бы холодный белый — красного у бренда нет). Холст 200×200 в подвале, весь
авторский код 5 килобайт, рендер по требованию — не скроллишь, видеокарта спит.
Оговорка, которой в первой редакции не было. Я написал, что приём не нарушает брендбук. Это слишком сильное утверждение: экструзия, фаска, перспектива и цветной свет меняют силуэт и цвет пикселей знака, а действующий бриф требует использовать реальный PNG и не искажать его. Это отдельная трёхмерная интерпретация знака, и она требует письменного согласия владельца бренда до начала работы. Реальная цена: ТРУД 3–4, а не 2 — нужен векторный оригинал или ручное восстановление геометрии с отверстиями и знаком ®, фаски, нормали, развёртка, мобильный фолбэк и встройка в общий рендерер.
Прелоудер-диафрагма Teletech — четыре кромки уезжают в ноль, открывая холст, который едет
с масштаба 1.2 в 1 по авторской кривой CustomEase("M0,0 C0.14,0.86 0.37,0.96 1,1"): резкий старт,
длинный мягкий хвост. Это единственная оценка, которую внешняя критика оставила без поправки:
ТРУД 1. Наш прелоудер уже на CSS-анимациях, кривая переносится в них напрямую.
Unseen — unseen.co — шумовой круговой ревил на униформах u_fromScene,
u_toScene, u_progress: одна сцена растворяется в другую через шум, без резаных кромок.
Microsoft AI — microsoft.ai — один полноэкранный квад, ни моделей, ни загрузчиков: самый дешёвый способ получить большой объёмный экран.
Akaru — akaru.fr — displacement-переход между секциями, один из самых дешёвых больших эффектов в вебе.
Exo Ape — exoape.com/work — ощущение почти как у топовых WebGL-сайтов при ТРУД 1. Стоит посмотреть до того, как заказывать сцену.
Input Barcelona — inputbcn.com — эталон дешёвого «вау» среди клубов: Lenis, GSAP, ScrollTrigger и Lottie, ноль WebGL.
Building The Monolith: композиция 13 WebGL-сцен на одном рендерере —
готовая инструкция под наш закон одного активного контекста, который уже реализован в claimGpu.
Obys — obys.agency — один холст на всё приложение как архитектурное решение, а не как эффект.
Zentry — zentry.com — главный референс Жана оказался на три четверти видео-продакшном: three грузится ленивым куском в 46 килобайт, а пропорция на главной — шесть видео на один холст. Для сроков хорошая новость, для съёмочного плана плохая. Оговорка та же, что и выше: 46 килобайт доказывают существование маленького куска у Zentry и ничего не говорят про нас.
prefers-reduced-motion — самая большая дыраНаш tier.ts отдаёт шейдеры и сцену героя только тиру 3, а тир 3 требует точного указателя,
больше четырёх гигабайт памяти и живого WebGL. Значит на большинстве телефонов исчезают монолит,
жидкий металл, ховер списка и интерактивные фотографии разом — то есть почти всё, что этот
документ называет главным. Мобильного художественного эквивалента для них не спроектировано,
и это не список выключателей, а отдельная задача арт-дирекции.
Конкретные места, где сейчас разваливается:
prefers-reduced-motion должен убирать морф, вихрь, автозапуск видео, вскрытие прелоудера
и длинные переходы. Подмена WebGL-анимации на вытеснение по clip-path — всё ещё движение.Пропущен целый класс: жизненный цикл графики в настоящем браузере. Нет контракта на возврат по истории, повторное монтирование маршрута, смену ориентации, потерю и восстановление контекста WebGL, несколько вкладок, нехватку памяти, отменённую навигацию, догрузку текстуры после размонтажа и автоматическую предзагрузку ссылок на страницах с десятками артистов.
Нет и медиа-конвейера: размеры исходников, адаптивные версии, битрейт, бюджет постеров, число одновременных декодеров, очистка текстур из памяти видеокарты и правила кеша. Бюджет, скорее всего, кончится именно здесь, а не в шейдерах.
Порядок из первой редакции был неправильным: он добавлял независимые эффекты до выбора общей архитектуры и оставлял самый рискованный объект на конец, когда переделывать уже дорого. Исправленный порядок, с учётом того, что почти всё уже стоит:
Документ прошёл проверку gpt-5.6-sol в максимальном режиме рассуждения. Найденное:
load_grid у Teletech не существует — это CSS-класс. Я перенёс утверждение
из погибшего первого захода, не сверив с итоговым отчётом, где оно снято. Исправлено на IFZ.<Link> работает, сайт им уже
пользуется. Мой обход через window.location был ухудшением, а не решением.Оценка ТРУД 1 у прелоудера — единственная, которую критика оставила без поправки.