Тут є світло - коворкінги Києва 🔥

Кто такой C++ разработчик и как с помощью этого языка создаются GTA, The Witcher, StarCraft, TES

dev.ua продолжает рассказывать о профессиях в IT, чтобы помочь определиться с тем, какую специальность следует выбирать каждому начинающему или свитчеру. Сегодня Станислав Кутельмах, UE4 (C++) Developer в Pingle Game Studio рассказывает, как это — писать софт для игр на одном из самых распространенных языков в геймдеве.

2 комментария
Кто такой C++ разработчик и как с помощью этого языка создаются GTA, The Witcher, StarCraft, TES

dev.ua продолжает рассказывать о профессиях в IT, чтобы помочь определиться с тем, какую специальность следует выбирать каждому начинающему или свитчеру. Сегодня Станислав Кутельмах, UE4 (C++) Developer в Pingle Game Studio рассказывает, как это — писать софт для игр на одном из самых распространенных языков в геймдеве.

Что такое C++

С++ был создан в 1983 году, с его помощью разработали большое количество программ. Сегодня популярность С++ снизилась, но своей актуальности он не потерял.

Сфера использования С++ очень широка: это может быть прикладное ПО, операционные системы, системы реального времени (например, медицинские приборы), драйверы, серверы, компьютерные игры и т. д.

Что делает C++ разработчик

Обязанности С++ разработчика, кроме общих для всех навыков — как написание кода, его дебаг и ревью — имеют свои нюансы. С++ является промежуточным языком программирования — на нем можно писать как low-level, так и high-level код.

Low-level позволяет напрямую общаться с hardware, а high-level позволяет использовать абстракции. Доступ к hardware дает большую гибкость для оптимизации и написания эффективного кода. Однако такой код сложнее в его написании. Можно легко сделать баг, который будет трудно отследить и пофиксить, поэтому нужно уделять больше времени на планирование задач.

Особенности использования С++ в геймдеве

В геймплей-девелопменте С++ используется десятилетиями. Большинство культовых игр, которые вы знаете, например GTA, The Witcher, StarCraft, TES, написаны с его помощью.

Обычно игра не разрабатывается с полного нуля, предварительно уже есть минимальное программное решение для этого — игровой двигатель. Он содержит библиотеки для разработки геймплейной логики, рендера, взаимодействие через сеть и т. д. Также работать с двигателем удобно не только программистам — аниматоры легко могут добавлять свои анимации, художники — свои модели.

Игровые движки могут разрабатываться компанией для собственного использования (например, Frostbite) или продаваться по лицензии (Unreal Engine). Игровые движки в той или иной степени похожи друг на друга, но более подточены под те цели, для которых используются.

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

Поэтому сначала создается игровой прототип: какое-то решение, созданное быстро. Его задача — понять, будет ли новая фича работать, будет ли интересно играть. И таких прототипов может быть множество. Цикл «идея — прототип — вывод» будет выполняться до тех пор, пока не будет создано что-то «играбельное».

Например, босс имеет слишком очевидную логику, его легко убить. Решение: стоит придать ему еще какие-то умения и улучшить АИ. Пример: механика сбора трав слишком скучна. Решение: ее нужно сделать веселее. Пример: разработанная механика блокировки атаки щитом слишком медленна для такой динамической игры. Решение: придется ее вырезать. Такой «цикл» имеют не только программисты. Дизайнеры, художники, аниматоры тоже постоянно итерируют, что-то меняют. И эту работу постоянно нужно с ними синхронизировать.

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

Когда становится понятно, что в игре будет использоваться, фичу «переписывают на чистовик», шлифуют и улучшают до тех пор, пока ее будет не стыдно добавить в свою игру.

Специализации С++ программистов

