💰🚀 USDT, BTC, ETH - це все просто купляється в Trustee Plus в пару кліків. Встановлюй 👉
Марія БровінськаВойти в IT
7 ноября 2022, 12:12
2022-11-07
Кто такой C++ разработчик и как с помощью этого языка создаются GTA, The Witcher, StarCraft, TES
dev.ua продолжает рассказывать о профессиях в IT, чтобы помочь определиться с тем, какую специальность следует выбирать каждому начинающему или свитчеру. Сегодня Станислав Кутельмах, UE4 (C++) Developer в Pingle Game Studio рассказывает, как это — писать софт для игр на одном из самых распространенных языков в геймдеве.
С++ был создан в 1983 году, с его помощью разработали большое количество программ. Сегодня популярность С++ снизилась, но своей актуальности он не потерял.
Сфера использования С++ очень широка: это может быть прикладное ПО, операционные системы, системы реального времени (например, медицинские приборы), драйверы, серверы, компьютерные игры и т. д.
Что делает C++ разработчик
Обязанности С++ разработчика, кроме общих для всех навыков — как написание кода, его дебаг и ревью — имеют свои нюансы. С++ является промежуточным языком программирования — на нем можно писать как low-level, так и high-level код.
Low-level позволяет напрямую общаться с hardware, а high-level позволяет использовать абстракции. Доступ к hardware дает большую гибкость для оптимизации и написания эффективного кода. Однако такой код сложнее в его написании. Можно легко сделать баг, который будет трудно отследить и пофиксить, поэтому нужно уделять больше времени на планирование задач.
Особенности использования С++ в геймдеве
В геймплей-девелопменте С++ используется десятилетиями. Большинство культовых игр, которые вы знаете, например GTA, The Witcher, StarCraft, TES, написаны с его помощью.
Обычно игра не разрабатывается с полного нуля, предварительно уже есть минимальное программное решение для этого — игровой двигатель. Он содержит библиотеки для разработки геймплейной логики, рендера, взаимодействие через сеть и т. д. Также работать с двигателем удобно не только программистам — аниматоры легко могут добавлять свои анимации, художники — свои модели.
Если сравнивать использование С++ с геймдевом и другими нишами, то в игровой индустрии есть некоторые особенности девелопмента. Чтобы разработать новый функционал для игры (например, добавить нового босса, с которым игрок будет сражаться за сокровище), дизайнеры сначала должны придумать его вид, характерные особенности, специальные способности. Но не факт, что работающее на бумаге будет работать и в игровом мире.
Поэтому сначала создается игровой прототип: какое-то решение, созданное быстро. Его задача — понять, будет ли новая фича работать, будет ли интересно играть. И таких прототипов может быть множество. Цикл «идея — прототип — вывод» будет выполняться до тех пор, пока не будет создано что-то «играбельное».
Например, босс имеет слишком очевидную логику, его легко убить. Решение: стоит придать ему еще какие-то умения и улучшить АИ. Пример: механика сбора трав слишком скучна. Решение: ее нужно сделать веселее. Пример: разработанная механика блокировки атаки щитом слишком медленна для такой динамической игры. Решение: придется ее вырезать. Такой «цикл» имеют не только программисты. Дизайнеры, художники, аниматоры тоже постоянно итерируют, что-то меняют. И эту работу постоянно нужно с ними синхронизировать.
Например, анимация колдовства огненного шара слишком длинная. Нужно, чтобы аниматоры сделали ее короче — теперь она слишком коротка, надо создать более выразительные визуальные эффекты. Визуальных эффектов нет? Придется выделить рендер-программиста, чтобы их написать.
Когда становится понятно, что в игре будет использоваться, фичу «переписывают на чистовик», шлифуют и улучшают до тех пор, пока ее будет не стыдно добавить в свою игру.
Специализации С++ программистов
Описывая особенности геймдев С++ программиста, можно выделить несколько специализаций.
Геймплей-программист. Он отвечает за реализацию игровых механик в играх: стрельба, передвижение в шутерах, крафтинг и прокачка в РПГ и т. д. Также разрабатывает искусственный интеллект для игр: «мозги» для внутриигровых персонажей, с помощью которых персонажи решают, что им делать, куда идти и кого атаковать. Геймплей-программист больше работает с высокоуровневым и меньше — с нижнеуровневым кодом.
Программист игрового движка. Он разрабатывает и поддерживает игровой двигатель. Старается сделать код максимально быстрым и эффективным. Закладка кодовой архитектуры, которая будет использоваться геймплей-программистами. Занимается подготовкой разнообразных инструментов для разработки игры: редактор уровней, редактор анимаций, инструменты для профайлинга и оптимизации (когда нужно понять, почему у игры низкий FPS, и как его поднять).
Рендер-программист создает «вид» игры, то есть создает алгоритмы, с помощью которых модели персонажей и игровой мир будут вырисовываться на экране пользователя. Работает с такими инструментами, как DirectX, OpenGl, Vulkan.
Навыки, необходимые для работы С++ девелопером
Геймплей-программист должен иметь следующую базу знаний:
Знание С++ и умение работать с многопотоковостью.
Знать и уметь использовать паттерны проектирования.
Знание векторной алгебры.
Знание алгоритмов и способность их оптимизировать в случае необходимости.
Знание скриптовой речи (необязательно, но часто необходимо).
Нужно быть знакомым с рынком индустрии, понимать, как перенести игровую логику, которую придумал гейм-дизайнер, на компьютерный код.
Программист игрового движка должен иметь следующую базу знаний:
Все навыки геймплей-программиста.
Более углубленные знания в написании кодовой архитектуры.
Знание платформы, под которую планируется разработка игры (например, Windows, Android, iOS, Xbox, PlayStation, Switch): как на эту платформу собрать игру, определенные лимитации платформы, возможные оптимизации под эту платформу, API для взаимодействия со специфическими для платформы вещами.
Рендер-программист также занимается игровым двигателем, но в основном частью, которая касается отображения игры, поэтому он должен иметь следующие навыки:
Все навыки геймплей-программиста.
Знание платформы, под которую планируется разработка игры, но уже в контексте графики и видеокарты.
Знание одного из API для работы с графикой: DirectX, OpenGl, Vulkan.
Где учить С++?
Первое, что необходимо для того, чтобы стать С++ разработчиком, — это мотивация и желание. Информации по С++ огромное количество. Курсы легко можно найти на Coursera или Udemy, на YouTube тоже есть много информации.
Хорошие навыки дает решение задач на таких платформах, как LeetCode и CodinGame.
Часто лучший способ выучить что-то новое в программировании — это попытаться это написать и «поиграть»: что-то изменить, добавить. Не всегда будет все получаться, будут ошибки и баги. Иногда вы не будете понимать, почему оно не работает, или работает не так, как хотите. Но шаг за шагом будет приходить понимание.
Так получают собственный опыт.
УЧАСТЬ В АЗАРТНИХ ІГРАХ МОЖЕ ВИКЛИКАТИ ІГРОВУ ЗАЛЕЖНІСТЬ. ДОТРИМУЙТЕСЯ ПРАВИЛ (ПРИНЦИПІВ) ВІДПОВІДАЛЬНОЇ ГРИ.
Ліцензія видана ТОВ "СЛОТС Ю.ЕЙ." на провадження діяльності з організації та проведення азартних ігор казино у мережі Інтернет від 15.09.23 (рішення КРАІЛ №245 від 31.08.2023); ТОВ "СЛОТС Ю.ЕЙ." – на провадження діяльності з організації та проведення азартних ігор казино у мережі Інтернет від 26.04.2021 (рішення КРАІЛ №150 від 12.04.2021); ТОВ «СПЕЙСИКС» – на провадження діяльності з організації та проведення азартних ігор казино у мережі Інтернет від 08.02.2021 (рішення КРАІЛ №34 від 02.02.2021); ТОВ «ГЕЙМДЕВ» – на провадження діяльності з організації та проведення азартних ігор казино у мережі Інтернет від 16.02.2021 (рішення № 47 від 10.02.2021).
«Даже для производителей гробов и памятников я писал тексты». Как стать game-тестировщиком во время войны: история бывшего металлурга, страховщика, копирайтера
34-летний Андрей Зубков во время войны вошел в IT, коренным образом изменив свою карьеру и обыденную жизнь. Теперь он QA Engineer в компании Pingle Game Studio — тестирует игры. До этого работал на металлургическом комбинате, в страховании и даже копирайтером. Свою историю о входе в новую жизнь Андрей рассказал dev.ua.
Кто такой Unity Developer: основные задачи, обязанности и зона отвественности. Обзор профессии от Team Lead Unity в Pingle Game Studio
Продолжаем цикл материалов об IT-специальностях. Каждую описывает «типичный представитель» — опытный специалист и просто авторитетный коллега, тот же человек, который знает все тайные уголки своей профессии. Мы надеемся, эти материалы помогут школьникам, студентам, переквалификантам и всем, кто заинтересован в выборе IT-специальности. Цикл не только поможет оценить перспективы, но и позволит лучше понять индустрию и особенности профессии изнутри. Обсуждайте и дополняйте материал в комментариях, чтобы сделать его полезнее.
О профессии Unity Developer рассказывает Владимир Мельничук, Team Lead Unity в Pingle Game Studio.
Я 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--)'
Я 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--)'
А скорость сборки..., все плохо
Проект на Objective-C собирался секунды, lldb "летал", в пока не начали переписывать на Swift...