Назад

Halloween Manor

Хеллоуинская браузерная игра: вы — призрак мрачного старого особняка и, вселяясь в портреты, зеркала и кресла-качалки, пугаете посетителей с фонариками, пока те не выбегут за парадную дверь. Посетители — талисман Triboo в хеллоуинских костюмах; от костюмов до анимации они созданы с помощью Tripo API.

Автор: Theodore
Попробовать онлайн
Halloween ManorПопробовать онлайн

Описание

Halloween Manor — хеллоуинская мини-игра, которая запускается прямо в браузере. Вы — призрак мрачного старого особняка: посетители с фонариками сами заходят в дом, а ваша задача — вселяться в вещи, выбирать момент, чтобы явиться, и одного за другим заставлять их с воплями выбегать за парадную дверь. В доме может быть до четырёх посетителей одновременно, иногда они приходят парами, и храбрость у всех разная — таблички с именами подскажут, кто трусишка, а кто скептик.

Предметы бывают двух видов. Музыкальная шкатулка и кухонная дверь — приманки: они издают звук, который притягивает всех, кто его слышит. Лампы, кресло-качалка, портрет, напольное зеркало, а также кровать и шкаф в спальне — пугалки, и срабатывают они, только если на них кто-то смотрит: над предметом загорается глаз, когда его прямо сейчас кто-то видит. Базовая тактика — сначала приманить, потом напугать: музыкальная шкатулка работает в паре с лампой в спальне, а кухонная дверь — с креслом-качалкой. На портрете — обычная дама, пока вы в него не вселитесь: тогда она переводит взгляд, а её лицо оплывает и превращается в нечто ужасное; из напольного зеркала выскакивает лицо; а на стенах вестибюля, коридора, кабинета, гостиной и спальни висят шесть жутких картин.

Посетители видят только то, на что направлен их фонарик. Когда на вас падает луч, вы становитесь плотнее, а они останавливаются и всматриваются — но одного этого мало, чтобы их напугать. Нажмите F или правую кнопку мыши, чтобы явиться: свет поблизости дважды притухает, будто лампочки вот-вот перегорят, а через 0,6 секунды вы принимаете облик тёмной фигуры и удерживаете его 1,5 секунды, медленно поднимая голову. Явление пугает лишь людей двух типов: тех, кто светит на вас фонариком, и тех, кто уже на взводе и видит вас. Чем сильнее человек напуган, тем сильнее эффект, поэтому сначала расшатайте людям нервы с помощью предметов, а затем явитесь и довершите дело. Перезарядка явления — 18 секунд.

Удерживайте левую кнопку мыши на предмете около полсекунды, чтобы поставить ловушку: предмет затягивает инеем, и он срабатывает сам, когда кто-то подходит близко. Одновременно можно поставить две ловушки, а если за 60 секунд никто не подойдёт, ловушка снимается. Когда прицел наведён на предмет, на полу проступает бледная линия инея — она очерчивает зону, в которой этот предмет может напугать (или приманить) людей, а маленький глаз перед именем посетителя загорается, если ваш следующий ход его достанет. После вашего действия надпись у прицела сообщает, что произошло, — «Theo jumped» или «No one saw it».

Одна партия — это одна ночь продолжительностью около пяти минут. В начале входит первый посетитель, затем каждые 12 секунд — ещё по одному, пока в доме не наберётся четверо. На отметке 3:20 вход закрывается — гаснет свет на крыльце, и больше никто не приходит, — а на 4:30 светает, и все, кто ещё остался внутри, уходят сами. Когда уходит последний, открывается книга посетителей: кто когда пришёл, кто от чего сбежал, кто ушёл на рассвете; в конце — заключительная фраза, которая зависит от того, скольких вы спугнули. Очков нет, побед и поражений тоже; выберите Keep haunting, чтобы продолжить, или Another night, чтобы начать заново.

Управление: с мышью и клавиатурой игра идёт от третьего лица, а призрак — это вы. Кликните, чтобы захватить курсор, парите с помощью WASD (прямо сквозь стены), осматривайтесь мышью и приближайте или отдаляйте камеру колесом. Кликните по предмету в пределах 4 метров, чтобы вселиться в него, удерживайте левую кнопку, чтобы поставить ловушку, и нажмите F или правую кнопку мыши, чтобы явиться. Esc освобождает курсор и показывает полную схему управления, M выключает звук, а качество графики настраивается в правом нижнем углу. Сквозь стены посетителей не видно, поэтому идите на звук их шагов — в наушниках это проще. На телефонах и планшетах дом превращается в кукольный домик с видом сверху: коснитесь предмета, чтобы вселиться в него, а обзор можно вращать. В этом режиме нет явления, ловушек и картин — напугайте посетителя ещё раз, пока он не успокоился, и он сбежит.

