Вода в іграх часто виглядає як холодець — надто рівна, без піни та реалістичного хвилювання. Звичайний шейдер з parallax mapping не дає потрібної глибини. Ми розробляємо шейдери води та рідин, де кожен параметр заточений під платформу: від мобільних до PC і консолей. Реалістична вода вимагає синхронізації кількох систем: поверхневий шейдер з fresnel, нормал-мап анімація, foam маска, vertex displacement для хвиль та правильно налаштований underwater ефект. Кожна частина впливає на продуктивність, і баланс між якістю та frame budget — основне інженерне завдання. Наш досвід: 30+ проєктів з водними ефектами, гарантуємо стабільний FPS на цільових пристроях. Інвестиції в кастомний шейдер окупаються за рахунок оптимізації та унікального зовнішнього вигляду. Отримайте консультацію інженера з 7-річним досвідом — зв'яжіться з нами.
Які параметри шейдера води впливають на продуктивність?
Ключові фактори: кількість draw calls (batching), роздільна здатність текстур (нормал-мапи, піна), використання Opaque Texture для рефракції, кількість хвильових компонентів у вершинному дисплейсменті. Для мобільних платформ критично: два scrolling normal map (256×256, ASTC 6x6), Fresnel на NDotL апроксимації, foam через Depth Texture (без Opaque Texture), один Sine для хвиль — такий шейдер вкладається в 0.3ms на Galaxy A53.
Як створити кастомний шейдер води для URP?
- Вибір типу графа: для мобільних — Unlit з fake lighting через нормальну карту, що економить vertex shader invocations. Для PC/console — Lit з PBR-параметрами.
- Scrolling normal maps: два texture sample з різними UV tiling та напрямками scroll (Time + UV offset). Overlay або Blend Normal для об'єднання. Різні швидкості scroll виключають повторення патерну через ~5 секунд.
- Fresnel ефект: нода Fresnel Effect + Lerp між двома кольорами води (глибокий та мілкий). Exponent 2–5 для м'якого переходу. Для URP використовуємо NDotL через Normal та View Direction — точніше вбудованого Fresnel.
- Depth Fade для піни: Scene Depth мінус Fragment Position дає відносну глибину. Smoothstep = маска foam біля берега. Вимагає Opaque Texture (додатковий blit pass) — для мобільних альтернатива: Depth Texture.
- Vertex Displacement для хвиль: Sine нода по UV + Time з різними частотами/амплітудами для 2–3 хвиль. Підсумовуємо з різними Direction — Gerstner wave approximation. Displacement 0.1–0.5 одиниці, інакше z-fighting з об'єктами.
Чому custom шейдер кращий за готовий для стилізованої графіки?
В HDRP починаючи з останньої стабільної версії Unity є Water System — готовий high-quality компонент з tessellation, caustics, underwater. Але він не підходить для стилізованої (cartoon, cel-shading) графіки: vertex-animated foam не підтримується, Shader Graph customization обмежений Water surface нодами. Кастомний шейдер в ShaderGraph дає повний контроль — від кольору до форми хвиль.
| Параметр | URP кастомний | HDRP Water System |
|---|---|---|
| Продуктивність | 0.3–1.0 ms (mobile) | 1.5–3.0 ms (desktop) |
| Кастомізація | Повна через ShaderGraph | Обмежена |
| Підводний ефект | Вимагає Custom Renderer Feature | Вбудований |
Що входить у розробку шейдера води?
- Вихідний шейдер в ShaderGraph/Amplify/HLSL з коментарями
- Налаштування для цільових платформ (мобільні, PC, консолі)
- Документація за параметрами (Fresnel Exponent, швидкість хвиль, кольорова гама)
- Навчання вашої команди (1-2 години онлайн)
- Підтримка протягом 30 днів після деплою
Кейс: вода для мобільної гри (з нашої практики)
Мобільна 3D-стратегія на Unity LTS (URP Mobile). Вимога: море на фоні, 60fps на mid-range Android. Обмеження: не більше 0.5ms на water shader. Підсумковий шейдер: два scrolling normal maps (256×256, ASTC), Fresnel на NDotL, foam через Depth Texture, один Sine для хвиль. Ніякого reflection — тільки cube map на Specular. Frame cost: 0.3ms на Galaxy A53. Результат — стабільний 60fps без просідань. Unity Documentation: Optimizing Shaders for Mobile
Строки та вартість
| Тип шейдера | Строк |
|---|---|
| Базовий (mobile, URP, без displacement) | 2–4 дні |
| Середній (PC/console, URP Lit, foam і fresnel) | 4–8 днів |
| Високоякісний (HDRP або кастомний з tessellation) | 1–2 тижні |
| Підводний ефект + рефракція | 3–5 днів додатково |
Вартість розраховується індивідуально після аналізу вашої сцени та платформи. Замовте розробку шейдера води для вашої гри — отримайте консультацію інженера з 7-річним досвідом у геймдеві.
Технічні нюанси для advanced
- Для рефракції на мобільних: fake refraction через нормальну карту з UV offset на backdrop plane — без grab pass, що економить 0.5ms.
- Vertex displacement: використання Gerstner waves у вершинному шейдері (сума 2–3 синусів) дає реалістичне хвилювання без фізики. Для LOD об'єктів — спрощений варіант з однією хвилею.
- Піна: маска depth fade — один з найдешевших способів, але при сильному хвилюванні додаємо noise texture для розриву піни.






