Поправка 2026-08-30 (Жан). Везде ниже, где сказано «наш сигнальный красный
#FB3B1E» или «наш акцент — красный», — ошибка: у Colossus постоянного цветного акцента НЕТ (брендбук: монохром «от белого до графита», сезонные цвета только по согласованию). Технические выводы о референсах остаются в силе; сравнения «их красный = наш» — нет.Разведка по списку
w1-studios-legend.md(48 студий + 18 сайтов-аттракционов). Все 66 адресов проверены. Доказательства двух родов: браузерный зондprobe-browser.jsonl(перехват создания графического контекста в headless-Chromium) и собственный разбор бандлов черезcurl— скачанные чанки грепались на маркеры движка, имена униформ, GLSL-фрагменты и имена ассетов. Там, где доказательство слабое, это сказано прямо.Статус: проход завершён 2026-08-29.
Зонд поймал живой графический контекст у 37 из 66 адресов (плюс EverSwap и Chungi Yoo,
где зонд отвалился по таймауту, а 3D доказано разбором бандла — итого 39). Но приёмов,
которые ложатся на брендбук Колоссуса, нашлось четырнадцать, и три из них закрывают ровно
те места направления v3, где до сих пор стояло «как-нибудь сделаем»:
матке́п вместо env-карты (пик 17, жидкий металл),
DOM-синхронизированный оверлей (один канвас на все ховер-эффекты) и
шумовой ревил по u_progress (пик 13, прелоудер-маска). Главное открытие по ДНК —
concrete-01.ktx2 в бандле Steven.com: бетон в 3D делают одной сжатой текстурой, а не
процедурой. Главное разочарование — prometheusfuels.ai, самая «наша» позиция списка
(«тяжёлый индустриальный 3D: металл и свет»), теперь обычный WordPress.
is3d=true, контексты webgl2 + webgl + 2d, глобал
__THREE__, 1 канвас. Собственная проверка бандла (wp-content/themes/unseen/public/scripts/theme.js,
418 КБ + vendor 1,17 МБ): 28 упоминаний GLTFLoader, 7 DRACOLoader, 16 roughness,
10 metalness, 7 transmission, 7 envMap, 85 вхождений noise. В исходниках лежат
реальные ассеты сцены: room-1.glb, room-2.glb, rocks.glb, land-group.glb,
models/world/grab.glb, models/project-menu/arch-dc.glb, images/project-menu/arch.ktx2.
Доказательство сильное: это полноценная GLTF-сцена, не фон-шейдер.uniform sampler2D uMatcapLight; uniform sampler2D uMatcapDark;
плюс uTransition, ветки #ifdef LIGHTMODE / #ifdef TO_LIGHTMODE): металл рисуется одной
текстурой-диском, без HDR-карты и без PMREM-прогрева, и умеет перетекать между светлой и
тёмной версией. Вторая — шейдер перехода между сценами: две отрисовки складываются в
u_fromScene / u_toScene, и раскрытие идёт функцией circle(), край которой рвётся
шумом из u_noise (noiseReveal, noiseEdge) по u_progress. Третья — флюид-солвер
(uFluidTexture, uVelocity, uDelta): скоростное поле от курсора, которым потом
сдвигают текстуру.PMREMGenerator и без прогрева на первом ховере. Прямо
снимает половину бюджета three-чанка (≤160 КБ async).u_progress от 0 до 1 с рваным
шумом по краю — это ровно «маска перехода в hero», а не отдельная заставка. И тот же
шейдер переиспользуется на переходах между полноэкранными медиа-секциями.chair.glb, pillows.glb, grass-simple.glb,
butterfly.glb) — у них мягкий продуктовый мир, у нас индустриальная масса. Светлый режим
сайта и переключатель тем — нам не нужен, у Колоссуса чёрный канон. Игровой курсор-рука
(grab.glb / pointer.glb) — чужой аттракцион.ShaderMaterial и одним фуллскрин-квадом — никакой серверной части. Труд поднимает не
шейдер, а дисциплина: держать ОДИН WebGL-контекст на страницу (закон эффектов v3.1) и
прогревать шейдер на idle.fail: TimeoutError: Page.goto),
поэтому доказательство собрано вручную и оно даже прочнее. Единственный бандл
/_astro/hoisted.D5QinsOB.js (731 КБ) содержит three.js целиком и внутри него:
transmission ×70, envMap ×82, thickness ×39, refract ×24, ior ×21, fresnel ×14,
matcap ×23, InstancedMesh ×11, simplex ×12, fbm ×7, PMREM ×13. Плюс полный
набор униформ симуляции: u_screenPaintTexture, u_flowTexture, u_simSize, u_delta,
u_texelSize, u_flowTime, u_amount.u_screenPaintTexture + u_delta + u_texelSize = классическая пинг-понг-адвекция),
и эта текстура потом гоняет u_flowTexture как поле течения. Вторая — честный
физматериал жидкости: transmission + thickness + ior + refract + fresnel на
MeshPhysicalMaterial, то есть преломляющее тело, а не картинка жидкости.transmission/ior) как основной
материал — это финтех-глянец, у Колоссуса непрозрачный металл и бетон. Разноцветные
u_color0/u_color1 градиенты — у нас монохром плюс одна красная фраза.MeshPhysicalMaterial с
transmission (он и не нужен) и правильное гашение на слабых GPU. Берём половину
механики — и ТРУД падает до 3.is3d=true, контексты webgl2 + 2d, глобал __THREE__,
3 канваса, библиотеки lenis, three, spline. Проверил бюджет руками: three живёт
отдельным ленивым Nuxt-чанком /_nuxt/three.module.fMA-iDlM.js = 173 КБ raw / 46 КБ gzip;
входной entry.DyOw_SuG.js — 2,8 МБ и в нём НЕТ ни одной GLSL-униформы. То есть 3D
подгружается отдельно от каркаса.<video> и один канвас — то есть «3D-мир»
Zentry в большой степени сделан видео-лупами, а WebGL включается точечно. В разметке
живут классы hero__spline / hero__splineContent и флаг splinesLoaded — герой
собирается из сплайновых траекторий поверх видео.dynamic(..., {ssr:false}).is3d=true, webgl2 + 2d, глобал __THREE__, 2 канваса.
Разобрал архитектуру руками: страница — обычный Webflow (cdn.prod.website-files.com),
а вся сцена приезжает ОТДЕЛЬНЫМ приложением https://steven-henna.vercel.app/app.js
(1,88 МБ). Внутри: WebGLRenderer ×34, gl_FragColor ×166, envMap ×112, roughness ×131,
transmission ×100, metalness ×59, matcap ×40, InstancedMesh ×32, GLTFLoader ×24,
DRACOLoader ×7, VideoTexture ×14, troika ×31 (3D-текст), gsap ×85, lenis ×16.
Ассеты: STEVEN_system-ktx2-04.glb, STEVEN_creatorEvents-ktx2-03.glb и текстуры
/textures/ktx2/… — среди них буквально concrete-01.ktx2.REFLECTION_GROUND_BASE_COLOR, REFLECTION_COLOR_A,
REFLECTION_COLOR_B, REFLECTION_INTENSITY, GLOW_STRENGTH — объект стоит на мокром
тёмном полу и отражается в нём. (2) VideoTexture — реальное видео натянуто на геометрию
в сцене, а не лежит отдельным слоем под ней. (3) Переходы между разделами идут через
униформы uSceneTransition / uTransition, курсор входит в шейдер как uMousePosition +
uMousePace (не позиция, а СКОРОСТЬ курсора — от неё зависит сила эффекта).output: 'export' на CF Pages + сцена через
dynamic(..., {ssr:false}). Доказательство, что схема работает на сайте уровня SOTD.concrete-01.ktx2 — прямой ответ на вопрос «как показать бетон в 3D дёшево»:
одна сжатая KTX2-текстура бетона на плоскость. Материальная ДНК Колоссуса, а не
процедурный шум.uMousePace вместо uMousePosition. Эффект от скорости курсора, а не от его
координат — движение ощущается физическим. Дешёвая правка нашего pointer-шедулера.transmission-стекло.is3d=true, webgl2 + 2d, __THREE__, 3 канваса.
Бандл /_astro/hoisted.CUO_IjfL.js (1,22 МБ) разобран: matcap ×58, envMap ×81,
bloom ×59, velocity ×39, WebGLRenderTarget ×14, VideoTexture ×14,
InstancedMesh ×13, curl ×17 (curl-noise). И главное — набор униформ
u_domXY, u_domWH, u_activeRatio, u_showRatio, u_texelSize, u_noiseStableFactor.u_domXY и u_domWH — это координаты и размеры DOM-элемента,
переданные в шейдер. То есть у Lusion ОДИН полноэкранный канвас, который знает, где на
странице лежит каждая карточка, и рисует эффект ровно в её прямоугольнике; u_activeRatio
— прогресс ховера конкретного элемента, u_showRatio — прогресс появления при скролле.
Отдельного канваса на карточку нет.getBoundingClientRect()
наведённого элемента уходит в u_domXY/u_domWH, шейдер красит только этот
прямоугольник. Это буквально формулировка «на /cast — один плавающий канвас на
наведённую обложку, не 13», но подтверждённая рабочим сайтом и с готовыми именами
униформ.u_activeRatio / u_showRatio как две отдельные шкалы — ховер и появление при
скролле не смешиваются в одну переменную. Мелочь, которая спасает от каши, когда
карточка цифр одновременно въезжает и ловит курсор.is3d=true, webgl2, 1 канвас. Ключевая находка в
самой разметке: в статическом HTML лежит <canvas id="gl"> — один-единственный
глобальный канвас на весь сайт. Внешних <script src> в HTML нет вообще (всё через
inline-модули с nonce), так что бандл-грепом их шейдеры не достать — доказательство 3D
держится на зонде, и оно однозначное (контекст webgl2 создан по факту).<canvas id="gl"> как один persistent-контекст на весь сайт — это буквально
формулировка закона эффектов v3.1 («ОДИН активный WebGL-контекст на страницу»), но
доказанная на живом сайте и поднятая на уровень всего приложения. Наш монолит и
жидкий металл должны делить именно такой канвас; при переходах между разделами он не
пересоздаётся, а значит не платит за перекомпиляцию шейдера.is3d=true, webgl2 + 2d, 1 канвас (HTML-оболочка
всего 2,9 КБ, Vue SPA). Бандлы app.257ecce9.js (681 КБ) + chunk-vendors (1,02 МБ):
WebGLRenderer ×78, Points ×78, InstancedMesh ×27, GLTFLoader ×26,
ShaderMaterial ×22, gl_FragColor ×64, Raycaster ×6, OrbitControls ×5.
Униформы: uTerrainElevation, uTerrainSize, uRevealProgress,
uRevealTextureFrequency, uRevealRandomFrequency.Points + InstancedMesh), каждый участок —
кликабельный объект (Raycaster), камера летит к нему, а сам рельеф «проявляется»
шейдером: uRevealProgress гонит порог, а uRevealTextureFrequency /
uRevealRandomFrequency рвут фронт проявления так, чтобы точки всплывали не ровной
линией, а рвано./hire (пик 12) и для «О пространстве»./hire должен продавать, и это «показывает», а не
«объясняет» — закон четырёх выполнен буквально.uRevealProgress + два шума) — второй кандидат в
прелоудер-маску (пик 13), альтернатива круговому ревилу Unseen: логотип/сетка
собирается из точек.OrbitControls (свободная орбита = потерянный
пользователь; нам нужны фиксированные точки съёмки залов), их 1,7 МБ бандла./hire, а не только эстетику. Кандидат на «одну большую
фичу второй фазы», не на Ф1.is3d=true, webgl2, __THREE__, 1 канвас.
Nuxt-чанки DgeqIl1k.js (826 КБ) + Dp9hHgU2.js (543 КБ): displacement ×99,
envMap ×87, GLTFLoader ×27, matcap ×23, VideoTexture ×10, WebGLRenderTarget ×4,
ScrollTrigger ×5, SplitText ×5.SplitText (GSAP) —
разбиение заголовка на слова/буквы для входов, и VideoTexture — видео как материал.opacity. Одна grayscale-текстура шума + один
шейдер, работает и на видео.SplitText + ScrollTrigger как связка входов заголовков (пик 14). Это ровно
Zentry-механика, но здесь видно её минимальный состав: не нужна отдельная библиотека
анимации текста, достаточно GSAP-плагина поверх нашего смешанного курсива.VideoTexture — второе подтверждение (после Steven.com), что видео площадки должно
жить внутри GL-слоя, а не под ним.envMap-окружения (нам хватит матке́па).u_progress. Полностью статичен.is3d=true, webgl2, глобал __THREE__, 3 канваса.
В статическом HTML (219 КБ) — ноль тегов <canvas> и <video> и 64 <img>: все три
канваса создаются джаваскриптом уже после гидрации. Честная оговорка: их Next-чанки
адресуются по внутренней карте turbopack, поэтому грепом бандла шейдеры не достаются —
первичные чанки дали только ложные срабатывания (rapier внутри строки
browserapierrors, BloomFilter из роутера Next). Доказательство держится на зонде.is3d=true, webgl2, 1 канвас. Сайт при этом
собран на WordPress (jQuery, wp-includes в разметке) — WebGL живёт в одном
тематическом бандле wp-base-theme/dist/assets/index-BJKvAEpb.js (354 КБ). Внутри —
не three.js, а собственный микро-движок (Program, Mesh, uPMatrix, uMVMatrix) и
униформы кинематографической обработки: useToneMapping, uToneMappingExposure,
useGammaCorrection, useExposure, useBlurNoise, u_bokeh_iters, u_vig_radius,
u_vig_skew, u_vig_pos_x/y, uBlurDirection.<video> в браузере.u_vig_pos_x/y) — можно увести тёмный угол в
сторону, чтобы монолит и заголовок дышали. Мелочь, но именно она отличает грейд от
фильтра.output: 'export' не помешает.is3d=false, контекстов нет, канвасов 0. В
разметке — сплошные <video playsinline loop muted>, ни одного <canvas>. Бандл-греп
тоже пуст по 3D-маркерам. Это НЕ 3D-референс, и в этом вся ценность.playsinline loop muted disablepictureinpicture на каждом видео —
мелкая, но обязательная гигиена для наших лупов.is3d=false, единственный контекст 2d, 1 канвас.
В разметке: <canvas class="block w-full cursor-crosshair" style="aspect-ratio:2.100942…">,
ни одного <video>. Next.js/turbopack. То есть «чистейшая работа с материалом» из
исходного списка сделана двумерным канвасом, а не WebGL.is3d=true, контекст webgl2 создан, но канвасов
в DOM ноль и глобала __THREE__ нет. То есть либо рендер идёт в OffscreenCanvas
(правдоподобно: это авторы Lenis, инженерная студия), либо канвас монтируется позже
восьмисекундного среза. В статическом HTML (481 КБ) — 4 тега <video> и ноль <canvas>.
По бандлам: lenis ×63, ScrollTrigger ×4 — и ни одного 3D-маркера в доступных чанках.
Доказательство 3D слабое: контекст пойман, техника — нет; для 3D-приёма их брать
нельзя, для скролл-инженерии можно.is3d=true, контексты 2d + webgl, 1 канвас.
Разобрано руками: это p5.js 1.0.0 с CDN плюс собственный sketch.js (16,4 КБ) и
keyboardEngine_190103.js. В скетче — createCanvas(..., WEBGL), loadFont,
rotateY ×5, box ×5, push/pop ×3.colossus® в пространстве под hero и под заглушку сцены,
не открывая Blender и не тратя генерации.Держать в поле зрения, но приёма для Ф1 из них не вынимается. «Движок» — по зонду (контекст + глобалы + канвасы), цифры в скобках — счётчики маркеров в бандлах.
| Сайт | Движок | Зачем держать в поле зрения |
|---|---|---|
| OFF+BRAND — itsoffbrand.com | webgl2, __THREE__, 1 канвас |
Авторы Steven.com (позиция 4). Их собственный сайт скромнее клиентского — смотреть как студию-исполнителя, а приёмы брать с их работ |
| Immersive Garden — immersive-g.com | 2d+webgl+webgl2, __THREE__, 2 канваса; gl_FragColor и родня ×903, постпроцессинг ×87, загрузчики ×87, lenis ×240 |
Эталон «слишком тяжело»: полезен как граница, за которую нам нельзя. Если наш бандл начнёт напоминать этот — мы свернули не туда |
| 14islands — 14islands.com | webgl2+webgl+experimental-webgl, __THREE__, канвасов 0 |
Самый чистый R3F-подход в пуле (three_core ×159, материалы ×379, видео ×47). Если Ф1 всё-таки поедет на react-three-fiber — брать их структуру компонентов |
| Garden Eight — garden-eight.com | webgl2, глобалы THREE, __THREE__, gsap, 1 канвас |
Рекордсмен по материальным маркерам (×512) при японской дисциплине сетки. Второй источник по «как красить металл», если матке́пов Unseen/Lusion не хватит |
| North Kingdom — northkingdom.com | webgl2+webgl, __THREE__, 1 канвас |
three_core ×182 + видео ×42 — ещё одно подтверждение связки «видео внутри сцены». Бренд-миры, геймификация — для нас избыточно |
| Noomo — noomoagency.com | webgl2, __THREE__, 1 канвас |
Загрузчиков ×110, материалов ×413 — сторителлинг-скролл на моделях. Смотреть режиссуру последовательности, не технику |
| Minh Pham — minhpham.design | webgl2, __THREE__, 1 канвас |
three_core ×216 при одиночном авторе — доказательство, что уровень достижим малой командой |
| EPIC — epic.net | webgl+webgl2, __THREE__, 2 канваса, three в скриптах |
Заявленный эталон ховер-физики; MSDF/текстовые маркеры ×10. Резерв, если ховер-механики Lusion окажется мало |
| Phantom — phantom.land | webgl2, __THREE__, 1 канвас |
Материалы ×111 + шум ×13; тема «инсталляция ↔ веб» концептуально близка клубу, но подача светлее нашей |
| Aristide Benoist — aristidebenoist.com | webgl+2d, 2 канваса, БЕЗ __THREE__ (свой рендерер) |
Единственный в пуле, кто прописал фон прямо в теге: <html style="background-color:#141414"> — это ровно наш токен панелей из design-brief. Тёмный авторский WebGL-минимализм на самописном движке и своих woff2; смотреть как доказательство, что на нашей палитре 3D читается |
| Metabole — metabole.studio/en | webgl2+2d, __THREE__, 2 канваса |
Ценность в их разборах приёмов в блоге, а не в сайте: источник теории под liquid metal |
| Utsubo — utsubo.com | webgl+2d, __THREE__, 1 канвас |
Единственное упоминание WebGPU в пуле. Смотреть через год, не сейчас |
| The Other Side of Truth — theothersideoftruth.com | 2d+webgl+webgl2, БЕЗ __THREE__, 1 канвас, 3 видео |
Тёмная драматургия — тонально ближе всех к клубу, но техника кастомная и неразбираемая (gl_FragColor ×94, скролл-моушн ×212). Держать как эталон НАСТРОЕНИЯ повествования |
| Chungi Yoo — chungiyoo.com | зонд отвалился по таймауту; в бандле GLSL ×280, постпроцессинг ×13 | Эталон ритма скролла и композиции. 3D есть, но доказательство неполное — проверять руками |
| Lenis — lenis.dev | webgl2, __THREE__, 1 канвас |
Витрина прокрутки, которую и надо показать клиенту как «вот это ощущение». 3D — демонстрационное |
| Synchronized — synchronized.studio | 2d+webgl+experimental-webgl, глобал PIXI |
Единственный PIXI в пуле: 2D-GPU вместо 3D. Резервный путь, если нужен GPU-эффект без three |
| Hello Monday — hellomonday.com/work | 2d+webgl+webgl2, R3F-маркеры ×6 | Большая история на 3D-сцене; смотреть сценарий, техника вторична |
| Antinomy — antinomy.studio | 2d+webgl2, __THREE__, 2 канваса |
Нестандартные раскладки; 3D фоновое |
| abeto — abeto.co | webgl2, __THREE__, канвасов 0 |
Авторы Messenger; сам сайт — визитка |
| Monks — monks.com | 2d+webgl, 1 канвас | Корпоративный масштаб; для нас — только напоминание, что за ними Persepolis |
| Мasterclass-соседи: Merci-Michel, Locomotive, Studio Freight | 3D не пойман | Канон плавного скролла и тона; техника — не наша задача |
3D доказано, но для Колоссуса брать нечего — экономия кликов Жану.
| Сайт | Что поймано | ПОЧЕМУ мимо |
|---|---|---|
| Messenger — messenger.abeto.co | webgl2, __THREE__, draco; в бандле gl_FragColor и родня ×1421, three_core ×370 — технически самое сильное 3D всего участка |
Мультяшная цветная планета с курьером. Игровой мир, светлая палитра, милота — прямая противоположность бетону и металлу. Уровень исполнения недостижим в наших бюджетах и не нужен |
| Bruno Simon — bruno-simon.com | webgl2+2d, __THREE__, three_core ×259, физика |
Портфолио-машинка. Игрушка, яркая, персональная. Клуб на 6500 человек не может выглядеть как аркада |
| Henry Heffernan — henryheffernan.com | webgl2+webgl, __THREE__, three_core ×220 |
Ретро-компьютер в 3D. Ностальгический скевоморфизм — чужая эпоха и чужой юмор |
| Mana Yerba Mate — manayerbamate.com | webgl2, __THREE__, three_core ×205, скролл-моушн ×411 |
Яркая продуктовая витрина. «Товар как объект» нам нужен, но не в этой светлой глянцевой подаче |
| Persepolis Reimagined — persepolis.getty.edu | webgl2, 1 канвас, GLSL ×103 | Музейная тёплая подача с песочной палитрой и обучающим тоном. Плавность глубины — красиво, но копировать нечего: у нас не экскурсия по руинам |
| Lando Norris — landonorris.com | webgl2+2d, __THREE__, 21 канвас |
Персональный бренд гонщика: цвет, скорость, спонсорские блоки. Плюс 21 канвас — прямое нарушение нашего закона эффектов; хороший пример того, как НЕ надо |
| KPRverse — kprverse.com | webgl2, __THREE__, three в скриптах |
Ближе всех по «тёмному», но это неоновый киберпанк с глитчем и NFT-эстетикой 2021 года. Колоссус — не неон, а сигнальный красный на бетоне |
| Immersive Garden / Noomo / North Kingdom / Hello Monday | three доказан | Агентские шоурилы: тёплый свет, цвет, много истории про себя. Приём не вынимается — вынимается только «вау вообще» |
| Utsubo / Antinomy / Synchronized / Metabole / Phantom / abeto / Lenis.dev | контекст пойман | 3D фоновое или демонстрационное; для наших разделов приёма нет (детали — во втором эшелоне) |
Заявлены как WebGL/3D-студии, но зонд не поймал ни одного графического контекста. Важно, потому что список обещал 3D.
is3d=false, 0 канвасов, HTML 5,9 КБ, три внешних
скрипта. Легенда жанра — но их собственный сайт сейчас без WebGL.2d, 3 канваса) · Locomotive · Studio Freight ·
basement grotesque · Vide Infra · Build in Amsterdam · Cuberto ·
By-Kin · Ochi · Sennep (2d) · Rezo Zero · Cortex ·
madeby.studio (2d) · Psychoactive — контекста нет. Ценность у них
типографическая и композиционная, к 3D-участку не относится.__THREE__ в странице ЕСТЬ, но контекст за 8 секунд
так и не создан (сцена, судя по всему, стартует по действию пользователя).
Доказательство слабое — если понадобится, проверять руками.2d. Знаменитая 3D-собака в зонд не попала: либо сцена
стартует по клику, либо её больше нет. Доказательство слабое.2d, 2 канваса; конфигуратор не на лендинге,
/build отдаёт 404. Реального 3D-конфигуратора по этому URL не увидеть.2d. Интерактивная типографика есть, WebGL нет.<script>window.onload=function(){window.location.href="/lander"}</script> —
домен припаркован. Обещанного WebGPU-рендерера по этому адресу нет./lander. Мёртв.hello-elementor, jQuery, Swiper), 0 канвасов,
1 видео. Легендарная индустриальная 3D-версия Active Theory снята. Как 3D-референс
позиция мертва — именно та, на которую список возлагал больше всего надежд по ДНК
(«тяжёлый индустриальный 3D: металл и свет»).TimeoutError: Page.goto), но curl
отдаёт живой HTML. Сайт жив, просто тяжёлый; 3D не проверено.