Разработка игр
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?