Вопросы Для Собеседования Для Программистов Компьютерной Графики

Примечание переводчика: в данной статье рассмотрен общий подход к выбору вопросов для собеседования на должность программиста компьютерной графики на примерах конкретных вопросов.

В последнее время я видел довольно много дискуссий в Твиттере о хороших и плохих вопросах для интервью.

Некоторые из этих вопросов кажутся полезными.

В основном, самые интересные выглядят открытыми.

Они могут привести к очень большим и обширным дискуссиям или даже не дать «правильного» ответа.

В конце концов, вам, скорее всего, нужно не знать ответ (он все равно будет 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 графикой #вопросы #компьютерная графика

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.