На каком движке вы строите и почему именно на нём?
Three.js поверх WebGL, в браузере. Причина практическая: результат поставки — ссылка. У вас нет установки, нет магазина, нет процесса проверки, а исправление попадает ко всем в момент публикации. Мы используем его в пяти репозиториях — версии 0.184 и 0.185 — иногда через `@react-three/fiber` и `@react-three/drei`, иногда написанным напрямую, вплоть до уровня, где мы вручную управляем атрибутами буфера. Четыре проекта сейчас открыты публично, так что это можно проверить без того, чтобы спрашивать нас.
Можете сделать в Unity или Unreal?
Мы берем их по заказу, но честный ответ начинается иначе: у нас нет ни одного поставленного проекта на Unity или Unreal. Мы проверили весь код на рабочей машине — ни одной ссылки на `UnityEngine`, ни одного файла `.uproject`, ни одного `.csproj`, ни одной макрокоманды Unreal. Движки даже не установлены. Что практически меняется, если вы выбираете один из них: поставляемый результат больше не является веб-адресом, а сборкой для каждой платформы; дистрибуция проходит через магазин или установщик; а условия лицензирования — это те, которые опубликованы Unity, соответственно Epic, на дату проекта, и мы проверяем их тогда, а не предполагаем. Как мы действуем: начинаем с платного прототипа и, если проект требует опыта работы с движком, которого у нас нет внутри, говорим об этом до договора.
Работает на телефоне?
Да, и это решение принято на этапе сборки, а не надежда. Шейдер на этом сайте имеет три ступени качества — 24, 40 и 80 итераций — и сам понижает уровень: на мобильном он стартует на самой лёгкой, а на любом устройстве с 4 ядрами или меньше максимальная ступень становится средней. Коэффициент пикселей ограничен везде: 0,5 на низкой ступени здесь, 1,5 на мобильном в демонстраторе мира, 1,6 и 1,75 в двух сценах городской карты. Когда canvas выходит за экран, цикл останавливается. Чего я не могу дать: число кадров в секунду на конкретном телефоне — у нас нет такой публикуемой метрики, поэтому мы её не выдумываем.
Игра открывается в браузере или устанавливается?
Всё, что мы построили до сих пор, открывается в браузере. Три проекта — статические сборки, которые наш Nginx раздаёт с сервера; один размещён на Vercel. Устанавливаемая игра — на десктопе, телефоне или консоли — это другой разговор: он требует аккаунта разработчика, процесса проверки, возрастной классификации и, скорее всего, другого движка. Ни один из наших проектов не распространяется через магазин, так что это был бы новый путь со своими шагами.
Кому принадлежат код и активы в конце?
Код, написанный для вашего проекта, принадлежит вам, а условия прописываются в контракте до начала работы. Для активов различие важно: те, что сгенерированы из примитивов или из публичных данных, идут без дополнительных ограничений — машина в демонстраторе мира построена из коробок, капсул и цилиндров, город в городской сцене — это OpenStreetMap поверх Copernicus DEM. Импортированные сохраняют свою лицензию: роботы Unitree — BSD-3-Clause из MuJoCo Menagerie, с уведомлением рядом с моделью. В проекте с графикой, созданной под заказ, источник и право собственности на каждый актив определяются по списку, актив за активом.
Что происходит с многопользовательским режимом?
Это самое честное ограничение, которое у нас есть. Ни в одном из пяти проектов нет общей между игроками состояния: в игре-расследовании всё хранится в `localStorage`, симуляция роботов держит состояние в памяти страницы. Игра для нескольких людей одновременно требует авторитетного сервера состояния, синхронизации и обработки сетевой задержки — новых частей, а не опции, которую можно просто отметить. Это можно построить, но это входит в проект как отдельный подсистемный модуль, со своей работой, а не как настройка.
Сколько времени нужно, чтобы увидеть что-то играбельное?
Я не дам вам число, которое не могу подтвердить. Я дам вам порядок: первая поставка — это играбельный прототип с правильным правилом и минимальной графикой, и он должен работать без какого-либо API-ключа — так же, как наша игра-расследование полностью проходит на скриптовых репликах. Только после того, как правило держится, добавляются графика, голос и модель. Если поставщик обещает срок до того, как увидит правило, он обещает то, что не измерял.
Сколько стоит держать персонажей «живыми», то есть на модели?
Расходы вы контролируете через ограничения, записанные в коде, а не надеждой. В игре-расследовании: история, отправляемая в модель, обрезается до последних 20 сообщений, сообщение игрока — до 600 символов, ответ — до 400 токенов, а максимальное время ожидания — 45 секунд. Синтез речи обрезает текст до 900 символов. Каждый из этих порогов — это линия, которую мы можем двигать вместе, с прямым влиянием на счёт. И остаётся режим без ключей, в котором игра работает на скриптовых репликах и ничего не расходует.
Чего вы не делаете?
Мы не утверждаем, что анимация физически доказана. В симуляции роботов все 15 действий помечены в коде как `cinematic`, панель доказательств объявляет `actionValidation: "none"`, а проверка запуска сегодня отвечает «Release qualification: blocked», потому что ответ 5 ms ограничителя сустава не откалиброван на реальном оборудовании. Мы не поставляем multiplayer как скрытую опцию. Мы не представляем себя как студию Unity или Unreal. И мы не помещаем demo в предложение, не сказав, публичное ли оно — наша игра-расследование, например, работает только локально и не имеет адреса.