Вода в играх часто выглядит как студень — слишком ровная, без пены и реалистичного волнения. Обычный шейдер с 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 для разрыва пены.