Рекомендуется браузер с поддержкой WebGPU, например свежая версия Chrome или Edge; в браузерах без WebGPU игра автоматически переключится на WebGL2. Игра однопользовательская, без входа в аккаунт и скачивания, но при первом запуске придётся немного подождать, пока подгрузятся модели и скомпилируются шейдеры. Интерфейс игры — на английском языке.

Как использовался Tripo

Все персонажи игры — посетители с фонариками и призрак, за которого вы играете, — созданы с помощью Tripo API; дом, мебель и пропсы собраны кодом из простых примитивов, а картины, портрет и лицо в зеркале — отдельные 2D-текстуры.

  • Посетители: Triboo, талисман VAST — команды, создавшей Tripo, — в четырёх хеллоуинских костюмах: викторианский вампир, ночной исследователь с фонарём, ведьма и рисованный скелет. Сначала Tripo image-to-image ставит Triboo в T-позу, и все четыре костюма строятся на этом одном изображении, поэтому пропорции совпадают, а фигуры без проблем проходят риггинг; второй проход image-to-image надевает костюм, сохраняя круглое чёрное тело, логотип спереди и жёлтые кроссовки, а сам наряд сделан в духе аксессуаров дизайнерских виниловых игрушек: шляпы, плащи и воротники.
  • Модели посетителей: по каждому изображению костюма создаются четыре ракурса, а затем Tripo multiview-to-3D строит модель с PBR-текстурами. При виде от третьего лица посетителей чаще всего видно со спины, и четыре ракурса позволяют точно передать плащи и накидки на спине; текстуры очищены от запечённого освещения, чтобы свет давали лампы и фонарики самой игры.
  • Риги и анимация: после проверки пригодности к риггингу автоматический риггинг Tripo подгоняет гуманоидный скелет, а затем применяются восемь предустановленных анимаций Tripo — ожидание, ходьба, бег, оглядывание, страх, бегство и два вида испуга. Перед экспортом скрипт в Blender одинаково дорабатывает каждого посетителя: шарообразное тело, шляпа и плащ двигаются единым целым с торсом, аксессуары у ног не растягиваются вместе с ними, число треугольников ограничено, а root motion удалён. Каждый посетитель занимает около 1,1–1,7 МБ, текстуры — в WebP.
  • Призрак: Tripo text-to-image создал четыре концепт-арта, а выбранный прошёл через Tripo image-to-3D и стал белой моделью без текстур — полупрозрачный холодный туман, то, как он сгущается в луче фонарика, и тёмную плотную форму, которую он принимает при явлении, рисуют собственные шейдеры игры, так что текстуры ему не нужны. Затем при чистке в Blender лицо внутри капюшона вдавили, превратив в глубокую впадину, модель уложили менее чем в 8000 треугольников, а в вершины запекли окклюзию, поэтому внутри капюшона и в глубоких складках становится темнее.

Как это работает в браузере

Игрового движка нет: игра построена прямо на WebGPU-рендерере three.js, с использованием TypeScript и Vite, и в браузерах без WebGPU автоматически переключается на WebGL2. Сборка — это набор статических файлов с относительными путями, поэтому она открывается из любого подкаталога на любом статическом хостинге.

Фонарики — самые важные источники света в доме: у каждого посетителя есть свой, и каждый отбрасывает собственные тени. Шейдер призрака попиксельно вычисляет, в какие конусы света от фонариков тот попадает: в луче призрак сгущается, его контур становится чётче, и он приобретает лёгкий тёплый оттенок фонарика, а вне луча остаётся холодным туманом. При явлении призрак переключается на тёмный «плотный» материал, который перекрывает свет и записывает глубину, а с той стороны, куда бьёт фонарик, он чуть светлее. Когда призрак проходит сквозь стены и мебель, они растворяются вокруг него, а по краям проступает иней.

Весь звук синтезируется на лету через Web Audio — в игре нет ни одного аудиофайла. Крики, скрип кресла-качалки, электрическое гудение лампы, музыкальная шкатулка, резкий звуковой удар, когда из зеркала выскакивает лицо, и звуковая атмосфера дома — всё это генерируется кодом. Когда сквозь стены никого не видно, найти посетителей можно по шагам.

Кнопка старта ждёт готовности дома, первого наряда посетителя и предкомпиляции шейдеров для всего дома; после нажатия ночь начинается примерно через 20 миллисекунд. Остальные наряды скачиваются в фоне во время игры и попадают в ротацию, как только скомпилируются их пайплайны. Мерцание света ограничено, чтобы защитить игроков с фоточувствительностью: ни один источник света не притухает больше трёх раз за секунду. Качество графики — высокое или низкое; на низком рендеринг идёт в разрешении 75%.