Звёздная тумманость в Unreal Engine 4

Вместо предисловия будет предупреждение — из данной пасты была удалена «вода» которую вы можете прочитать в оригинале, ссылка на который — в самом низу.

Звёзды

Первая вещь, которую я хотел узнать о звёздных сценах — как в фотошопе люди делают крутые космические сцены.Все эти приёмы композиции были очень похожи:

  • Сделать множество точек используя шум.
  • Маска секций шума, чтобы сделать сцену более интересной (насколько это возможно).
  • Настройка яркости/контрастности, чтобы звёзды имели разные уровни яркости.
Я думал, что это будет достаточно просто сделать с помощью комбинации материала и блупринта, поэтому начнём с грубого способа.

Шаг первый — спавн звёзд

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

Для создания этого, я использую Bluetilities для создания , в противном случае вам придёться заморачиваться с ручной привязкой это штуки к запуску уровня.Вы также можете установить стартовое значение, чтобы каждый раз иметь одинаковый паттерн.Ниже вы можете наблюдать, что компонентами StarVolume являються — сам волюм и инстанс меш который использует EditorPlane для статического меша.

Когда вы запускаете Respawn функцию, блупринт спавнит Х количество звёзд в рандомных местах расположенных внутри данной области.Звёзды заспавнены как инстанс статик меши, и все они стоят 1 draw call. Ниже расположена картинка с демонстрацией заспавненных звёзд.

Этап 2 — материал

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

Меши ориентированые на камеру

У меня возникли некоторые проблемы с инстанс статик мешами и получением их актуальных расположений в мировом пространстве, результаты были довольно странными. Ниже пример «Math Hall example 2.21» из Content Examples, единственное отличие в выделенным красным объекте, где я выгрузил ActorPosition для ObjectPivotPoint.

Затухание звёзд при проходе камеры

Следующим этапом стало затухание звёзд при их проходе мимо камеры.

Форма звёзд

Выбор между формой DiamondGradient и RadialGradientExponential занял у меня длительное время.Как пример, ниже сравнительные картинки.

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

Этап 3 — Материал Разное

Так как это Translucent материал, то необходимо включить адаптивный anti-aliasing, в противном случае, могут пропадать звёзды когда камера движется.

Финальные мысли про звёзды

Вещи которым я рад:

  • 3D звёзды сквозь которые я могу летать и все они с parallax эффектом.
  • 1 draw call.
  • Прост в применении.

Вещи которым я не рад:

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

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

Создание примера туманности

В Content Examples Effects map был найден эффект облака, и после того, как поигрался с параметрами, получил такой результат :
111

Стартовая точка метода.Дополнительный материал.
111

Параметры perlin noise.
111

Хотите более пушистые облака? Уменьшить scale до 0.002, level scale увеличьте до 1,5.
111

Дополнительные тесты
Я попробовал сменить материал на lit и создать светлые/тёмные области.
111

Оригинал.
Перевёл и отредактировал RedComrade 06.02-11.04.2016


Читайте также: