Разработка игр

Game Development на собеседовании

Naughty Dog (The Last of Us), Rockstar (GTA), Epic Games (Fortnite) нанимают game engineers через технические интервью, похожие на FAANG, но с игровой спецификой. Quaternion математика, networking prediction, collision optimization, system design - это не академические вопросы, это то, с чем работаешь каждый день в AAA студии.

  • **Valve** известен математическими вопросами на интервью: как работает BRDF, почему GGX лучше Phong, как имплементировать SSR - это для rendering engineer позиции
  • **Epic Games** на senior Unreal Engine engineer интервью спрашивают о Task Graph internals, Nanite архитектуре и MultiDraw Indirect - глубокое понимание движка обязательно
  • **Riot Games** game engineer интервью включает latency compensation design для League of Legends и Valorant - реальные системы, которые нужно спроектировать с нуля
  • **Unity Technologies** на engine engineer позиции задают вопросы о DOTS/Burst архитектуре и IL2CPP трансляции - нужно понимать runtime, а не только API

Вопросы по физике и математике

**Физика и линейная алгебра** - обязательный baseline для game engineer. Интервьюер ожидает не только знания формул, но и понимания почему именно эти решения используются в играх: часто это приближения, обменивающие точность на скорость.

Fixed timestep для физики - стандарт в играх. PhysX и Bullet обновляются в фиксированных шагах (обычно 50Hz или 120Hz), независимо от рендер-частоты. Unity FixedUpdate, Unreal Physics tick - это именно fixed timestep. Без него физика детерминирована только если у всех игроков одинаковый FPS - невозможно в multiplayer.

Character controller использует Euler углы для вращения. При повороте камеры вверх на 90° теряется возможность повернуться по горизонтали. Это классический пример:

Networking и синхронизация

**Multiplayer networking** - одна из сложнейших задач в game engineering. Проблемы: latency (пакет летит 50-100ms), packet loss (UDP не гарантирует доставку), prediction (показать движение до подтверждения сервера), reconciliation (исправить ошибки предсказания). Все шутеры решают эти проблемы каждый кадр.

Valve Source Engine ввёл lag compensation в Counter-Strike: при hitbox регистрации сервер откатывается во времени на клиентский RTT. Результат: игрок целится в то, что видит (с учётом своего ping), а не в экстраполированную позицию. Это вызывает споры - игрок с 200ms пингом получает преимущество при стрельбе 'в прошлом'.

В Battle Royale игре 100 игроков получают позиции всех остальных от сервера. Сервер отправляет update 20 раз в секунду. Движение между updates - рывками. Как исправить?

Оптимизационные задачи

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

Unity Physics vs Havok Physics (Unity): стандартная Unity Physics - fully deterministic, написана под DOTS/Burst. Havok Physics интеграция - более feature-rich, быстрее для complex simulations, но не deterministic (разный порядок floating point операций на разных CPU). Для multiplayer игр нужна determinism - Unity Physics или custom решение с fixed-point математикой.

Сцена с 10000 врагами работает в 20fps. Profiler показывает 80% времени уходит на collision detection. Что делать?

Game System Design на интервью

**Game System Design** вопросы - финальный уровень senior интервью. «Спроектируй систему инвентаря для RPG», «Как реализовать save system для open world», «Спроектируй matchmaking для battle royale». Интервьюер ожидает: требования, архитектура, trade-offs, конкретные технические решения.

Реальный пример: Cyberpunk 2077 имел bug с save corruption при size > 8MB. Причина: внутреннее ограничение на размер save файла не было задокументировано. Игроки с тысячами предметов в инвентаре (crafting items) переполняли бюджет. Правильная архитектура save system должна включать compression, delta saves и size budgets.

На game engineer интервью нужно знать Unity/Unreal API наизусть

Интервьюеры оценивают понимание принципов (cache efficiency, threading, network latency) - конкретное API можно найти в документации

Опытный game engineer переходит между движками (Unity → Unreal → custom). Принципы остаются - API меняется. Naughty Dog использует proprietary engine, Epic - Unreal, Supercell - Unity. Понимание 'почему' важнее чем 'как именно в Unity 2023'

Save system сохраняет все объекты уровня при Quick Save. В open world 50000 объектов - сохранение занимает 8 секунд и фризит игру. Как исправить?

Ключевые идеи

  • **Физика:** Quaternion вместо Euler (нет gimbal lock); нормализованные векторы для dot product; float для GPU, double только для больших масштабов; Verlet integration - энергосохраняющий
  • **Networking:** Client-side prediction + reconciliation для шутеров; dead reckoning для interpolation; lag compensation - сервер откатывается на RTT игрока
  • **Оптимизация:** profiling первым; Collision Layers - самая дешёвая оптимизация; rotation matrix inverse = transpose (O(1)); иерархический A* для массовых агентов
  • **System Design:** начинать с требований, dirty flag для save system, асинхронность чтобы не блокировать main thread, versioning для обратной совместимости

Связанные темы

Интервью охватывает весь стек game development:

  • Архитектура AAA движка — Вопросы о rendering pipeline, threading и ECS - прямое продолжение знаний об архитектуре движков
  • Производительность: GPU и CPU — Оптимизационные вопросы на интервью - применение практик profiling, batching и culling к конкретным сценариям
  • Game Pipeline и CI/CD — System design вопросы часто включают build automation и analytics pipeline - production engineering в игровых студиях

Вопросы для размышления

  • Lag compensation позволяет серверу 'откатиться во времени' при регистрации попадания. Это честно для всех игроков? Как CS:GO и Valorant балансируют между rewarding aim skill и punishing high-ping players, и почему Riot выбрал другую модель для Valorant?
  • Save system с dirty flags сохраняет только изменённые объекты. Но что если игрок убит и хочет load save - нужно восстановить состояние 5 минут назад. Как реализовать temporal save history без неприемлемого overhead на память?
  • Deterministic physics обязательна для multiplayer с lockstep synchronization (RTS, файтинги). Но PhysX недетерминирован. Как Starcraft II реализует deterministic physics для тысяч юнитов, и почему это невозможно с floating point на разных CPU?

Связанные уроки

  • la-01-vectors-intro
Game Development на собеседовании

0

1

Войти