Описывая особенности геймдев С++ программиста, можно выделить несколько специализаций.

  • Геймплей-программист. Он отвечает за реализацию игровых механик в играх: стрельба, передвижение в шутерах, крафтинг и прокачка в РПГ и т. д. Также разрабатывает искусственный интеллект для игр: «мозги» для внутриигровых персонажей, с помощью которых персонажи решают, что им делать, куда идти и кого атаковать.
    Геймплей-программист больше работает с высокоуровневым и меньше — с нижнеуровневым кодом.
  • Программист игрового движка. Он разрабатывает и поддерживает игровой двигатель. Старается сделать код максимально быстрым и эффективным. Закладка кодовой архитектуры, которая будет использоваться геймплей-программистами. Занимается подготовкой разнообразных инструментов для разработки игры: редактор уровней, редактор анимаций, инструменты для профайлинга и оптимизации (когда нужно понять, почему у игры низкий FPS, и как его поднять).
  • Рендер-программист создает «вид» игры, то есть создает алгоритмы, с помощью которых модели персонажей и игровой мир будут вырисовываться на экране пользователя. Работает с такими инструментами, как DirectX, OpenGl, Vulkan.

Навыки, необходимые для работы С++ девелопером

Геймплей-программист должен иметь следующую базу знаний:

  • Знание С++ и умение работать с многопотоковостью.
  • Знать и уметь использовать паттерны проектирования.
  • Знание векторной алгебры.
  • Знание алгоритмов и способность их оптимизировать в случае необходимости.
  • Знание скриптовой речи (необязательно, но часто необходимо).

Нужно быть знакомым с рынком индустрии, понимать, как перенести игровую логику, которую придумал гейм-дизайнер, на компьютерный код.

Программист игрового движка должен иметь следующую базу знаний:

  • Все навыки геймплей-программиста.
  • Более углубленные знания в написании кодовой архитектуры.
  • Знание платформы, под которую планируется разработка игры (например, Windows, Android, iOS, Xbox, PlayStation, Switch): как на эту платформу собрать игру, определенные лимитации платформы, возможные оптимизации под эту платформу, API для взаимодействия со специфическими для платформы вещами.

Рендер-программист также занимается игровым двигателем, но в основном частью, которая касается отображения игры, поэтому он должен иметь следующие навыки:

  • Все навыки геймплей-программиста.
  • Знание платформы, под которую планируется разработка игры, но уже в контексте графики и видеокарты.
  • Знание одного из API для работы с графикой: DirectX, OpenGl, Vulkan.

Где учить С++?

Первое, что необходимо для того, чтобы стать С++ разработчиком, — это мотивация и желание. Информации по С++ огромное количество. Курсы легко можно найти на Coursera или Udemy, на YouTube тоже есть много информации.

Хорошие навыки дает решение задач на таких платформах, как LeetCode и CodinGame.

Но гораздо важнее практика, как бы банально это не звучало. Всегда необходимо использовать знания на практике, стараться выполнять задачи, приведенные в учебниках и курсах.

Часто лучший способ выучить что-то новое в программировании — это попытаться это написать и «поиграть»: что-то изменить, добавить. Не всегда будет все получаться, будут ошибки и баги. Иногда вы не будете понимать, почему оно не работает, или работает не так, как хотите. Но шаг за шагом будет приходить понимание.

Так получают собственный опыт.

«Лед разработчиков подарил мне кожаный стек из секс-шопа как неотделимый атрибут в процессе тестирования». Кто такой QA и как им стать?
«Лед разработчиков подарил мне кожаный стек из секс-шопа как неотделимый атрибут в процессе тестирования». Кто такой QA и как им стать?
По теме
«Лед разработчиков подарил мне кожаный стек из секс-шопа как неотделимый атрибут в процессе тестирования». Кто такой QA и как им стать?
Кто такой Java Developer: обзор от разработчика с 15-летним опытом
Кто такой Java Developer: обзор от разработчика с 15-летним опытом
По теме
Кто такой Java Developer: обзор от разработчика с 15-летним опытом
Кто такой iOS Developer. Как украинский разработчик на фрилансе создавал клоны приложений Instagram ТікТок Telegram
Кто такой iOS Developer. Как украинский разработчик на фрилансе создавал клоны приложений Instagram, ТикТок, Telegram
По теме
Кто такой iOS Developer. Как украинский разработчик на фрилансе создавал клоны приложений Instagram, ТикТок, Telegram
Читайте главные IT-новости страны в нашем Telegram
Читайте главные IT-новости страны в нашем Telegram
По теме
Читайте главные IT-новости страны в нашем Telegram
Електробайки по-українськи між Києвом та Лос-Анджелесом в «СКШ»

