На якому рушії ви будуєте і чому саме на ньому?
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, з повідомленням поруч із моделлю. У проєкті з графікою, створеною на замовлення, джерело і власність кожного активу визначаються списком, актив за активом.
Що відбувається з multiplayer?
Це найчесніша резервна умова, яку ми маємо. Жоден із п’яти проєктів не має спільного стану між гравцями: гра-розслідування тримає все в `localStorage`, симуляція роботів тримає стан у пам’яті сторінки. Гра для кількох людей одночасно потребує авторитарного сервера стану, синхронізації та обробки мережевої затримки — нових частин, а не опції, яку можна просто поставити галочкою. Це можна побудувати, але це входить у проєкт як окремий підсистемний модуль, зі своєю роботою, а не як опція.
Скільки часу потрібно, щоб побачити щось, у що можна грати?
Я не даю вам число, яке не можу підтвердити. Я даю вам порядок: перша поставка — це прототип, у який можна грати, з правильною логікою та мінімальною графікою, і він має працювати без жодного API-ключа — так само, як наша гра-розслідування проходиться повністю на скриптованих репліках. Лише після того, як логіка працює, додаються графіка, голос і модель. Якщо постачальник обіцяє вам строк до того, як побачить логіку, він обіцяє те, що не виміряв.
Скільки коштує тримати персонажів «живими», тобто на моделі?
Витрати ви контролюєте через межі, записані в коді, а не через надію. У грі-розслідуванні: історія, яку надсилають до моделі, обрізається до останніх 20 повідомлень, повідомлення гравця — до 600 символів, відповідь — до 400 токенів, а максимальний час очікування — 45 секунд. Синтез голосу обрізає текст до 900 символів. Кожен із цих порогів — це межа, яку ми можемо рухати разом, із прямим впливом на рахунок. І залишається режим без ключів, у якому гра працює на скриптованих репліках і нічого не споживає.
Що ви не робите?
Ми не стверджуємо, що анімація є доведено фізичною. У симуляції роботів усі 15 дій у коді позначені як `cinematic`, панель доказів декларує `actionValidation: "none"`, а перевірка запуску сьогодні відповідає «Release qualification: blocked», тому що відповідь стопора суглоба за 5 ms не відкалібрована на реальному обладнанні. Ми не постачаємо multiplayer як приховану опцію. Ми не подаємо себе як студію Unity або Unreal. І ми не додаємо демо в пропозицію, не сказавши, чи воно публічне — наша гра-розслідування, наприклад, працює лише локально і не має адреси.