Оптимізація графіки: шейдери рослинності та вітру для ігор

В одному з мобільних проєктів ми зіткнулися з 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 рази за продуктивністю — у 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, baking ambient occlusion
  • Документація по матеріалах і конфігах

Чек-лист налаштування шейдера:

  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.
Деталі реалізації У шейдері використовується техніка batching для однакових мешів, а також застосовується occlusion culling на стороні GPU. Для вертексної анімації застосовуються різні хвильові функції (sine, cosine) з випадковими фазами для уникнення синхронізації.

Що входить в роботу

  • Документація по матеріалах і конфігах
  • Доступ до вихідних кодів шейдерів (HLSL або ShaderGraph)
  • Навчання команди: кік-офф та розбір кейсу
  • Підтримка протягом 3 місяців після впровадження
  • Інтеграція WindController в ваш проєкт

Наш досвід

Ми на ринку геймдеву вже 5+ років і реалізували 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 тижні

Вартість розраховується індивідуально за результатами обговорення. Отримайте консультацію — ми оцінимо обсяг робіт і запропонуємо оптимальне рішення. Зв'яжіться з нами, щоб обговорити ваш проєкт.

Середня економія на проєкт складає до $5,000.