Особенности работы программиста графики в геймдеве

Что изучать и как им стать

Меня зовут Иулиан Шаптуров, в команде игрового издателя и разработчика Astrum Entertainment я работаю программистом графики. Эту профессию я выбрал в первую очередь из-за того, что мне было интересно, как создается графика в играх.

Особенности работы программиста графики в геймдеве

Мне всегда нравилось не просто играть в игры, а разбираться в алгоритмах и работать с задачами повышенной сложности. В итоге я остановился на профессии, совмещающей визуал и большие кодовые базы. Кроме того, специалист моего профиля занимается не только кодом, но и «computer science» — по-русски информатикой. Это актуальная тема для множества современных исследований, среди которых стоит в первую очередь отметить ReSTIR, Neural Rendering, Inverse Rendering. Она не просто важна для развития IT-сферы, но еще и применяется в производстве фильмов и контента, в 3D-зрении, а также в геймдеве.

Чем вы занимаетесь?

Так что же все-таки входит в мои задачи? В первую очередь это поддержка графики в нашей версии игрового движка CryEngine. Я и моя команда не просто выслеживаем баги, а действуем шире — мы обновляем функционал движка в тех случаях, когда для этого есть подходящие возможности и ресурсы.

Наша команда разбирается в шейдерах, в архитектуре графического движка, в графических техниках. Мы пишем на С++ и HLSL. В числе прочего мы улучшаем систему материалов, развиваем систему occlusion culling, развиваем наши подсистемы, такие как «система частиц», системы кеширования, работаем с многопоточностью. Из других достижений — перевод части процессов на «compute shaders» и разработка подходящего алгоритма пофрагментной сортировки полупрозрачки. Не беда, если вы ничего не поняли из предыдущих предложений — если обойтись без терминов, то мы основательно модифицировали и улучшили CryEngine, используя современный инструментарий.

Особенности работы программиста графики в геймдеве

Сейчас я и команда работаем над оптимизацией игры и улучшением визуала, регулярно общаемся с художниками и дизайнерами, рассказываем им о возможностях нашего движка и о том, как эти самые возможности дополнительно расширить. В силу технических ограничений мы часто стоим перед выбором: либо снижать FPS и тем самым улучшать контент, либо стабилизировать FPS, но при этом делать контент чуть более умеренным. Борьба с этими ограничениями — это львиная доля работы. Мы постоянно сталкиваемся с тем, что проект большой, контента много и старые методы по оптимизации в какой-то момент перестают работать. Могу сказать, что мы всегда ищем компромисс — чтобы игра запускалась на бюджетных компьютерах и при этом выглядела привлекательно.

Кому подойдет эта профессия?

В нашей профессии ценится насмотренность. Вы получаете необходимый багаж знаний, играя в различные игры и разбирая техники реализации графической составляющей. Усидчивость, любовь к головоломкам и готовность их решать неделями, особенно если вам нравится программирование и математика, — все это крайне нужные качества.Обычно карьеру в программировании графики начинают со стажировок в геймдеве или просто приходят из других областей программирования. Кто-то поступает в профильные магистратуры, получает там необходимую базу и попадает на стажировку. Путь в «render engineering» может быть разным, и сейчас я поделюсь своим опытом.Лично я учился в провинциальном вузе на математика, одновременно работал обычным программистом, потом попал на стажировку в геймдев. Все это время параллельно с обучением я разрабатывал свои проекты, движки и получал таким образом весь необходимый опыт. Кроме того, наращивал навыки, создавал дипломную по вычислительной геометрии, а точнее, по трехмерной реконструкции поверхности.

Не секрет, что многие начинающие программисты графики разрабатывают собственный движок. Это тема для споров и дискуссий, так что начну с примеров. Чтобы успешно писать код, не обязательно подробно знать, как работают инструменты, операционная система и компьютер. Хотя эти знания, вне всякого сомнения, могут быть очень полезны в специфических задачах.

