Мои маленькие достижения в Monogame

И рассуждения о том, почему строить велосипеды полезно.

Тут я учился делать физику песка

Все началось с архитектуры. Поскольку все, что дает вам Monogame (он же Microsoft XNA), это вывод спрайтов на экран и некоторые математические библиотеки (например, для работы с векторами и точками, и те, на мой взгляд, сделаны не достаточно хорошо), \поправка: речь про инструменты для той задачи, которую я выполнял\ я занялся разработкой фреймворка по привычной мне и многим структуре Entity Component System с, соответственно, сущностями, компонентами и сценами. Такая архитектура позволила мне перескакивать с разработки одного компонента сразу к другому, поэтому я постоянно решал все новые и уникальные задачи, совсем не скучая и не рискуя перегореть.

На видео изображена типичная физика с песка с одним главным отличием от большинства остальных подобных проектов: я реализовал динамическое скрепление пикселей (это видно, когда они становятся красным объектом). Я уделял огромное внимание оптимизации (на сколько только зватало моих знаний, совсем не жалея времени), поэтому мой средний компьютер с Ryzen 4300U еще удерживал на своих плечах около пяти тысяч таких пикселей (каждый со своими физическими параметрами).

Данный проект должен был перерасти в файтинг с управлением элементами. Бойцы могли бы вырывать землю из под ног на карте или замораживать воду, а потом кидать все это или расстреливать оппонента. В один момент я начал осознавать, что, если по части программирования, геймдизайна и в принципе игровой логике у меня проблем не возникнет (я студент техникума, у меня достаточно свободного времени и пока что я могу не думать о том, что не зарабатываю деньги), то вот графику я реализовать никак не смогу, потому что мои навыки в сфере рисования абсолютно нулевые. Да и амбиции я поднял такие, что проект опять затянется не менее чем на МНОГО, поэтому я немного впал в апатию, а через пару дней отчаяния приступил к элементарной, но очень легко-реализуемой и годной для моего уровня гиперказуалке.

Я случайно сказал, что она легко-реализуема? Ну, если не учесть то, что для отрисовки полигонов в нужном мне виде мне пришлось изучать некоторые математические концепции дополнительно. Например, для закраски полигонов шейдером я проверял, находится ли точка внутри всех граней полигона, используя скалярное умножение, находя нормали и делая некоторые другие непотребства. Мы живем в отличное время и все необходимое для отрисовки полигонов я нашел в интернете, но предварительно я успел сдаться пару раз в 4 часа ночи, пытаясь допереть до этого самому или найти более простое решение, которое мог позволить форм-фактор движка. Также в XNA есть возможность рисовать полигоны из текстур, но я предпочел делать это вручную в привычной мне системе измерений и без матриц, в которые я пока не хочу залезать без необходимости. Наверняка я еще пожалею о своем решении. Зато изучил, как работают и как писать шейдеры, что тоже очень круто.

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

Вы уж простите за такую сумбурную публикацию. Цель у нее - не только показать, какой я молодец и как хорошо умею гуглить. Создание собственного игрового фреймворка - огромный труд, который окупается пополнением ваших знаний в самых различных сферах. От графики и логики того, как работает видеокарта, до программной структуры, математики, геометрии и оптимизации. Я построил одноколесный велосипед без скоростей и тормозов, но уже на данном этапе могу уверить - изучение низкоуровневой архитектуры и попытка скопировать хотя-бы самые примитивные игровые движки - невероятно полезное занятие для тех, кто хочет расти как разработчик. Unity прекрасен для коммерческих разработок с большими дядьками и деньгами, но если вы разрабатываете исключительно для себя, для изучения языка и откапывания всех его возможностей, поверьте, создание подобных вещей с нуля даст вам незабываемые ощущения и опыт, которым разработчики популярных и комфортных (не совсем про Unity, но все же) движков будут обделены, потому что они решают задачи, как правило, более поверхностного уровня.

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

130130
46 комментариев

Хотел бы я написал здесь че-нить умное. Но поскольку я тупой и половины слов не понял, напишу, что было интересно.

21
Ответить

почему строить велосипеды полезноУ меня для тебя плохие новости - ничто их этого не полезно

3
Ответить

Не соглашусь. Все зависит от целей.  Я учусь на программиста и для меня оказалось невероятно полезным изучить низкоуровневое устройство игровых движков. В своей деятельности я не всегда смогу воспользоваться уже готовыми инструментами, да и используя их, я никогда не залезу, например, в математику, которая для меня также очень полезна. Я уже разработал игру на Unity и уверенно говорю - перетаскивание нодов в шейдере и выполнение многих других сложых операций, упрощенных до элементарного интерфейса не дает достаточного представления об оптимизации.
Еще раз - игроделам нужны инструменты, но программистам полезно будет создать хотя-бы один такой инструмент с нуля.

34
Ответить

Не умея строить велосипед, не построишь мотоцикл.

Ответить

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

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

Это моё ИМХО как недопрограммиста))

9
Ответить

Комментарий недоступен

4
Ответить

Комментарий недоступен

2
Ответить