Дивіться, чим живе Delfast під час війни в Україні

Мы запускаем рассылку об украинском IT-комьюнити. Оставьте email, чтобы понимать больше. Премьера — скоро!
Спасибо! На указанный адрес отправлено письмо для подтверждения подписки.
Читайте также
Головоломка киевлянина Quadline победила на фестивале инди-игр Google Play
Головоломка киевлянина Quadline победила на фестивале инди-игр Google Play
Головоломка киевлянина Quadline победила на фестивале инди-игр Google Play
«Даже для производителей гробов и памятников я писал тексты». Как стать game-тестировщиком во время войны: история бывшего металлурга, страховщика, копирайтера
«Даже для производителей гробов и памятников я писал тексты». Как стать game-тестировщиком во время войны: история бывшего металлурга, страховщика, копирайтера
«Даже для производителей гробов и памятников я писал тексты». Как стать game-тестировщиком во время войны: история бывшего металлурга, страховщика, копирайтера
34-летний Андрей Зубков во время войны вошел в IT, коренным образом изменив свою карьеру и обыденную жизнь. Теперь он QA Engineer в компании Pingle Game Studio — тестирует игры. До этого работал на металлургическом комбинате, в страховании и даже копирайтером. Свою историю о входе в новую жизнь Андрей рассказал dev.ua.
Кто такой Unity Developer: основные задачи, обязанности и зона отвественности. Обзор профессии от Team Lead Unity в Pingle Game Studio
Кто такой Unity Developer: основные задачи, обязанности и зона отвественности. Обзор профессии от Team Lead Unity в Pingle Game Studio
Кто такой Unity Developer: основные задачи, обязанности и зона отвественности. Обзор профессии от Team Lead Unity в Pingle Game Studio
Продолжаем цикл материалов об IT-специальностях. Каждую описывает «типичный представитель» — опытный специалист и просто авторитетный коллега, тот же человек, который знает все тайные уголки своей профессии. Мы надеемся, эти материалы помогут школьникам, студентам, переквалификантам и всем, кто заинтересован в выборе IT-специальности. Цикл не только поможет оценить перспективы, но и позволит лучше понять индустрию и особенности профессии изнутри. Обсуждайте и дополняйте материал в комментариях, чтобы сделать его полезнее. О профессии Unity Developer рассказывает Владимир Мельничук, Team Lead Unity в Pingle Game Studio.
Украинский разработчик создает игру о мемособаках, трогающих россиян в Twitter: ее уже можно протестировать
Украинский разработчик создает игру о мемособаках, трогающих россиян в Twitter: ее уже можно протестировать
Украинский разработчик создает игру о мемособаках, трогающих россиян в Twitter: ее уже можно протестировать

Хотите сообщить важную новость? Пишите в Telegram-бот

Главные события и полезные ссылки в нашем Telegram-канале

Обсуждение
0

Я iOS разработчик, пишу на Obj-C/Swift, но мне очень нравится C-language група языков. Легкость и простота синтаксиса, работа с указателями, работа с памятью, работа со строками - все оч понятно. В том же Swift обход строки используя String.Index порой вызывает боль. А какая неуклюже выглядит цикл for от len до 0 в Swift 'for i in stride(from: len-1, through: 0, by: -1)' по сравнению с лаконичным C-стилем 'for (int i=len-1; i>=0; i--)'

0

А скорость сборки..., все плохо
Проект на Objective-C собирался секунды, lldb "летал", в пока не начали переписывать на Swift...