Компьютерная графика
Graphics на собеседовании (FAANG)
NVIDIA нанимает graphics engineers для работы над DLSS, Vulkan extensions, RTX. AMD - для FidelityFX, RDNA architecture. Epic - для Unreal Engine renderer. Apple - для Metal, Core Image. Эти позиции требуют глубокого понимания GPU архитектуры, rendering algorithms и системного мышления. Интервью проверяет именно это - не знание API, а понимание почему GPU работает именно так.
- **NVIDIA Graphics Engineer** интервью включает вопросы о Turing RT Core архитектуре, BVH traversal оптимизации и DLSS temporal накоплении - понимание hardware на уровне микроархитектуры
- **Epic Games Rendering Engineer** спрашивает о Lumen GI implementation details, Nanite virtual geometry и Unreal RDG internals - нужно читать исходник
- **Apple GPU Software** интервью фокусируется на Metal tile shading, Apple Neural Engine integration и offline shader compilation - platform-specific deep knowledge
- **Unity Graphics** спрашивает о SRP (Scriptable Render Pipeline) design, DOTS rendering и WebGPU интеграции - понимание архитектурных решений в большой кодовой базе
Математические вопросы
**Линейная алгебра и геометрия** - фундамент graphics engineer interview. Вопросы строятся вокруг трансформаций, геометрических тестов и численных методов. Интервьюер проверяет понимание «почему», а не способность зазубрить формулу.
Reversed Z-Buffer (1→0 вместо 0→1 для near→far): float precision выше около 1.0 в IEEE 754 - большинство бит тратится на значения близкие к нулю. При reversed Z near plane = 1.0, far = ~0.0 - вся precision сосредоточена вблизи, где нужна. NVIDIA DX12 developer blog показывает: z-fighting исчезает в 10x большем диапазоне при reversed Z.
Камера с near=0.1m, far=10000m (открытый мир). Z-fighting (мерцание) на объектах дальше 500m. Лучшее решение без изменения far plane?
Вопросы о Graphics Pipeline
**Pipeline вопросы** проверяют понимание как данные проходят через GPU. Интервьюер часто задаёт вопросы в формате «что произойдёт если...» - вопросы на reasoning, не на memorization.
Mesh Shaders (D3D12 Ultimate, Vulkan) - современная замена Vertex/Hull/Domain/Geometry shader pipeline. Два stages: Task Shader (amplification - как geometry shader) и Mesh Shader (генерирует primitives напрямую без Vertex Buffer). Nanite использует Mesh Shaders для эффективного рендеринга кластеров треугольников. Поддерживается: RTX 2000+, RX 6000+, Apple M1 (через Metal).
Fragment shader выполняет дорогое вычисление (ray marching). 90% пикселей закрыты непрозрачной геометрией. Как сократить количество вызовов fragment shader?
Оптимизационные вопросы
**GPU оптимизация** - одна из ключевых тем на graphics engineer интервью. Правильный ответ всегда начинается с профилирования: определить является ли система vertex-bound, fragment-bound, memory bandwidth-bound или compute-bound. Разные bottlenecks требуют разных решений.
RenderDoc GPU Timing (или Nsight Graphics от NVIDIA): GPU timestamp queries для каждого render pass. Видишь точно где GPU тратит время: ShadowDepths 40%, BasePass 25%, Translucency 15%, PostProcess 20%. Это говорит - снижать shadow cascade distance или использовать static shadows. Без этих данных оптимизация вслепую.
Сцена с 200 одинаковыми металлическими сферами (одинаковый material). Fragment shader тяжёлый (PBR + 16 light sources). GPU: 40fps. Какой bottleneck и первый шаг оптимизации?
Graphics System Design
**System Design вопросы** на senior graphics engineer позиции - самые показательные. Интервьюер даёт открытую задачу и оценивает структурированность мышления, понимание trade-offs, способность выбрать правильную технологию для задачи.
Лучший ответ на system design - показать понимание зачем каждый компонент выбран. «Lumen хорошо» - слабый ответ. «Lumen для dynamic GI в помещениях, cascade shadows для directional light, SH для cheap ambient - потому что каждый решает свою задачу по-разному с разным cost» - сильный ответ.
На graphics интервью нужно знать все Vulkan API вызовы наизусть
Интервьюеры оценивают понимание GPU архитектуры, принципов rendering и способность решать проблемы. Конкретный API знает каждый, кто документацию прочитал
Лучшие graphics engineers в NVIDIA, AMD, Epic переходили между D3D, Vulkan, Metal - они знают принципы, API выучивают по мере необходимости. 'Как вставить barrier в Vulkan' - интернет знает. 'Почему здесь нужен barrier и какой именно' - понимание архитектуры
Игра требует water reflections с высоким качеством для главного квеста (озеро в центре локации) и average quality везде. Как организовать систему?
Ключевые идеи
- **Математика:** Reversed Z-Buffer для precision; SLERP vs LERP vs NLerp для quaternions; Möller-Trumbore для ray-triangle; frustum planes для culling
- **Pipeline:** Depth Prepass + Early-Z для fragment rejection; Forward vs Deferred - lights × objects vs bandwidth; Alpha blending commutative: back-to-front или OIT
- **Оптимизация:** профилировать сначала; разрешение тест → fragment-bound; LOD/instancing → vertex-bound; texture compression → bandwidth-bound
- **System Design:** layered качество по importance; правильный tool для каждой задачи; Trade-off обоснование важнее правильного ответа
Связанные темы
Интервью требует знания всего graphics стека:
- Graphics Engine Architecture — System design вопросы о renderer архитектуре - прямое применение знаний о RDG, RHI и shader pipeline
- Neural Rendering: NeRF — NeRF и 3DGS - горячие темы на research-oriented graphics позиции в NVIDIA Research, Google, Meta AI
- Differentiable Rendering — Differentiable rendering и inverse rendering - ключевые темы для ML graphics позиций в Adobe Research, NVIDIA и академии
Вопросы для размышления
- Mesh Shaders (D3D12/Vulkan) заменяют традиционный Vertex-Hull-Domain-Geometry pipeline. Как Nanite использует Mesh Shaders для рендеринга кластеров из ~128 треугольников, и почему это эффективнее традиционного pipeline для виртуальной геометрии?
- DLSS 3 (Frame Generation) генерирует synthetic frames между реальными кадрами через optical flow и temporal data. Как это влияет на input latency vs visual smoothness trade-off, и почему Nvidia добавила Reflex latency reduction вместе с DLSS 3?
- Vulkan Descriptor Sets требуют явное управление descriptor pools и binding frequencies. Правильная группировка (per-frame, per-pass, per-material, per-object) критична для производительности. Как движки (Unreal, Unity) автоматизируют этот layout для художников и программистов без знания Vulkan internals?