MMORPG за 80 дней. День 5: Танк поехал, кирпичи "развалились", MVP пришлось оптимизировать
Главный вывод из комментариев первого поста: Нельзя мечтать. Нужно делать как все. Нужно идти проторенными технологиями. Использовать стандартные серверные решения. Нельзя выделяться. Я все понял, потерял мотивацию и мы решили закрыть челендж (((
А вот хрен ) Лучше пусть у нас ничего не получится, чем получится очередная гриндилка аля "убей 500 кабанов и получи 100500 опыта".
Спасибо всем, кто поддержал и подписался (+150 человек!), пишу отчет 5-го дня (в конце поста будет короткое видео), поехали:
Перво-наперво запомните. Если вы захотите делать игру - используйте полигональную графику. С сегодняшними нейросетями с 2 кликов и 1 минуты генерации сразу получаются отличные варианты без затрат на дизайнеров:
Да что там говорить - даже стандартный ЧатГПТ уже рисует неплохо. В данном случае за 60 секунд можно получить визуально приличный концепт/заготовку под полигональную модель и радоваться.
Но у нас-то воксельная графика. Что для меня было сюрпризом, так это то, что нейросети не могут реализовать нужный уровень абстракции и рисуют откровенно страшные вещи. Вот работа ЧатаГПТ на короткий промпт:
Кажется, что это воксель, но нет. Видите - у него рисунок не из квадратиков состоит? Видны скосы и трапеции - нейросеть попыталась сделать что-то ПОХОЖЕЕ на воксельную графику, но не шмогла.
Напрягаем ГПТ дальше и заставляем ее рисовать именно воксельный танк в формате VOX. Готово:
Я и не ожидал сразу халявного результата, что чтобы ТАКОЕ... )) Для этой модели референсом был спрайт от оригинальной БатлСити (желтый танк Player 1).
Подумали, разузнали, что наши языковые модели нейросетей сейчас просто не умеют рисовать воксель и объективно "видеть" свой результат. Потому ошибаются нереально. Упростили им задачу - попросили просто написать алгоритм для Python, а питоном потом уже генерировали модель вне нейросети (локально). Ну получилось конечно лучше (смотрим галерею успеха):





Очевидно, что нейросеть прям потела и старалась - у нее явно были светлые идеи, но обуздать сложную воксельную графику она не смогла.
Решили рисовать руками танк-заглушку, чтобы потом нанятый художник бы сделал нам конфету. Это был первый опыт с МагикаВокселем:
Самое сложное оказалось не нарисовать красивый и узнаваемый танк. Самое сложное - сделать так, чтобы он в топ-даун режиме (вид сверху) остался читаемый. Раньше в играх освещение делали с "запеченным светом" и все было просто - все детали были понятны и узнаваемы, а сейчас "солнышко не с той стороны посветило" - и не понятно где у танка дуло. Так что эта "заглушка" - триумф триангуляции воксельной простоты, передачи образа и топ-даун узнаваемости. Реально было сложно.
Что уж говорить про гусеницы - это отдельный извращенский процесс - сделать так, чтобы они крутились, соблюдая истинную физику:
Хотелось, чтобы они не выдавали какую-то стандартную анимацию, а в самом деле крутились по принципу цепи.
Хотелось, чтобы танк, наезжая на разные поверхности - мог получать разные сопротивления грунтов на каждую из гусениц и чтобы это корректировало траекторию танка. Чтобы при разворотах гусеницы крутились в разные стороны - ну прям как у настоящего танка. В результате гусеницы тоже были побеждены:
Дальше сделали примеры снарядов в вокселе, чтобы было чем стрелять. Тут без приключений - рисовали руками:
Параллельно дорабатывали сетевой движок (у нас это Nakama) и в принципе мы уже начали видеть друг друга в сети. провели несколько тестов, включая первые нагрузочные - полёт нормальный.
Уже к этому моменту мы начали подозревать, что для работы в UE5 нужно не только иметь интеллект, но и некоторый опыт (просто большое количество "моточасов" в движке), которого у нас пока не много. Объясню. В UE5 для прототипирования активно используем Blueprint-ноды (полувизуальное программирование) - это удобно для начинающих. Можно программировать и по классике - но нодами действительно удобнее. Приведу пару наших примеров:



Почувствовали себя программистами-пауками
Это первый опыт с нодами в таком формате. Поняли, что мы справляемся, но лучше найти кого-то, с кем можно проконсультироваться по части того, как всю эту паутину можно "расчесать" и упорядочить. Если кто-то на пикабу имеет опыт - дайте знать, пожалуйста, будем благодарны.
Дальше нужно для дальнейшей разработки получить какой-то завод/АЗС - где танки можно было бы производить и заправлять топливом. Референс был такой:
Много часов спустя получилось вот такое:
Дальше нам нужно было разработать купол упорядочивания (защита от энтропийного излучения). Идеально было не разрабатывать своё, а взять готовое в UE5, если оно там было. К счастью оно там было. Выглядит примерно вот так:
Из-за топ-даун режима и огромных площадей с полем еще предстоит поработать. Но хорошо, что оно есть "на халяву" и выглядит оно приятно. Внедрим в игру - покажу.
Ну и дальше объединяем: Танк + Рабочую сеть + первые объекты в виде базы + кирпичи и т.п.
В видео уже видно тестовую физику разрушения воксельных элементов, управляемую на сервере (см. как разваливается кирпич, когда по нему попадают снарядом). Это не преднастроенный эффект разваливания. Каждый элемент отлетает в сторону в соответствии с весами и скоростью взаимодействующих элементов.
Как видите - с кирпичами проблема. Их прямо ОЧЕНЬ тяжело свести в 3D, в отличие от 2D.
Решилось это вот такой простой схемой:
И внедряя этот алгоритмик - кирпичи начинают быть смотрибельными:
К следующему посту я уже хочу показать вам, как несколько игроков по сети взаимодействуют друг с другом, разрушают предметы, лутают ресурсы и что-нибудь еще. Но для всего этого в наш бесконечный мир нужно будет внедрить генератор карты (с биомами и т.п.). Пока генератора нет - набросали ручной "рисователь" карт (он, кстати, рисует тоже сразу на сервере):
Вы знаете, перечитал пост и нашел его избыточно уверенным и "повышающим градус" для кого-то, кто предлагал альтернативные идеи по реализации игры. Я стирать начало поста не буду, но тут напишу v2 истинного посыла:
"Главный вывод из комментариев к первому посту: Пикабу нашел самое слабое место в нашей затее - сетевые решения и масштаб могут быть рискованными.
Возможно не надо в первые 80 дней мечтать про "тысячу игроков онлайн", бесконечный мир и серверную архитектуру мечты. Сначала надо доказать более простую вещь: танк должен ехать, снаряд должен лететь, кирпич должен разваливаться, а нескольким игрокам должно быть интересно находиться в одной карте. С этим спорить трудно - разумно же.
Но полностью уходить в "самый простой путь" тоже не хочется. Мы делаем проект не только ради сухого результата, но и ради процесса. В хорошем смысле - как дети в песочнице: строим, ломаем, переделываем, пробуем странные идеи и смотрим, начнет ли это оживать. И радуемся!"
На этой позитивной ноте завершаю пост - нужно разрабатывать игру дальше :-) Буду рад вашим идеям в комментариях под постом!
P.S. Забыл написать затраты:
tripo3d - 2300 руб.
meshy - 1400 руб.
Итого всего затрат: 31 500 руб.





















