Разработка игр и работа с графикой — с чего лучше начинать и на что обратить внимание

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

Дмитрий Кунин, ведущий Front-End разработчик в AT Consulting

Разработка игр – дело непростое, многогранное. Я уверен, что тот, кто задумал разработать игру, может подступиться к этому вопросу с совершенно разных сторон. И, на мой взгляд, начинать с технической стороны не совсем верно. Ты можешь быть гением Unity или двухмерного движка типа phaser.js и все равно сделать неинтересную игру низкого качества. Игры – это не только техническая реализация: любая хорошая игра – это синергия звука, цвета, движения и, на мой взгляд, самого главного – сценария, истории. Именно она позволяет игрокам полноценно окунуться в мир игры, забыв обо всем на свете. В данном разрезе я призываю игнорировать игры вроде Счастливого фермера или Candy Crush. У них нет толковой сценарной составляющей, но они все равно ужасно затягивают, не благодаря их качеству, а потому что «играют» на умении мозга получать удовольствие от малейшего стимула. Такие игры, сочетая простоту и красочность, делают зависимыми от них. Кто-то из гейм-индустрии сказал о том, что игра, которая заставляет тебя думать о ней все время, плохая, наркотик.

С чего начать разрабатывать игру? С истории и сюжета. Любая техническая сторона вспомогательна. Если кто-то скажет, что только гигантские корпорации, разрабатывающие 3D игры и миры, выпускают качественные продукты, то они не слышали об успешных инди-играх вроде Hotline Miami 1/2, Meat Boy, Fez. Они, может быть, не блещут графикой, но зато сверкают своим глубоким миром, который приглашает миллионы людей окунуться в волшебное пространство игры.

Джозеф Браун, профессор Университета Иннополис

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

С технической стороны, лучший совет – не начинать сразу с масштабных проектов. Начните с проекта менее требовательного – скорее допустите первые ошибки, невероятно важные для обучения. К примеру, вы можете создать бета версии игр и позволить другим людям поиграть в них. Так вы сможете узнать их мнение о вашем продукте. Короткие итерационные циклы вместе с отчетами по ним позволяют легко решить проблемы и сохранять мотивацию.

Егор Шубин, программист, команда сервера Skyforge

Вообще, разработка игры мало отличается от разработки любого другого приложения. Основное отличие – производительность. Если десктопное/мобильное приложение довольно терпимо к задержке, допустим, в полсекунды, при игре эта задержка может быть критичной.

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

Книжек по алгоритмам и структурам данных огромное множество. Очень хороша книжка Роберта Седжвика про алгоритмы. Как java-разработчик, могу ее рекомендовать.

Также, если иметь дело с графикой (в любом проявлении, от перемещения двухмерных объектов по экрану до разработки собственного движка), нужна математика. Чем глубже занятие графикой, тем глубже нужна математика. Для примера можно изучить статью нашего технического директора Сергея Макеева про технологии рендеринга в нашем игровом клиенте. Думаю, к нему же можно обратиться за более подробным описанием того, что нужно для подобной разработки.

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

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

Ну и главное, нужно любить игры 🙂

Александр Акбашев, специалист по тестированию в Mail.Ru Group

Учить матанализ, аналитическую геометрию, математику и диффуры. Дать им ссылки на статьи по графике Skyforge с хабра (должно быть 3 штуки). Это если графика.
Если сервер, то учить алгоритмы, теорию вероятностей, статистику, алгоритмы еще раз.

Если мобильная разработка, то ничего учить особо не нужно – нужен просто знакомый художник и куча времени 🙂

В тех же статьях на хабре есть подборка литературы по теме графики.

Сергей Зефиров, программист с широким опытом работы, энтузиаст и евангелист языка Haskell

Попробуйте написать интересную вам игру. А дальше приложится.

Общаясь с разработчиком игр, я выяснил, что главным ограничивающим фактором быстродействия игры является обращение в память по произвольным адресам. Например, при выяснении «ближайших» предметов или проверки столкновений.

Внимание, вопрос: можем ли мы избежать полностью или уменьшить количество обращений в произвольные (не последовательные) адреса памяти?

Михаил Кечинов, сооснователь студии Михаила Кечинова

Попробовать язык Processing.

Антон Пискунов, основатель и генеральный директор BeastGaming

Придумываете 2D игрушку, берёте Unity и вперед. Как только разобрались с основной механикой процесса, берите что-то вроде Java и начинайте писать с нуля, тоже 2D. После варки во всём этом великолепии с полгода – начинайте ковырять 3D моделирование, без понимания базовых вещей из моделирования будет достаточно тяжело идти дальше, в серьезные проекты.

Также не забывайте что игра, особенно современная, это не только визуальщина, но зачастую и сложная работа со стораджами, сетью и DRM. Поэтому советую также изучать эти вещи и пописать свою MMORPG с серверной частью на PHP или node.js.

Александр Коротков, генеральный директор Postgres Professional Development

Действительно, на определённом этапе большинство будущих программистов, хотят разрабатывать игры. Но профессионально занимаются разработкой игр гораздо меньше людей, чем те, кто когда-то этого хотели. И это нормально – потребности рынка IT шире, чем только игры. Но и для тех, кто в конечном итоге нашёл своё место в чём-то другом, тренировочные проекты, сделанные в школе и институте, остаются хорошим опытом. Я сам ещё в школе разрабатывал простые игры под DOS, потом осваивал графические API DirectX и OpenGL. На первых курсах института также сделал несколько тренировочных проектов для себя. Что-то конкретно посоветовать в этой области я вряд ли могу, т.к. с того времени, как я ей интересовался, прогресс ушёл очень далеко вперёд.

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