惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Threat Research - Cisco Blogs
Google DeepMind News
Google DeepMind News
H
Help Net Security
H
Hackread – Cybersecurity News, Data Breaches, AI and More
MyScale Blog
MyScale Blog
Webroot Blog
Webroot Blog
Stack Overflow Blog
Stack Overflow Blog
T
The Blog of Author Tim Ferriss
D
Docker
L
LangChain Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Know Your Adversary
Know Your Adversary
A
About on SuperTechFans
U
Unit 42
NISL@THU
NISL@THU
M
MIT News - Artificial intelligence
T
The Exploit Database - CXSecurity.com
K
Kaspersky official blog
Martin Fowler
Martin Fowler
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Hacker News - Newest:
Hacker News - Newest: "LLM"
Engineering at Meta
Engineering at Meta
Blog — PlanetScale
Blog — PlanetScale
Scott Helme
Scott Helme
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 【当耐特】
WordPress大学
WordPress大学
Attack and Defense Labs
Attack and Defense Labs
P
Proofpoint News Feed
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
TaoSecurity Blog
TaoSecurity Blog
B
Blog RSS Feed
小众软件
小众软件
G
Google Developers Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
SegmentFault 最新的问题
博客园 - 司徒正美
腾讯CDC
大猫的无限游戏
大猫的无限游戏
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Application and Cybersecurity Blog
Application and Cybersecurity Blog
S
Security @ Cisco Blogs
aimingoo的专栏
aimingoo的专栏
W
WeLiveSecurity
V
Vulnerabilities – Threatpost
N
News and Events Feed by Topic
Google Online Security Blog
Google Online Security Blog
Cisco Talos Blog
Cisco Talos Blog
C
Check Point Blog

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Мы делаем ГИГАХРУЩ: браузерный survival horror без движка, ассетов и спокойной жизни
Теневик · 2026-06-03 · via Все публикации подряд на Хабре

Средний

7 мин

9.8K

Привет. Я пресс атташе команды ГИГАХРУЩ — браузерный survival horror / ARPG shooter про вылазки внутри безграничной бетонной структуры.

Да, звучит как питч из папки после этого меня точно забанят, поэтому начну с технической части. Это не Unity WebGL, не Phaser, не Godot export, не React‑обвязка вокруг canvas и не набор купленных ассетов. Игра собрана как один браузерный билд на TypeScript/Vite, WebGL/canvas, процедурных текстурах, процедурных спрайтах, процедурном звуке и плоских структурах данных.

Идея была простая и неприятная: сделать не красивую демку на три комнаты, а живой survival loop, где игрок готовит еду, воду, патроны и документы, уходит в вылазку, встречает NPC, монстров, фракции, торговлю, квесты и самосбор, а потом возвращается не в абстрактный хаб, а в мир, который помнит последствия.

В этой статье не будет «мы сделали революционный продукт, поставьте звезду». Будет другое: как маленькая браузерная игра постепенно превратилась в инженерный мешок с WebGL‑рейкастером, A‑Life, процедурной генерацией, локальными сохранениями, самодельным HUD и миллиардами токенов черновиков, проверок, правок и выброшенных вариантов.

Почему браузер

Потому что установка убивает импульс. Человек увидел странную игру про самосбор, нажал ссылку, загрузил страницу, умер в коридоре. Идеальный сценарий.

Браузер при этом сразу ставит рамки:

  • нельзя рассчитывать на тяжелый runtime;

  • нельзя прятать долгую загрузку за лаунчером;

  • нельзя раздать полгига ассетов и надеяться, что игрок терпелив;

  • нельзя забыть про pointer lock, fullscreen, mobile viewport, iframe-хосты и localStorage;

  • нельзя делать вид, что WebGL/canvas сами решат UX.

Поэтому базовое правило проекта стало таким: ноль runtime‑зависимостей, один браузерный билд, максимум данных и поведения из кода.

Это сильно отрезвляет. Если у тебя нет папки с ассетами, то текстуры должны родиться процедурно. Если нет нормального 3D‑движка, то камера и мир должны быть достаточно простыми, чтобы держаться на raycasting и фейках. Если нет ECS‑библиотеки, то сущности должны быть плоскими объектами, а мир — typed arrays и маленькие регистры.

Мир как данные, а не сцена

