38

Как сделать простые Nebula облака

Всем привет!

Недавно захотелось нам в игру добавить туманности в виде Nebula облаков.

Попробовали поискать информацию в интернете, нашли такие варианты:

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

2. Использовать набор плоскостей, на которые отрисовывается 3D текстура облака. Такой вариант работает быстрее, чем Raymarching, но требуется особая текстура (атлас), где будут отрисованы все "разрезы" облака.

3. Использовать системы частиц. Работает быстро, очень гибко в настройке. Такой подход используется в мобильной игре Galaxy on Fire 2.


На третьем варианте мы и остановились. Добавили эффект полета сквозь туманность. Результат выглядит примерно так:

Ниже мы расскажем, как его добиться :)


Подготовка

Мы начали работу с анализа Nebula облаков. И выделили три составляющих - сами облака, черные скопления и звезды.

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

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

Теперь нужно определиться с цветами. По запросу "nebulas gradient color" в интернете можно найти множество разных наборов цветов. Мы выбрали такую палитру:

Система частиц для основного облака

Теперь создаем систему частиц для основного облака, выставляем такие параметры:

Duration: 20

Looping: ✔️

Prewarm: ✔️

Start lifetime: 20

Start size: 100 - 150

Start rotation: 0 - 360

Simulation Space: World

Start Color: выбираем Gradient, режим Mode - fixed

Прозрачность выставляем 150 (верхний ползунок)

Вкладка Emission

Rate over Time: 2


Вкладка Shape

Здесь задаем форму для появления частиц, выберем полусферу, чтобы частицы появлялись "впереди" корабля

Shape: Hemisphere

Radius: 150

Radius thickness: 0.1


Вкладка Color over Lifetime

Тут зададим плавное появление и исчезание частиц через прозрачность (верхние ползунки)

Вкладка Texture Sheet Animation

Теперь надо указать, что в текстуре используется атлас и задать, какие картинки брать из атласа

Mode: Grid

Tiles: X = 4, Y = 4

Animation: Whole sheet

Time mode: Lifetime

Frame over Time (выбираем Random between two constants): 4 - 11.998

Вкладка Renderer

Задаем максимальный размер частицы относительно экрана и указываем материал

Max Particle Size: 10

Material: создать материал


Материал

Для этой системы частиц создаем материал с нашей текстурой-атласом. Шейдер выбираем обычный для частиц Mobile/Particles/Additive

В результате получим примерно такой вид облака:

Система частиц для черных туманностей

Копируем систему частиц для облаков и модифицируем ее под черные туманности.

Для этого изменим следующие параметры:


Start size: 200 - 400

Start Color: выбираем черный цвет


Вкладка Emission

Rate over Time: 0.2


Вкладка Shape

Если оставить полусферу, то черные пятна могут появиться на пути игрока, что выглядит не очень красиво. Поэтому форму генерации мы изменили на конус.

Shape: Cone

Angle: 15

Radius: 100

Radius Thickness: 0.13

Length: 160

Emit from: Volume

Вкладка Texture Sheet Animation

меняем индексы картинок на индексы под черную туманность

Frame over Time: 0 - 3.998


Материал для черной туманности

Создаем новый материал и выбираем шейдер Mobile/Particles/Multiply.

Этот шейдер будет делать обратный эффект - затенять картинку. Т.е. делать полностью черные частицы.


Получим примерно такую систему:

Система частиц для звезд

Третью систему частиц мы также сделаем копированием из первой системы. И изменим следующие параметры:


Start size: 5-10

Start color: в градиенте выставляем несколько ярких цветов и у всех выставляем яркость 40 (параметр V в палитре HSV). Ниже будет пояснение.

Вкладка Emission

Rate over Time: 1


Вкладка Texture Sheet Animation

меняем индексы картинок на индексы под звезды

Frame over Time: 12 - 15.998


Материал для звезд

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

Сам шейдер будет основан на простом Additive шейдере, но с нюансом - будет умножать цвет на 4. Таким образом, края текстуры будут иметь цветовой оттенок, а середина станет "засвеченной", т.е. белой. Именно поэтому мы уменьшили яркость цвета в палитре у системы частиц.

Код шейдера доступен по этой ссылке, пользуйтесь на здоровье :)


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

#комплиментдня за то, что дочитал до конца.

Ты очень добрый и отзывчивый участник PGD сообщества!

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

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


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества