Как запланировать процесс обучения и разработки?

Процесс разработки игр и обучения/самообучения взаимосвязаны. А если ты — инди, тем более! Главное держать фокус, и быть сконцентрированным. В помощь нам всем приходит планирование, поговорим о нем!

Привет, ребята! Давно я ничего не писал и, честно признаться, раскис. Отковырять себя с дивана и начать интенсивно двигаться вперед, мне помогает (и я уверен и Вам тоже пригодится) — Планирование!

А это значит, что наступило время приключений и я должен познакомить Вас, с 5м правилом Dev-ленда (правило будет скорее советом).

Представляю вам следующее правило:

Правило Dev-ленда №5. Составь road-map!

Что такое roadmap?

Roadmap (с английского, буквально «дорожная карта») — это план выпуска продукта. Чаще всего это новая версия или развитие уже известного продукта, изменений в котором ждут пользователи.

Что в нашем случае «продукт» и почему это так важно? Roadmap позволяет контролировать прогресс, видеть какой путь уже пройден, а какой еще предстоит пройти. И если это хорошо работает с различным ПО, то почему бы не сделать то же самое с твоей игрой или процессом обучения?

Я предлагаю на примере меня, рассмотреть как составить roadmap. Такой «кейс» мне очень легко описать, и я надеюсь он будет кому-то полезен.

От общего к частному

Главное не мельчить и двигаться от общих вещей к частному. Используем принцип, который знают программисты, но применяют с переменным успехом все разработчики — и художники и дизайнеры. Это принцип нисходящего проектирования.

Кстати, у игровых разработчиков тоже есть отличная техника, которая работает похожим образом это LOD’ы. Level of Details. Уровень детализации объекта повышается когда наблюдатель приближается к объекту.

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

А у художников примерно такой же принцип тоже есть! Они начинают работать от пятна, больших объемов постепенно детализируя, дополняя лайн или пятна (правда ведь?)

Читай также:  Четкие спрайты в пиксель арте для Unity 2018

Мой кейс

В общем, примерный принцип вы поняли — начну. 2017й удачно складывается, но до конца еще очень много времени, я могу что-то классное успеть прокачать!

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

Уровень 1. Общие цели

Я хочу профессионально заниматься программированием графики. Это будет моя важнейшая цель. Детализируем, что мне стоит изучить и проработать, чтобы быть готовым выполнять задачи?

Уровень 2. Выделяем детали и шаги к достижению

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

Необходимая база в профессии

Самые необходимые области знаний в программировании графики

  • Принципы устройства/проектирования игровых движков,
  • Математика,
  • C++,
  • Графические API (сюда включен шейдерный язык и базовые техники вроде Shadowmap, SSAO),
  • Принципы работы hardware: GPU, CPU, кеши и т.д.

Уровень 3. Определяем источники, которые помогут эти области освоить

Книги, видео-курсы, лекции — в общем все, что позволит знания в определенных областях углубить.

Принципы устройства/проектирования игровых движков

Game Engine Architecture 2nd edition. Jason Gregory
Game Engine Architecture 2nd edition. Jason Gregory

Ни раз более опытные коллеги говорили, что единственная книга по этой теме — Game Engine Architecture Джейсона Грегори. Лекций и курсов похоже никаких нет. Буду читать ее и исправлять свой движок.

Математика

Foundations of Game Engine Development, Volume 1: Mathematics
Foundations of Game Engine Development, Volume 1: Mathematics

Планирую читать и прорешивать примеры из книги Game Engine Foundations: Mathematics Эрика Ленгиеля.
Попутно крутейшие видео Essense of Linear Algebra, публиковал их в нашей группе вконтакте: часть 1, часть 2.

А в качестве практических занятий дома, я наконец-таки добью raytracer, сделаю BVH, научусь пересекаться с треугольниками, плоскостями, AABB (сейчас у меня реализовано только самое простое — сфера).

Читай также:  Как продвигать свою игру бесплатно. Маркетинг-советы для инди.

C++ и графические API

Объединяю в один раздел, потому что практиковать нужно будет вместе. Если книги и видео по C++ я смогу смотреть в метро, то DirectX это практика, усваивать как-то теоретически скорее всего невозможно.

С++: Перечитаю Скотта Мейерса про С++11/14 и Александреску, посмотрю какие-то видео. Посмотрю Core guidelines. Разберусь с SIMD, всякими полезными инструкциями выравнивания.
У Александреску устал читать про менеджеры памяти, а оказалось, это необходимая вещь для игрового движка! Будет дополнительная мотивация.

DirectX:
Буду изучать DX11. Поддержку, которого добавлю в свой движок. Хочу сделать поддержку сразу нескольких графических API. Интересно как придется поступить с математикой, glm мне очень нравился с OpenGL. Нужно будет сделать какие-то эффекты/техники, чтобы показать что я представляю как они реализуются. Самые простые это — shadow-mapping и SSAO, bloom. Хочу разобраться как анимации устроены, skinned-mesh’и нужно будет научиться грузить и анимировать.

Принципы работы hardware: GPU, CPU, кеши и т.д.

Имею представление о том, как работает процессор. В университете увлекался reverse-engineering’ом, дружил с OllyDbg, IDA. Starforce не снимал, но какие-то пакеры попроще обходить умел (исключительно в исследовательских целях, конечно же :D)

А вот как CPU дружит с GPU вообще не понимаю. Есть два буфера, которые меняются от кадра к кадру. Эта память она же в GPU? А какая выделена в оперативной памяти? Как все эти ядра работают? Кто/как синхронизирует их работу, вообще не знаю.

Совсем не знаю, что почитать… Порекомендуйте!

P.S.

Писал для себя, но надеюсь кому-то пригодится: как подход, так и те книги и источники, что я здесь описал.

Estimation (Оценка по времени)

После нескольких этапов можно попытаться оценить по времени сколько займет прохождение пути. Сделаю это после самого трудного — математики.

Читай также:  Как сделать тайлы: пример из Fossil Hunters

Её очень сложно прогнозировать: зайдет, не зайдет. Я могу долго читать страницу вдоль и поперек и не понимать что происходит. Моя мама в детстве, когда я тупил над школьной математикой говорила: «Смотришь в книгу — видишь фигу».

Ребята! Пожалуйста, если Вам понравилась статья — пошарьте её в соц. сетях, особенно ценны Facebook и Google+
Это очень поможет нашему блогу, огромное спасибо!