Главная ошибка, которую хотелось не повторять: делать «уровень» как коллекцию красивых объектов. Для хоррора это приятно, но для survival loop быстро становится мертвым декором.

В ГИГАХРУЩЕ мир описывается как клеточная поверхность с комнатами, коридорами, дверями, признаками, текстурами, контейнерами, сущностями и событиями. Рендер читает состояние, системы меняют состояние, генераторы строят состояние. Никакая картинка не должна владеть геймплеем.

Пример разделения:

  • core хранит примитивные формы и World;

  • data хранит определения предметов, оружия, фракций, квестов, монстров;

  • gen строит этажи, POI, комнаты, маршруты и начальное размещение;

  • systems обновляют AI, бой, квесты, экономику, самосбор, сохранение;

  • render только рисует.

Звучит скучно, но это как раз та скука, которая спасает игру от превращения в кашу. Когда появляется новый странный этаж, монстр или терминал, он не должен лезть в главный цикл и говорить: «Я особенный, вызовите меня вручную из main.ts». Он должен лечь в существующий контракт.

Рейкастер вместо честного 3D

Честный 3D был бы красивее. Еще он был бы дороже, тяжелее, дольше и потребовал бы другой pipeline.

Для ГИГАХРУЩА важнее не геометрическая честность, а решение игрока:

  • вижу ли я коридор;

  • понимаю ли я, где опасность;

  • могу ли я оценить дверь, цель, NPC, укрытие;

  • успеваю ли я испугаться до того, как меня съели.

Поэтому используется WebGL raycasting с процедурными поверхностями, спрайтами и canvas HUD. Картинка не пытается конкурировать с AAA. Она делает другое: быстро показывает бетонный лабиринт, дистанции, туман, вспышки, монстров, метки, кровь, интерфейс и события.

Самая полезная мысль тут: фейк нормален, если он рождает то же игровое решение.

Если игрок обходит темный проем, потому что там слышен чужой шаг, ему не важно, сколько полигонов в этом проеме. Ему важно, что решение было понятным и страшным.

Процедурные ассеты как дисциплина

Когда ассетов нет, исчезает соблазн решить проблему картинкой из интернета. Это больно, но удобно.

Текстуры стен, пола, следы, пятна, шум, спрайты монстров, многие визуальные пакеты и звуковые события генерируются из кода. Плохо сгенерированная картинка выглядит бедно, зато хорошая процедурная картинка умеет быть системной:

  • ее можно привязать к типу комнаты;

  • ее можно менять после самосбора;

  • ее можно использовать как след события;

  • ее можно сделать дешевой для билда;

  • ее можно воспроизводить по seed.

Да, иногда это выглядит грубо. Зато грубость честная: она не маскирует пустоту высоким разрешением.

A-Life без театра одного игрока

Я не хотел делать мир, где NPC появляются из воздуха рядом с игроком, а потом исчезают, когда он отвернулся. Поэтому A‑Life устроена как компактный слой идентичностей.

В начале новой игры создается большой пул процедурных жителей. На активном этаже материализуется только нужная часть: живые NPC, их инвентарь, отношения, фракции, занятия, смерть, память о событиях. Остальные остаются компактными записями, а не симулируются покадрово в фоне.

Это компромисс между «все честно симулируем всегда» и «все вокруг игрока — декорация». Полная симуляция всего мира была бы дорогой и бесполезной. Полная декорация убила бы ощущение жизни.

Ключевые правила:

  • обычные NPC не восполняются бесконечным спавнером;

  • смерть остается фактом;

  • фракционные и экономические события могут оставить след;

  • текущий этаж живет полноценно, остальные хранят компактное состояние;

  • игрок участвует в тех же социальных числах, что и NPC.

Когда игра начинает помнить, кого ты убил, кому помог, где украл и кто после этого перестал торговать, даже грубый интерфейс внезапно получает вес.

Самосбор как мутация мира, а не эффект на экране

Самосбор — центральная угроза. Его легко было сделать как красивую заставку: включить сирену, наложить красный фильтр, заспавнить монстра, снять HP.

Но тогда это был бы просто погодный эффект.

В текущей модели самосбор — локальная мутация мира: предупреждение, герметизация, проверка укрытий, давление, монстры, последствия, перестройка части пространства и события, которые потом остаются в состоянии этажа.

