В одному з мобільних проєктів ми зіткнулися з 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
- Документація по матеріалах і конфігах
Чек-лист налаштування шейдера:
- Підготувати асети: закодувати 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.
Деталі реалізації
У шейдері використовується техніка 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.






