Популярное
Свежее
Моя лента
Сообщения
Рейтинг
Пополнить Steam
Низкая комиссия
Темы
Игры
Офтоп
Гайды
Вопросы
Ночной музпостинг
Творчество
Кино и сериалы
Музыка
Инди
Милые животные
Показать все
DTF
О проекте
Правила
Реклама
Приложения
Аккаунт удален
14.11.2022

Статья удалена

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

С чего начинается любая современная 3д игра?

Вопрос одновременно простой и сложный. Один человек скажет что с кода. Второй человек скажет что с создания концепта. Третий, что с идеи. Я не претендую на последнюю инстанцию, но считаю что начинается с ассетов. Сколько бы я не участвовал в разработке игр и просто каких либо ассетов для чего-либо, понял одну важную вещь. Можно написать код, можно придумать концепт, но без анимаций, моделей, спрайтов, звука, это будет мёртвая пустота. Прям как космос.

За один вечер я накидал список своих хотелок и разбил их на этапы:

  • Космосим в стиле Elite, X, Freelancer.
  • Космические бои
  • Разные классы кораблей
  • Станции
  • Разные фракции и расы
  • Возможность модифицировать и строить корабли
  • Возможность строить свои станции
  • Относительный реализм

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

Движком у нас будет UE5 так как мне лень писать код на первых этапах. Проще накидать макорошек в блюпринтах, а потом уже приводить код в нормальный вид, когда хотя бы 50% задуманного будет готова.

Объясню свою позицию. При наличии хотя бы базового понимания математики и того как работает любой язык программирования, блюпринты становятся незаменимы для прототипирования. То есть создания прототипов любых проектов на лету, что бы просто понять, стоит ли тратить силы и время далее.

Изначально блюпринты были тормозящими и не удобоваримыми, но за многие года, эпики допилили их до хорошего состояния, дополнили все библиотеками kismet mat lab и другими. Что позволяет выполнять сложные операции с расчетами.

Скайбокс.

В моей игре началом будет служить солнечная система, с последующим переходом в глубокий космос. Значит нам нужно для начала реализовать ее.

На помощь приходит прекрасный сайт solarsystemscope, на котором можно в 2-8к взять текстурки и материалы планет, лун и солнца. Так же там есть два варианта звездного неба, с млечным путем и без.

И первое с чем сталкиваемся это скайбоксы. Скайбоксы в любом движке это не плоская 2д текстура, а hdr box (коробка), изображение которое поделено на разные стороны. В математике за 4 класс — грани.

Скайбокс в развертке
Скайбокс в развертке

Почему так, а не иначе? Ответ очень прост. Мы с вами живем в трехмерном пространстве, у которого есть ширина, высота, длинна. То есть ортогональные векторы. Или те самые XYZ которые привычны многим. Естественно при создании графики все эти математические законы закладываются в софт. Скайбоксы имеют ширину, высоту и длину, как любой куб. И игрок (камера игрока) закрывается внутри куба. Тем самым создавая эффект объёма.

Сделать скайбокс на самом деле очень просто. Нам нужно любое изображение огромного размера. Мой совет брать сразу 8к. Потому можно будет ее порезать или ужать до нужного размера сохранив качество. Чем выше разрешение тем меньше пиксель. Соответственно более четкая картинка. Я не стану вдаваться в подробности разрешений и пикселизации, что бы не утомлять.

Изображение прогоняем любым онлайн конвертером, из стандартных форматов jpg-png в hdr.

Получившаяся текстура скайбокса.
Получившаяся текстура скайбокса.

Изначальный размер 8192x8129 после форматирования в hdr, стал 8192х4096. Шириной 8192 пикселей и высотой 4096 пикселей. После чего в самом движке я выставил ограничение на отображение максимум 4к для скайбоксов.

Для чего этого нужно, ответ простой. Чем больше материалы тем больше они весят, тем сложнее для пк обрабатывать картинку. 4к для нас достаточно. А автоматические скалирование(изменение размера) в движке, не портит картинку. Чем больше изначальное изображение, тем четче оно будет после скалирования.

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

Пример мипмаппинга.
Пример мипмаппинга.

Группу выставляем скайбоксы. И настройки компрессии в 2D rgba.

Настройка компрессии зависит от того, что вы изначально поместили в свой материал, какую функцию он должен выполнять, как будет рендериться.

Поскольку мы заливаем изначальный формат hdr, это значит что у нас текстура идет с цветовой моделью RGB(red, green, blue). Но для создания объёма и просто более качественного рендеринга нам нужно еще добавить альфа канал. То есть канал прозрачности. По советам самих эпиков и согласно их документации, все что не относится к текстурам моделей, лучше оставлять 2D RGBA. Но никто не запрещает поиграться с настройками компрессии.

Дальше из нашей текстуры создаем материал, который применим к небесной сфере.

Пример материала
Пример материала

Тут тоже ничего сложного, первым делом выставляем настройки, домейн, то есть куда входит текстура, в нашем случае это поверхность. Surface. Дальше бленд режим, это настройки смешивания, в нашем случае непрозрачный - Opaque, и настройка шейдинга Unlit - неосвещенный.

Сам материал у нас выступает эмиссей(картой освещенности и цвета), с вектором отражения (Reflection Vector). Поскольку нам нужен базовый скайбокс без наворотов (пока что), оставляет вектор по трем направлениям. 0,0,0.

Теперь когда все готово, все что нам нужно, это вызвать из самого движка SM_SkySphere. Готовый блюпринт для небесной сферы, и просто поменять его материал на наш, после добавить в сцену.

The prophecy is true, my dudes.
The prophecy is true, my dudes.

Главное — Ассеты.

И так скайбокс у нас есть, теперь нам нужны ассеты. Ведь пустой космос это скучно и банально.

Для начала бахнем планеты и различные метеориты, прочие булыжники.

С того же насовского сайта, дёргаем текстуры планет и лун. Только уже в 2к. Нам нафиг не нужны 8к варианты, так как материалы доработаем сами.

Свиборг ты ли это
Свиборг ты ли это

Для планет делаем обычную сферу. Чуть увеличиваем полигонаж, для более качественного распределения текстуры. Дефолтные настройки под анриал, у нас Z-Up, размеры в сантиметрах. Так как 1 см = 1 юнит в анриале.

Так же делаем заготовки для астероидов.

Ah shit, here we go again.
Ah shit, here we go again.

И уже из них лепим в зебре что-нибудь более похожее на астероиды. Тут не надо изгаляться над художествами и сложностью модели. Потому что игрок не будет пристально разглядывать каждый астероид, а расстояние между моделью корабля игрока и булыжника будет достаточное, что бы скрыть недостаточное качество. Все шероховатости можно убрать позже, пройдясь либо в зебре, либо в другом софте обычным сглаживанием.

Kill me pls.
Kill me pls.

И уже итоговый вариант с готовым материалом.

Все шероховатости и неровности можно сделать через нормал мапу или через дисплейсмент. Тут уже кому как хочется.
Все шероховатости и неровности можно сделать через нормал мапу или через дисплейсмент. Тут уже кому как хочется.

Спустя пару часов мы получаем базовый набор, для создания нашей солнечной системы.

Вот они красавцы.
Вот они красавцы.

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