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

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

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

Земля

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

Макарошки
Макарошки

Текстура встает в base color, спекуляр - в спекуляр, для рафнеса(жесткости) добавляем просто параметр и выставляем его в единицу, что бы не было отражений от поверхности материала.

Нормаль подключаем вначале в ноду Flattern Normal, которая как понятно из названия, просто сглаживает в ноль все высоты нормаль карты. И уже к ней добавляем параметр, который называем Normal Intensity (интенсивность, напряженность). И вычитаем из него 1. Это нужно для более точной настройки отображения высот. Как показано на гифке по ссылке (дтф не хочет подгружать)

https://s4.gifyu.com/images/Earthgif.gif

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

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

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

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

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

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

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

Дальше нам нужен эффект атмосферы.

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

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

Материалы готовы. Теперь нам нужно соединить все вместе.

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

https://s4.gifyu.com/images/earth2.gif

Газовые гиганты и планеты

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

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

Дальше мы точно так же как и в случае с землей подключаем карты. И сразу обнаруживаем проблему. Шахматные швы на финальном материале.

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

Что это такое и с чем едят? В таких шахматных швах, всегда есть три проблемы. Либо нет сглаживания у меша, либо кривая карта нормалей, либо кривое UV, либо движок криво пересчитал тангенсы(Tangent) самого меша.

Зачем они вообще нужны эти тангенсы? Любой движок таким образом, рассчитывает по четырем вертексам как ляжет материал на геометрию меша и для этого используется UV самой модели. Проблема в том, что все движки по умолчанию пересчитывают тангенсы после импорта меша.

Как исправить? Да легко. В настройках материала отключаем перерасчет тангенсов и ставим ручную настройку тангенсов. Для этого нам поможет нода выведения тангенса (Derive Tangent Basis). После правки мы получаем отличный и сочный материал.

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

В движении:

https://s1.gifyu.com/images/Unreal-Engine-5-2022.11.14---21.36.28.04.gif

И в статике:

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

Маленькое отступление или почему я не люблю процедурную генерацию.

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

Есть 3 способа их реализовать. Сделать собственно модельку кольца и поместить в сцену. Реализовать через систему Ниагара (используется для создания частиц и симуляций) в анриале, сделать процедурную генерацию на основе имеющихся моделек. Поскольку ранее модельки булыжников я сделал, было решено попробовать третий вариант. Я не буду описывать весь путь страдания, у меня это заняло 5 часов. Получился удобоваримый код и куча различных переменных. Все работает. Все компилируется.

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

Проблема оказалась в другом. А именно в самой генерации. При генерации кольца из 15 астероидов, которые повторяются по оси, все отлично работает. Все отлично генерируется. Но как только мы увеличиваем диаметр кольца, а так же количество астероидов, естественно это начинает отжирать ресурсы. Я ожидал просадки производительности. Но не настолько. Long story short: при выставлении кольца диаметром 10 миллионов и количество астероидов в каждой точке кольца 5, у меня чуть не сгорел комп. Фпс упал до 1, а проц и видюха в температуре подлетели до 87 градусов.

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

Как оказалось, проблема заключается в системе освещения Lumen. Даже в отключённом состоянии, она все равно на заднем фоне обсчитывает всю геометрию. Мой вопрос на форуме эпиков, был встречен ответом: это известный баг, ждите версию 5.1 в ней он исправлен.

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

Солнце.

И так солнце. Нам нужно сделать не только эффективно по ресурсам, но и красиво. Что б прям сочная картинка была. Ослепляла.

Но текстура из solarscope не слишком сочная. По этому было решено сделать свою текстуру. Для этого я отправился на другой сайт: sdo.gsfc.nasa.gov

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

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

Однако в этот раз, мы используем другой подход. А именно поместим две текстуры и заставим их крутится в противоположные стороны. Тем самым создав эффект волн.

Верхний panner крутит по часовой, нижний panner против часовой.
Верхний panner крутит по часовой, нижний panner против часовой.

И объединим все это в линейную интерполяцию. Сила математики fck yeah.

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

Повторяем то же самое с картой шума. И сразу добавляем Sine ноду. Sine отвечает за приведение расчетов по Sin и Cos (синус косинус) к единому знаменателю. Зачем это нужно? Что бы 4 карты текстур, адекватно легли друг на друга и не смешивались. Единственное отличие от обычной текстуры, мы еще добавили Clamp в карту шума на выводе. Clamp берет все вводные данные и задает минимальное и максимальное значение для них. Нужно это для точной настройки отображения карт.

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

Ну и в самом конце мы добавляем эмиссию. Но поскольку нам не нужно, что бы солнце просвечивало насквозь, мы с помощью всё той же математики, разделяем ее на внутреннюю (она же базовая) и на эмиссию по грани нашей модели. Для создания эффекта ореола. Так же кидаем легкий Tint(Оттенок), благодаря которому мы в будущем сможем менять цвет звезд.

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

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

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

Таким образом леди и джентельмены, мы создали солнце.

https://s4.gifyu.com/images/1233e2f2ca0b950d2e2.gif

Послесловие

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

До встречи в новой части!

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