Energy Tree

Демо в браузере (WebGPU) (в настройках браузера нужно включить флаг WebGPU)

Вживую — в приложении «lumasphere» в Google Play и App Store

Светящееся дерево из энергии. Без моделирования, без анимационных клипов, без Shader Graph.

Energy Tree строит целое дерево из сида: энергетические нити закручиваются вверх от кончиков корней, проходят через ствол, расходятся по ветвям и заканчиваются «дышащими» листьями-билбордами. Одновременно выброс на GPU циклически выпускает из кроны светящиеся частицы-листья. Стоит сдвинуть слайдер, и дерево сразу пересобирается в Scene view.

Форма, листья и частицы задаются тремя ассетами ScriptableObject с независимыми сидами, поэтому настройка ветвей не перемешивает листья.

Работает во вкладке браузера. Демо выше — настоящий WebGPU-билд Unity, а не видео.

Процедурная форма

  • Нити идут от кончика корня через ствол до кончика ветки, всё строится из одного главного сида
  • Разлёт, глубина и закрутка корней: основание может быть расширенным или похожим на когти
  • Высота ствола, число витков и кривая радиуса пучка для спирали
  • Два поколения ветвей с диапазонами угла, длины и спада
  • Направление роста — от поникших, как у ивы, ветвей до тянущихся к солнцу, с кривой спада
  • Независимый шум на оси ствола и на ветвях
  • Радиус ограничения кроны держит кончики веток внутри заданного силуэта
  • Сглаживание складок не даёт лентам перегибаться через себя при любой ширине

Шейдер энергетических нитей

  • Два прокручивающихся слоя атласа со смешиванием Add, Multiply или Screen
  • HDR-градиент от цвета корня к цвету кончика
  • Проход со стенсилом: перекрывающиеся нити добавляют свет только один раз на пиксель, без белой каши
  • Покачивание вершин сильнее к кончикам, корни остаются на месте
  • Затухание на стыках и кончиках, мягкость краёв задаётся в пикселях
  • Совместим с SRP Batcher

«Дышащие» листья

  • Один билборд, повёрнутый к камере, на каждую точку крепления ветки
  • Два слоя текстуры со сдвигом в полцикла, поэтому листья появляются и исчезают плавно, без резких скачков
  • Размер, скорость цикла, поворот и кадр атласа для каждого листа берутся из независимого сида
  • Кривые альфы и масштаба запекаются и передаются прямо на GPU

Выброс листьев на GPU

  • Симуляция на compute-шейдере, частицы бесконечно перезапускаются, каждая со своим периодом
  • Кривая скорости интегрируется, поэтому если поменять её форму, меняется темп, а дальность полёта остаётся прежней
  • Время жизни, гравитация, размер, яркость и кадр атласа для каждой частицы
  • Один буфер, выделяется один раз, до 8192 частиц
  • Burst, Stop и Play On Enable — из инспектора или из скрипта

Работа с ассетом

  • Три ассета настроек, при движении слайдера дерево пересобирается на лету
  • Сгенерированные меши и дочерние объекты не попадают в файл сцены или префаб
  • Полные исходники HLSL, без Shader Graph и скрытых зависимостей
  • Бюджет полигонов задаётся одним слайдером
  • Окно приветствия с полным руководством прямо в редакторе

Мобильные платформы и веб

  • Нити и листья рассчитаны на Shader Model 3.5 и работают на любом мобильном GPU
  • Выброс листьев использует compute-шейдер, он поддерживается на Vulkan, Metal, GLES 3.1 и WebGPU
  • Один draw call на систему, никакой работы CPU на каждую частицу, никакого мусора каждый кадр
  • Для телефонов всё можно урезать до нескольких нитей, а для главного объекта сцены — наоборот, добавить детализации

Сделано для Unity 6 и Universal Render Pipeline. Подходит как главный объект сцены, святилище, основа для портала, фон для дерева навыков, центральный элемент меню или маяк в конце уровня.

Energy Tree

Energy Tree

Возможности

  • Процедурное энергетическое дерево из сида, меши моделировать не нужно
  • Закрученные нити-ленты от кончиков корней через ствол в ветви
  • Два прокручивающихся HDR-слоя атласа со смешиванием Add, Multiply и Screen
  • Проход со стенсилом не даёт перекрывающимся аддитивным нитям пересветиться
  • «Дышащие» листья-билборды из двух слоёв со сдвигом в полцикла
  • Бесконечный цикл выброса листьев на compute-шейдере, до 8192 частиц
  • Три ассета настроек с независимыми сидами
  • Пересборка на лету в Scene view, Play Mode не нужен
  • Покачивание вершин сильнее к кончикам веток
  • Бюджет полигонов задаётся одним слайдером
  • Шейдеры нитей и листьев совместимы с SRP Batcher
  • Полные исходники HLSL, Shader Graph не нужен
  • Работает на мобильных и в вебе, есть интерактивное демо на WebGPU
  • Сгенерированная геометрия не попадает в файл сцены
  • Сделано для Unity 6 и URP

Видео

Energy Tree

https://www.youtube.com/watch?v=xKN2_cjDcXU

Страница в Asset Store: Energy Tree