Как запланировать процесс обучения и разработки?
Процесс разработки игр и обучения/самообучения взаимосвязаны. А если ты – инди, тем более! Главное держать фокус, и быть сконцентрированным. В помощь нам всем приходит планирование, поговорим о нем!
Привет, ребята! Давно я ничего не писал и, честно признаться, раскис. Отковырять себя с дивана и начать интенсивно двигаться вперед, мне помогает (и я уверен и Вам тоже пригодится) – Планирование!
А это значит, что наступило время приключений и я должен познакомить Вас, с 5м правилом Dev-ленда (правило будет скорее советом).
Представляю вам следующее правило:
Правило Dev-ленда №5. Составь road-map!
Что такое roadmap?
Roadmap (с английского, буквально «дорожная карта») — это план выпуска продукта. Чаще всего это новая версия или развитие уже известного продукта, изменений в котором ждут пользователи.
Что в нашем случае “продукт” и почему это так важно? Roadmap позволяет контролировать прогресс, видеть какой путь уже пройден, а какой еще предстоит пройти. И если это хорошо работает с различным ПО, то почему бы не сделать то же самое с твоей игрой или процессом обучения?
Я предлагаю на примере меня, рассмотреть как составить roadmap. Такой “кейс” мне очень легко описать, и я надеюсь он будет кому-то полезен.
От общего к частному
Главное не мельчить и двигаться от общих вещей к частному. Используем принцип, который знают программисты, но применяют с переменным успехом все разработчики – и художники и дизайнеры. Это принцип нисходящего проектирования.
Кстати, у игровых разработчиков тоже есть отличная техника, которая работает похожим образом это LOD’ы. Level of Details. Уровень детализации объекта повышается когда наблюдатель приближается к объекту.
В процессе работы и планировании очень важно не забегать вперед и не хвататься за детали, которые на данном этапе не нужны.
А у художников примерно такой же принцип тоже есть! Они начинают работать от пятна, больших объемов постепенно детализируя, дополняя лайн или пятна (правда ведь?)
Мой кейс
В общем, примерный принцип вы поняли – начну. 2017й удачно складывается, но до конца еще очень много времени, я могу что-то классное успеть прокачать!
Начинаем выстраивать систему с общих компонентов и продвигаемся к детализации только когда все общие компоненты наметили.
Уровень 1. Общие цели
Я хочу профессионально заниматься программированием графики. Это будет моя важнейшая цель. Детализируем, что мне стоит изучить и проработать, чтобы быть готовым выполнять задачи?
Уровень 2. Выделяем детали и шаги к достижению
Это и есть дорожная карта к цели. По идее, если я правильно выделил необходимые элементы, то поочередно завершив их все, я буду у цели.
Необходимая база в профессии
Самые необходимые области знаний в программировании графики
- Принципы устройства/проектирования игровых движков,
- Математика,
- C++,
- Графические API (сюда включен шейдерный язык и базовые техники вроде Shadowmap, SSAO),
- Принципы работы hardware: GPU, CPU, кеши и т.д.
Уровень 3. Определяем источники, которые помогут эти области освоить
Книги, видео-курсы, лекции – в общем все, что позволит знания в определенных областях углубить.
Принципы устройства/проектирования игровых движков
Ни раз более опытные коллеги говорили, что единственная книга по этой теме – Game Engine Architecture Джейсона Грегори. Лекций и курсов похоже никаких нет. Буду читать ее и исправлять свой движок.
Математика
Планирую читать и прорешивать примеры из книги 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 (Оценка по времени)
После нескольких этапов можно попытаться оценить по времени сколько займет прохождение пути. Сделаю это после самого трудного – математики.
Её очень сложно прогнозировать: зайдет, не зайдет. Я могу долго читать страницу вдоль и поперек и не понимать что происходит. Моя мама в детстве, когда я тупил над школьной математикой говорила: “Смотришь в книгу – видишь фигу”.
В последнее время много постом – классно! :3
P.S. не подскажете на чём писали сайт? И помог ли он “прорекламировать” себя, в принципе?
Привет, постов вроде наоборот – не много :)
Сайт не писал, это бесплатный движок – WordPress, помогла ли реклама – в какой-то очень небольшой степени,- да.
Один небольшой заказ фрилансерский я получил с сайта. Кажется, если бы я был активным пользователем бирж вроде upwork, было бы эффективнее.
Зато я познакомился с очень многими классными разработчиками, в основном художниками, которые звали поучаствовать в их проектах, я отказывался (у меня первым делом – самолеты, всмысле программирование графики) но опыт знакомств – классный!
Спасибо за ответ!) Ну, раньше временами в разы меньше было, а сейчас оживление, что радует)