Разработка шейдеров растительности и ветра для графики в играх

В одном из мобильных проектов мы столкнулись с 5000 кустов на сцене, которые давали 200 draw calls. После внедрения GPU Instancing и иерархического ветра число draw calls снизилось до 10, а FPS вырос с 25 до 60. Средняя экономия FPS budget — до 40% по сравнению с готовыми ассетами, что на реальном п

Наши компетенции

Другие услуги студии

VR/AR/MR приложения на заказ

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

Разработка игр на Unity

От идеи до релиза — игры, которые запоминаются

3D-моделирование и анимация

Оживим ваш продукт в объёмной графике и анимации

VR-тренажёры промышленного оборудования

Тренируем операторов на технике без риска и простоя

AR-инструкции для производства

Пошаговые подсказки прямо на оборудовании — без бумаги

Safety-тренажёры

Отработка ЧС и техники безопасности без выхода на объект

VR/AR-тренинги

Обучаем персонал сервису, адаптации и soft skills в VR

Обучающие викторины

Проверка знаний в формате игры — легко и без стресса

Корпоративные видеоинструкции

Понятные ролики для обучения сотрудников и клиентов

Геймификация бизнес-процессов

Мотивируем команду через игровые механики в KPI и HR

Приложения для инфокиосков

Интерактивные экраны для магазинов, стендов и офисов

VR/AR-инсталляции

Wow-эффект для брендов на выставках, ивентах и в шоу-румах

Виртуальные выставки и музеи

Ваша экспозиция доступна из любой точки мира — 24/7

Event-квесты и брендированные игры

Запоминающиеся игры для конференций и клиентских ивентов

Часто задаваемые вопросы

Последние работы

  • image_games_mortal_motors_495_0.webp
    Разработка игры для компании Mortal Motors
    1526
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Пошаговая стратегия в фэнтези сеттинге With Fire And Sword
    1030
  • image_games_second_team_604_0.webp
    Разработка игры для компании Second term
    657
  • image_games_phoenix_ii_606_0.webp
    3D-анимация — тизер для игры phoenix 2.
    738
  • image_training-quizzes_kids_shopping_quiz_614_0.webp
    Обучающая викторина для детей «Покупки в магазине»
    142

В одном из мобильных проектов мы столкнулись с 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
  • Документация по материалам и конфигам

Чек-лист настройки шейдера:

  1. Подготовить ассеты: закодировать phase offset в vertex color (R-канал для ветвей, G-канал для листьев).
  2. В ShaderGraph настроить Vertex Position node с Sine и Time.
  3. Добавить параметры: Wind Strength, Wind Direction, Wind Frequency — в Material Property Block.
  4. Для листьев включить alpha clipping при значении 0.5.
  5. Включить GPU Instancing в материале (ставим Enable GPU Instancing).
  6. Настроить 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 недели

Стоимость рассчитывается индивидуально по результатам обсуждения. Получите консультацию — мы оценим объём работ и предложим оптимальное решение. Свяжитесь с нами, чтобы обсудить ваш проект.