Примечание переводчика: в данной статье рассмотрен общий подход к выбору вопросов для собеседования на должность программиста компьютерной графики на примерах конкретных вопросов.
В последнее время я видел довольно много дискуссий в Твиттере о хороших и плохих вопросах для интервью.
Некоторые из этих вопросов кажутся полезными.
В основном, самые интересные выглядят открытыми.
Они могут привести к очень большим и обширным дискуссиям или даже не дать «правильного» ответа.
В конце концов, вам, скорее всего, нужно не знать ответ (он все равно будет 42), а увидеть процесс решения задачи и/или оценить общие знания и понимание собеседника.
Ниже я приведу примеры, которые использовал несколько раз и они предназначены для графических программистов с некоторым опытом.
Когда графический процессор производит выборку текстуры, как он выбирает уровень MIP для чтения?
Хорошо, на этот вопрос есть правильный ответ, но он все равно может привести к обширному обсуждению.Правильный ответ сегодня примерно такой: Графический процессор растеризует все в блоки 2x2, вычисляет разницу по вертикали и горизонтали между фрагментами блоков и использует величину этой разницы для выбора уровня MIP, наиболее близкого к соотношению 1:1 между фрагментами и текселями.
Если заявитель не знает ответа, вы можете попытаться вывести его.
«Итак, если бы вы создавали графический процессор или писали программу растеризации, что бы вы сделалиЭ» Многие люди начинают с идей «на основе расстояния до камеры» или «на основе размера треугольника на экране» и так далее.
Это отличный первый шаг (во многом именно так работали растеризаторы в старые времена).
Вы можете принять вызов, задав следующий вопрос: «Что, если UV-координаты в вершинах не рассчитываютсяЭ» Это, конечно, сделает предложенные методы неприменимыми и придется придумывать что-то другое.
Когда вы придете к решению с блоками-фрагментами 2х2, вы можете продолжить обсуждение этой темы (или перейти сразу сюда, если соискатель знает ответ).
Какие последствия это решение имеет для разработки программы, ее эффективности и т. д.? Возможные темы для обсуждения:
- Для квадрата 2x2 инструкции шейдера должны выполняться вместе и одновременно, чтобы можно было вычислить разницу между UV-координатами.
Это имеет некоторые последствия для ветвления; нормальная выборка может быть отключена (HLSL) или ее результат не определен (GLSL) при использовании в динамически разветвленной ветке кода.
- Параллельное выполнение может привести к разговору о том, как вообще работает графический процессор.
Что такое волновой фронт, деформация, SIMD (или как его называет API/графический процессор, который вы предпочитаете).
Как работает ветвление, как хранятся временные переменные, как оптимизировать загрузку, как работает сокрытие задержек и т. д. Обсуждать это можно долго.
- Растеризация с квадратами 2х2 неэффективна для маленьких треугольников (треугольники, занимающие один фрагмент, все равно требуют 4 выполнения шейдера).
Что это означает для геометрии высокой плотности, тесселяции, создания LOD (уровней детализации) для геометрии.
Вы разрабатываете систему освещения для игры/движка.
Каким это будет? Здесь нет «правильного» ответа.
Система освещения может быть любой.
Для этого существует как минимум несколько десятков обобщенных методов и, возможно, миллионы специализированных подходов! Освещение охватывает множество вещей: точечное освещение, точечное освещение, окружающее освещение, излучающие поверхности; прогнозируемые и рассчитанные в реальном времени компоненты освещения; направленное и глобальное освещение; тени, отражения, рассеивающие среды; взаимосвязь между производительностью в реальном времени и производительностью настройки, требования к платформе и многое другое.
Разговор может затянуться.
Здесь вас интересует следующее:
- Общий мыслительный процесс и подход к открытым проблемам.
Пытаются ли заявители уточнить требования и сузить вопросы? Говорят ли они о том, что знают, чего не знают и что требует дальнейшего расследования? Предлагают ли они единственную технику, которая вам нравится, и не могут указать ни на один из ее недостатков?
- Осведомленность о существующих решениях.
Знают ли заявители принципы работы, преимущества и недостатки популярных методик? Вы пробовали что-нибудь из них? Насколько актуальны их знания?
- Знание проблемной области и принятие решений.
Это система освещения для одной очень конкретной игры или она должна быть «универсальной»? Как это повлияет на возможные выборы и каковы последствия этих выборов? В частности, как вы делаете выбор на основе поддерживаемых платформ, минимальных требований, ожидаемой сложности контента и других факторов?
- Отношение к компромиссу.
Практически все инженерные решения включают их.
Выбирая тот или иной путь развития чего-либо, приходишь к компромиссам.
Это может быть производительность, удобство использования, расширяемость, доступность на разных платформах, сложность реализации, влияние на рабочий процесс, количество вещей, которые нужно изучить, и так далее.
Понимают ли соискатели работы эти компромиссы? Знают ли они и понимают преимущества и недостатки различных методов?
Вы разрабатываете графический API для движка.
Как бы он выглядел? Как и в случае с вопросом о системах освещения выше, здесь нет единственного правильного ответа.
Этот вопрос проверяет знания в проблемной области (консольные графические API, «современные» API, такие как DX12, Vulkan, Metal, старые API: DX11, OpenGL, DX9).
Что вам нравится и не нравится в существующих графических API (предупреждающий знак, если все в порядке: идеального API не существует).
Что бы вы изменили, если бы это было возможно? И снова компромиссы.
Что предпочтительнее: производительность или удобство использования? Можно ли иметь и то, и другое (если «да», то почему и как? если «нет» — почему?).
Можно ли сузить требования в зависимости от того, кто является пользователем? Будет ли предлагаемая абстракция эффективно работать с базовыми API?
Вам нужно сохранить и нарисовать большой город. Как бы вы это сделали?
Я не задавал этот вопрос, но видел упоминание о нем в Твиттере.Это звучит как отличный вопрос, потому что на него нет правильного ответа, и он охватывает множество вещей.
Создание, процедурная генерация, запекание, изменения в реальном времени, хранение, потоковая передача, пространственные структуры данных, уровни детализации, перекрытие видимости, рисование, освещение и т. д. Много, много возможных дискуссий.
Ну вот и все.
Стоит сказать, что я давно не проходил собеседование у себя.
Так что не знаю, настолько ли эти вопросы полезны для соискателей, как я думаю.
Теги: #интервью #Работа с 3D графикой #вопросы #компьютерная графика
-
Касперский 9-1-1 Р.и.п.
19 Oct, 24 -
Популярность Групп
19 Oct, 24