Это важно для ощущения: игрок не пережил «ивент», он пережил изменение места. До него комната была маршрутом, после него стала проблемой. До него дверь была проходом, после него стала границей. До него NPC был торговцем, после него может стать записью в памяти мира.

Почему не «ИИ написал игру»

Потому что это плохая история и плохая инженерия.

LLM в проекте используется много. Очень много. На уровне «если посчитать все черновики, ревью, планы, проверки, переписывания и выброшенные варианты, счет ушел в миллиарды токенов». Это смешно звучит, и, наверное, именно эта фраза гарантированно разозлит часть людей.

Но важная деталь: токены не компилируются.

Компилируется TypeScript. Работает WebGL. Падает typecheck. Ломаются тесты. Не сходятся контракты. Генератор может закрыть комнату. Сохранение может забыть состояние. HUD может стать нечитаемым. Игрок может не понять, что делать в первые две минуты.

LLM здесь не «автор игры», а шумный ускоритель итераций, черновиков и ревью. Он хорошо производит варианты и плохо несет ответственность. Ответственность остается в коде, тестах, локальных правилах проекта и ручной проверке.

Самый неприятный урок: нейросетью легко нагенерировать контент, но трудно сохранить архитектурный вкус. Поэтому у проекта жесткие внутренние правила:

  • не добавлять новый runtime без причины;

  • не тащить геймплей в рендер;

  • не расширять enum под каждый красивый термин;

  • не делать refill NPC, который стирает последствия;

  • не писать новый системный слой ради одного POI;

  • не обещать в README то, чего нет в билде.

Именно эти скучные ограничения важнее любого «вау, AI».

Что уже есть в текущем билде

Сейчас это не финальная игра, но уже не прототип с одной кнопкой. В браузерном билде есть:

  • подготовка к вылазкам: еда, вода, патроны, медицина, документы;

  • бой, оружие, PSI и монстры;

  • процедурные и авторские этажи;

  • фракции, торговля, экономика и караваны;

  • сюжетные и побочные задания;

  • A‑Life NPC с перманентными смертями;

  • самосбор с предупреждениями, укрытиями и последствиями;

  • localStorage‑сохранение;

  • canvas HUD, карта, лог сообщений, настройки интерфейса;

  • опциональная НЕТ‑СФЕРА через Cloudflare Worker/D1, если включить онлайн‑контур.

Отдельно смешно, что самая тяжелая работа оказалась не в «сделать монстра», а в «сделать так, чтобы игрок понял, что сейчас вообще можно делать».

Что болит

Первый запуск. Интерфейс. Читаемость. Темп вылазки. Плотность текста. Баланс между «я ничего не понимаю» и «я хочу разобраться».

Системы уже умеют больше, чем новый игрок способен принять за первые десять минут. Это типичная болезнь игры, которая долго росла изнутри: разработчик видит связи, игрок видит шум.

Поэтому сейчас приоритет не в том, чтобы добавить еще двадцать монстров. Приоритет в том, чтобы один живой путь был понятен:

  1. проснулся в жилой зоне;

  2. взял еду, воду, патроны;

  3. понял ближайшую зацепку;

  4. вышел в вылазку;

  5. получил опасность;

  6. принял решение;

  7. вернулся или умер с понятной причиной.

Когда этот путь работает, поверх него можно строить странность. Когда он не работает, вся процедурность превращается в дым.

Зачем я это тащу на Хабр

Потому что мне интересна не только реакция "нравится / не нравится игра", а техническая проверка: где такая архитектура выглядит разумной, а где я сам себе построил бетонный гроб.

Мне особенно интересны три темы:

  • насколько оправдана ставка на zero-runtime browser build для игры такого типа;

  • где лучше проводить границу между симуляцией и кинематографическим фейком;

  • как не дать LLM-ускоренной разработке распухнуть в набор красивых, но несвязанных систем.

Если хочется просто посмотреть, что это за странность, игра запускается в браузере:

Игра ГИГАХРУЩ (запустится в браузере)

Direct build

Telegram-канал для обновлений

А если хочется ругать — лучше ругать конкретно: первый запуск, HUD, WebGL‑картинку, A‑Life, procedural generation, самосбор или саму идею survival horror в браузере без движка.

ГИГАХРУЩ все равно уже существует. Теперь вопрос в том, получится ли сделать из этой бетонной массы игру, в которую человек не только зайдет из любопытства, но и вернется после первой смерти.