
Большинство ассетов с северным сиянием просто рисуют его на небе. Здесь сияние ещё и освещает землю.
Aurora Borealis Snow — набор для ночных сцен на Universal Render Pipeline. В нём три части: система анимированных полотен сияния, шейдер снега и льда для мешей и шейдер снежного террейна. Все три части связаны между собой.
Демо в браузере на WebGL (только сияние)
Сияние используется в приложении Lumasphere, оно есть в Google Play и App Store.

Раз в несколько кадров сияние рендерится в небольшую кубмапу, которая обновляется в реальном времени. Каждая блёстка на снегу берёт цвет из этой кубмапы по своему вектору отражения: снежинка, повёрнутая на север, ловит зелёную полосу сияния над головой, а соседняя, наклонённая в другую сторону, остаётся холодной и синей. Цвета не усредняются в один общий оттенок. При движении камеры цвет земли меняется вместе с небом.
Сияние
Полотна появляются вокруг камеры по кольцу (его параметры настраиваются) и следуют за ней при движении. Поэтому сияние всё время остаётся на одном видимом расстоянии и выглядит как часть неба, а не как геометрия, в которую можно зайти. Каждое полотно — плоскость, которую изгибают две синусоиды. Текстура берётся из двух независимых слоёв флипбук-атласа, слои смешиваются в режиме Add, Multiply или Screen. Полотна плавно появляются, дрейфуют и гаснут, время жизни у каждого случайное. Полотна берутся из пула, во время игры ничего не создаётся.
Все параметры хранятся в ScriptableObject, так что можно собрать несколько вариантов сияния и переключать их одним полем. Переключатель Editor Preview запускает всю систему в Scene View без входа в Play Mode.


Снег
Два шейдера, одна модель освещения. Шейдер для мешей построен на URP Lit: параллакс-смещение, упакованные маски (mask map) и пропускание света (transmission), из-за которого тонкий снег и лёд светятся, когда за ними луна или сияние. Шейдер террейна — полноценная производная от URP TerrainLit, поэтому всё стандартное остаётся на месте: смешивание слоёв по высоте, попиксельные нормали для инстансированного террейна, дыры в террейне, вывод в GBuffer для Deferred, запекание лайтмапов и больше четырёх слоёв через дополнительные проходы. Модель блёсток и пропускания света добавлена поверх.
Меши могут плавно переходить в террейн. Смешивание с землёй читает текущую карту высот террейна и с помощью шума растворяет основание валунов и ледяных глыб в ровном снегу, так что резкой линии пересечения с поверхностью нигде нет.

Код открыт и понятен
Полные исходники, без скомпилированных библиотек и без нод-графов, в которых пришлось бы разбираться. Все шейдеры написаны на HLSL вручную, их можно открыть, прочитать и доработать. Модель блёсток вынесена в один include-файл, который подключается в свой шейдер тремя строками. Подробное руководство описывает настройку по шагам, объясняет каждое свойство, перечисляет глобальные свойства шейдеров и сразу называет известные ограничения.
Требования
- Unity 6000.3 или новее
- Universal Render Pipeline
- Путь рендеринга Forward или Forward+ (шейдер террейна поддерживает ещё и Deferred)
- Линейное цветовое пространство и включённый HDR; очень желателен Bloom override

Возможности
Система сияния
- Полотна из пула, привязанные к камере — во время игры ничего не создаётся, мусора для сборщика нет
- Два независимых слоя флипбук-атласа, смешивание Add / Multiply / Screen
- Деформация вершин двумя синусоидами: низ закреплён, верх раскачивается
- Маска краёв из текстуры, контур квада никогда не виден
- Случайные время жизни, дрейф, поворот (yaw), кадр атласа и скорость прокрутки для каждого полотна
- Плавное появление и затухание, всё задаётся в одном ScriptableObject
- Editor Preview: вся система работает в Scene View без входа в Play Mode

Освещение от сияния
- Небольшая проба с кубмапой, обновляемой в реальном времени, снимает только сияние на отдельном слое
- Съёмка распределена по кадрам, разрешение (16–256 px) и интервал обновления настраиваются
- Выборка по направлению для каждой снежинки — цвет блёсток правильно меняется по поверхности
- Направление и цвет сияния с учётом затухания полотен передаются в глобальные свойства шейдеров
- Если отключить пробу, весь вклад сияния в освещение убирается одним значением

Шейдер снега и льда для мешей
- На основе URP Lit: тени, дополнительные источники света, reflection probe, SSAO, туман
- Напрямую поддерживается упаковка масок Quixel Megascans (R — шероховатость, G — AO, B — пропускание, A — высота)
- Параллакс-смещение по каналу высоты
- Подповерхностное пропускание света и от основного источника, и от сияния
- Блёстки в мировых координатах, стабильные на любом расстоянии, с маскированием по альбедо и наклону
- Смешивание с землёй по шуму: меши утопают в снегу террейна
- Полный набор проходов: forward, shadow caster, depth, depth-normals

Шейдер снежного террейна
- Полная производная от URP TerrainLit — всё из стандартного шейдера сохранено
- Смешивание слоёв по высоте, свой инспектор материала
- Попиксельные нормали для инстансированного террейна, дыры в террейне, генерация basemap
- Проход GBuffer для Deferred, meta-проход для запекания лайтмапов
- Больше четырёх слоёв через дополнительные проходы
- Та же модель блёсток и пропускания, что и в шейдере для мешей, поэтому материалы выглядят одинаково
Остальное
- Подробно прокомментированная документация, никаких чёрных ящиков
- Модель блёсток вынесена в один include — в свой шейдер добавляется тремя строками
- Подробное руководство: настройка, справка по свойствам, оптимизация производительности, решение проблем
- Известные ограничения честно описаны, а не спрятаны

Видео
![]()
https://www.youtube.com/watch?v=y4PP-YO66g8
Страница в Asset Store: Aurora Borealis Snow