С чего начать изучать "Игрострой" и так ли это страшно.
Всем доброго времени суток! Представляю вам первый из серии пост, целью которого является популяризация мира IT.
Тут мы не будем постоянно говорить о программировании, будут рассмотрены разные сферы. Начиная от игростроя и дизайна, заканчивая менеджментом и анализом. Прошлый пост вызвал бурю негодования по принципу сарафанного радио, потому что описывались простые рекомендации к прочтению книг, в итоге меня начали ругать, за то что я даю ужасную учебную программу.
"Я не даю полноценную учебную программу, я даю советы, как лучше начать и по каким примерно этапам двигаться, чтобы было проще. Следовать моим советам или нет, личное дело прочитавшего человека. У каждого с опытом складывается своя точка зрения, поэтому господа специалисты, когда будете писать гневный комментарий, то аргументируйте его и дайте совет, чтобы молодые ребята не блуждали в ужасе ещё на этапе обучения от того, какое у нас дружелюбное сообщество."
Спасибо, что прочитали и начнём!
Пришёл этот светлый день! Вы решились стать программистом. Долго думали, взвешивали все за и против, кучу раз себя переспросили, но решились. Следующим этапов является выбор специализации в которой вы будете развиваться. Благо сфер у нас много, есть где разгуляться. Сегодня подробно остановимся на разработке игр.
Маленькое отступление: чтобы в комментариях не начали снова разводить демогогию, что начинать нужно с математики, вот вам ссылка на сакральный смысл профессии и очередное упоминание, как важна математика, читаем, проникаемся, не мешаем остальным. Гайдлайнов по программе обучения на раннем этапе роста прогаммиста множество, если будут желающие, напишу очередной велосипед пост на эту тему.
Давайте сразу определимся, что сегодня мы разбираем геймдев с точки зрения программирования, мы не рассматриваем дизайн и прочее, мы разберёмся с этой стороной игростроя.
Личные качества: тут вот и запарвается большая часть молодых геймгениев. Вам нужно обладать настойчивостью, усидчивостью, открытостью к новым знаниям, хорошим чувством вкуса и думаю богатой фантазией. Аккуратность, терпение, понимание, восприятие тоже являются неотъемлимыми качествами программиста геймстроя.
Начнём с простого, знание языков, да, если решили программировать, то вам в принципе нужно знать английский, в грострое тем более, так как добрая часть литературы написана на английском, а та, которая переведена, уже сильно устарела. Поэтому первым шагом вам нужно перейти сюда, если совсем нулевой уровень, то сюда ну или сюда и начинаем постигать язык.
Ну что же, будем считать, что с языком у вас всё хорошо, вы его знали/выучили, либо забили и дальше будет тяжко. Теперь продолжим с базовых знаний:
1) математика
2) навыки программирования
3) библиотеки
4) компьютерная графика
5) тестирование
Теперь каждый пункт отдельно с объснениями, ссылками и советами.
Математика
Начнём со страшных вещей, с линейной алгебры. Стартуем отсюда. А тут есть основы линейной алгебры в pdf. Хорошо бы знать и понимать школьный курс геометрии и алгебры, если всё совсем плохо, то вернитесь к нему и разберитесь. Во время разработки будет встречаться множество формул, не всегда сложных, которые зависят от текущего кадра в игре. Чтобы было более понятно, рассмотрим на примере простых движений, подчиняющихся законам физики в Unity3D. Взять простейший 2D платформер, в котором два объекта будут соудоряться, встроенная в движок физика нам тут не поможет и придётся писать собственную формулу. В самом начале вы не встретите особых затруднений с математикой, они возникнут в дальньйшем, при работе с крупными проектами, в которых сложная физика движений, что приводит к более сложной математике.
Навыки программирования
Желательно начать с книг: Программирование трёхмерных игр для Windows, Coding4Fun, Фрэнка Луна. Далее разберитесь с Unity3D. Эту платформу не стоит списывать со счетов и она очень помогает в раскрытие творческого потенциала, так как не требует на прям досканального разбора и можно довольно быстро вникнуть.Далее советую копать в сторону C++, а конкретно:
- Программирование. Принципы и практика использования C++
- Язык программирования С++. Лекции и упражнения
- Язык программирования C++. Базовый курс
Советую читать в той последовательности, которая дана в списке. С++ не является единственным языком для программирования в играх, но лучше пишите на нём, много понятного материалы, хороие переводы, хороший язык, богатый спектр возможностей.
Так же стоит уделить внимание разору ООП в С++: Объектно-ориентированное программирование в С++
Библиотеки
Знать их нужно, очень нужно. DirectX и OpenGL. Шейдеры- HLSL, GLSL. Плюсом будет знать некоторые популярные движки, типа Unity3d, cocos2d-x, Unreal Engine, поэтому учить их всё равно придётся. Причём знать придётся не на уровне, я в курсе, что они есть, а именно уметь под них программировать, понимать, как всё это работает и зачем это нужно. Так же хочу отметить, что нужно будет знать API к разным ОС, как например WinAPI для Windows. Вы должны понимать, как работает мультипоточность, поэтому загляните сюда. Знать основные алгоритмы - поиск пути, генерация ландшафта и тому подобное. И нужно будет понять и знать более специфичные библиотеки например такие, как Steamworks SDK. И понимать основные паттерны и архитектуру приложений.
Компьютерная графика
Тут важно понимать, что компьютерная графика - это не графический дизайн. Вы должны уметь строить графический интерфейс, работать с графическими библиотеками. Тут будет много нудного и не самого интересного материалы, более подробно, чем в этих лекциях я не опишу, поэтому переходите и смотрите.
Тестирование
Думаю с этим пунктов особых объяснений не нужно. Но всё же немного поговорим на эту тему. Для начал берём книги, эту и эту.Тут не всё так срашно, как кажется. Всё это касается тестирования кода. Не путать с тестированием самой игры, тут нужно любить и уметь играть, вот например вакансия с требованиями к тестировщику именно самих игр, а не кода, по ней сразу всё поймёте.
Несколько советов
Игровой рынок стремительно развивается, места под солнца хватит всем. Чтобы скорее реализовать себя и набраться опыта я бы хотел посоветовать вам уже на ранних этапах обучения, когда вы сможете делать хоть что-то вминяемое, постучаться в какой-нибудь "игродельный" opensource проект. Обычно такие проекты всегда рады новым людям, особенно находящимся на этапе обучения, там вы сможете набраться опыта, завести новые знакомства в сфере игр, получить много советов и рекомендаций. Реализовывайте любую свою, даже самую бредовую идею, просто посмотрите на стим в разделе инди, гарантирую, любая ваша "наркоманская" идея станет гениально адеватной, по сравнению с играми там) Просто посмотрите видео по этой ссылке. Никогда не переставайте учить что-то новое. Делайте то, что вам нравится и тогда из этого будет толк.
Мы прошли краткий экскурс в мир игростроя, поговорили об основных качествах, навыках и требованиях. Теперь у вас есть необходимая литература, лекции, шаги изучения, приложите усилия и думаю результат не заставит себя долго ждать.
Специально для Pikabu, vishcode!