Тем, кто водит машину, не обязательно знать, как работает двигатель автомобиля. Современные движки — это абстракция, необходимая для того, чтобы разработчики игры меньше погружались в низкоуровневые детали. Но есть и те, кому интересны низкоуровневые детали, есть те, кто улучшает Unreal Engine 5, например, и есть те, кому проще понять, почему так надо или не надо делать.

Особенности работы программиста графики в геймдеве

При этом возникают спорные моменты. Обычно аргументы такие: «Зачем писать свой движок, если есть готовые?» или: «Как можно пользоваться движком, не зная, как он работает изнутри?». Лично я считаю, что очень важно уметь читать чужой код, не бояться старого кода в виде «наследия», как и больших объемов кода.

Что лучше всего изучать программисту графики?

Если кратко, то посмотрите роадмап и вступите в Telegram-сообщество по графике. Для начала этого более чем достаточно. Есть еще один путь — изучить требования в описании вакансий и начать изучение с этих предметных технологий.

Если вам интересно низкоуровневое программирование графики и вы не боитесь базового погружения в графическое API (GAPI), то этот вариант для вас. Проще всего начать изучение графики с OpenGL и DirectX 11 — эти GAPI еще поддерживаются и встречаются на некоторых проектах, хотя уже не развиваются. А потом есть резон переходить на DirectX 12 и Vulkan. Имейте ввиду, что существуют игровые движки (Unity, Unreal Engine, CryEngine, Unigine и т. п.) и разные обертки типа Falcor, которые облегчают вашу работу. На Unity вы можете найти множество PET-проектов и использовать их для обучения. Если вам нужны базовые представления о том, как работает shading в шейдерах, работа с тенями, forward и deferred rendering, PBR-шейдинг, основа screen space эффектов (SSAO) и тому подобные задачи, то поможет эта информация. Но детальные инструкции по DirectX 12 и Vulkan могут оказаться слишком сложными для новичков.

Если же вы готовы к вызовам, то детали ждут по ссылкам: DirectX 12 и Vulkan. По этим же ссылкам вы найдете реализации уже современных техник, таких как GPU-driven rendering, GPU-occlusion culling.

Дополнительно рекомендую углубиться в тематику рейтрейсинга, если вам интересно, как работает path-трейсер в игре Cyberpunk 2077. Изучите подробно тему Global Illumination. А дальше — пользуйтесь моими ссылками выше, вооружитесь правильным майндсетом, и у вас все получится!

1717
20 комментариев

Как скоро программиста графики можно будет заменить на ИИ?

Ответить

Сложно сказать, но вот твои комментарии уже сейчас можно заменять комментариями от ИИ.

16
Ответить

Никогда, потому что программист графики просто переквалифицируется в программиста ИИ для создания графики.

Мы так поступаем: мы адаптируемся.

2
Ответить

ответ всегда один - смотря какой графики

1
Ответить

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

а может ли ИИ за нас писать код графики?
сейчас нет. это теоретически возможно, если те кто обучает такую нейронку обучат всеми контекстами, которые держит в голове программист графики. обычно, чтобы эффективно обучать такую модель, нужны программисты графики для разметки данных для обучения. чтобы полностью заменить рендер программиста, то нужно эту модель держать в актуальном состоянии.

если коротко, ИИ может облегчить и сократить порог вхождения в профессию (как это сделали готовые игровые движки), но полностью заменить не сможет.

1
Ответить

Вроде и неплохая статья, только пользы как-то маловато - одна только ссылка на роадмэп и тг канал, ну и в конце чуток по мелочи. Имхо, стоило приложить пару кейсов из личной рабочей практики (в меру обезличенных для соответствия требованиям NDA) и пройтись по пайплайнам их проработки. Какой-нибудь пример нетривиального фикса и интеграции новой фичи или реворка старой - это было бы живее и нагляднее, чем винегрет из терминов.
Ну и "программист графики" звучит как-то невнятно, лучше сразу говорить render engineer и в начале пояснять за технологический стек (что используется, зачем оно вообще нужно и почему именно те или иные решения заходят под задачи); профайлинг и анализ бюджетов тоже было бы не лишним упомянуть.

2
Ответить

Спасибо за развернутый фидбек! Постараемся в дальнейшем делать более углубленные материалы

1
Ответить