В одном из мобильных проектов мы столкнулись с 5000 кустов на сцене, которые давали 200 draw calls. После внедрения GPU Instancing и иерархического ветра число draw calls снизилось до 10, а FPS вырос с 25 до 60. Средняя экономия FPS budget — до 40% по сравнению с готовыми ассетами, что на реальном проекте дало экономию около $2,000 на этапе оптимизации. Наши шейдеры обеспечивают в 3 раза меньше draw calls по сравнению с Asset Store аналогами.
Как работает vertex animation?
Дерево с тысячей листьев нельзя анимировать через кости — это сотни skinned mesh renderer вызовов. Стандартное решение — vertex shader animation. В ShaderGraph (URP/HDRP) алгоритм: Transform Position → World Position → Sine-based offset по X и Z с Time + Phase Offset. Phase Offset кодируется в вершинный цвет или UV2 меша на этапе подготовки ассета. Без него ветки движутся синхронно — механическое покачивание.
Иерархический ветер — настоящий differentiator. Движение разбивается на три уровня:
- Trunk sway (раскачивание ствола) — низкая частота, большая амплитуда
- Branch flutter (ветви) — средняя частота, меньшая амплитуда, R-канал Vertex Color
- Leaf shimmer (листья) — высокая частота, минимальная амплитуда, G-канал Vertex Color
В шейдере каждый уровень — отдельный Sine с разными параметрами. Веса берутся из vertex color.
Почему инстансинг критичен для производительности?
Трава и деревья требуют GPU Instancing. В Unity используем Graphics.DrawMeshInstanced или Graphics.DrawMeshInstancedIndirect. Шейдер должен поддерживать #pragma instancing_options. Material Property Block передаёт per-instance параметры (phase offset, wind multiplier) без создания отдельных материалов — это даёт до 90% экономии draw calls. Подробнее о технике можно узнать из официальной документации GPU Instancing.
| Рендер-пайплайн | Особенности | Производительность |
|---|---|---|
| URP | Alpha clipping, vertex animation, до 4-х уровней ветра | 0.5–1 ms на сцену |
| HDRP | Subsurface scattering, translucency, PBR листья | 1–2 ms, требует мощное GPU |
Настройка translucency для листьев
Для листьев в URP добавляем Translucency: dot product Light Direction × View Direction, примешиваем к Albedo с тёплым зелёным. Это +0.1 ms, но кардинально меняет качество. В HDRP доступен стандартный subsurface scattering с контролем радиуса и цвета.
Иерархический ветер: три уровня анимации
Это разделение анимации на уровни: ствол, ветви, листья. Каждый уровень использует разные частоты и амплитуды, закодированные в vertex color. WindController управляет глобальными параметрами: сила, направление, порывы. Мы интегрируем его в ваш игровой движок за 1-2 дня.
Процесс разработки
Мы работаем по следующему этапу:
- Анализ рендер-пайплайна и целевых платформ
- Подготовка ассетов: vertex color encoding, LOD, нормалей
- Разработка шейдера в ShaderGraph или HLSL
- Интеграция WindController и тестирование на девайсах
- Оптимизация: профилирование с Profiler и Frame Debugger, настройка LOD, occlusion culling, asset streaming
- Документация по материалам и конфигам
Чек-лист настройки шейдера:
- Подготовить ассеты: закодировать phase offset в vertex color (R-канал для ветвей, G-канал для листьев).
- В ShaderGraph настроить Vertex Position node с Sine и Time.
- Добавить параметры: Wind Strength, Wind Direction, Wind Frequency — в Material Property Block.
- Для листьев включить alpha clipping при значении 0.5.
- Включить GPU Instancing в материале (ставим
Enable GPU Instancing). - Настроить LOD: три уровня (high, medium, low) с соответствующими draw calls.
Что входит в работу
- Документация по материалам и конфигам
- Доступ к исходникам шейдеров (HLSL или ShaderGraph)
- Обучение команды: кик-офф и разбор кейса
- Поддержка в течение 3 месяцев после внедрения
- Интеграция WindController в ваш проект
Наш опыт
Мы реализовали 30+ проектов на Unity и Unreal Engine. Знаем все подводные камни vegetation на мобильных и консолях. Экономия на FPS budget при использовании наших решений достигает 40% по сравнению с готовыми asset-ами, что в среднем даёт $1,500–$3,000 экономии на проект.
Сроки ориентировочно
| Тип задачи | Срок |
|---|---|
| Шейдер травы (URP, mobile, с ветром) | 2–4 дня |
| Шейдер дерева (URP, иерархический ветер, PBR листья) | 4–7 дней |
| Vegetation shader set (трава + кусты + деревья) | 1–2 недели |
| HDRP с subsurface + translucency | 1–2 недели |
Стоимость рассчитывается индивидуально по результатам обсуждения. Получите консультацию — мы оценим объём работ и предложим оптимальное решение. Свяжитесь с нами, чтобы обсудить ваш проект.






