Разработка шейдеров воды и жидкостей для графики

Наша компания по разработке видеоигр ведет независимые проекты, совместно с клиентом создает игры и оказывает дополнительные операционные услуги. Опыт нашей команды позволяет нам охватить все игровые платформы и разработать потрясающий продукт, соответствующий видению клиента и предпочтениям игроков.

От иммерсивных приложений до игровых миров и 3D-сцен

Наша выделенная команда для VR/AR/MR-разработки, Unity-продакшна и 3D-моделирования и анимации с собственными кейсами и презентациями.

Посетить персонализированный сайт
Показано 1 из 1Все 242 услуг
Разработка шейдеров воды и жидкостей для графики
Сложный
от 3 дней до 2 недель
Часто задаваемые вопросы

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

Какие этапы разработки игры?

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

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

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

  1. Выбор типа графа: для мобильных — Unlit с fake lighting через нормальную карту, что экономит vertex shader invocations. Для PC/console — Lit с PBR-параметрами.
  2. Scrolling normal maps: два texture sample с разными UV tiling и направлениями scroll (Time + UV offset). Overlay или Blend Normal для объединения. Разные скорости scroll исключают повторение паттерна через ~5 секунд.
  3. Fresnel эффект: нода Fresnel Effect + Lerp между двумя цветами воды (глубокий и мелкий). Exponent 2–5 для мягкого перехода. Для URP используем NDotL через Normal и View Direction — точнее встроенного Fresnel.
  4. Depth Fade для пены: Scene Depth минус Fragment Position даёт относительную глубину. Smoothstep = маска foam у берега. Требует Opaque Texture (дополнительный blit pass) — для мобильных альтернатива: Depth Texture.
  5. 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 для разрыва пены.

Как отличить рабочий шейдер от провального?

Программист добавляет в сцену воду — получает синий прямоугольник. Asset Store выдаёт устаревший ассет с артефактами на мобиле. Разработка шейдеров — это не просто натягивание текстуры, а сложная инженерная задача: нужно понимать depth buffer, семплировать нормали в несколько слоёв, организовывать foam на пересечении с геометрией. Без этого шейдер либо не работает, либо убивает FPS. Мы занимаемся профессиональной разработкой шейдеров и VFX более пяти лет — за это время прошли десятки проектов от инди до AAA. Однажды заказчик принёс сцену с водой из Asset Store: на мобильном устройстве она выдавала 12 FPS из-за отсутствия LOD и неправильного бэтчинга. Переписали шейдер под URP — получили 60 FPS с сохранением визуала. Подробнее о шейдерах

URP vs HDRP: что выбрать для вашего проекта?

Выбор Render Pipeline фиксируется на старте — шейдеры под HDRP не работают в URP и наоборот. Оцените компромиссы по таблице:

Параметр URP HDRP
Целевые платформы Mobile, PC, консоли PC, консоли (High-end)
Производительность Низкий overhead, до 40% быстрее на мобайле Высокая нагрузка, фотореализм
Screen Space Reflections Ограниченно (с версии 14) Полноценно с настройками
Volumetric Fog Через кастом Встроенная система
Water System Отсутствует Встроенная
ShaderGraph ноды Базовый набор Расширенный (Diffusion Profile, Eye)

Вывод: URP даёт до +40% FPS на мобильных устройствах по сравнению с HDRP. Для мобильной RPG выбрали URP — на iPhone 8 получили стабильные 60 FPS без потери качества. HDRP оправдан на PC/консолях, где нужен фотореализм и встроенная Water System.

Разработка шейдеров в ShaderGraph: от воды до растительности

ShaderGraph — нодовый редактор без HLSL, но понимание «под капотом» обязательно. Разберём водный шейдер — он включает несколько техник.

Нормали с движением. Два слоя normal map, семплированных с разными скоростями и направлениями:

Time → Multiply (speed1) → Add → Sample Texture 2D (normalMap)
Time → Multiply (speed2) → Add → Sample Texture 2D (normalMap)
→ Normal Blend → Normal (фрагментный шейдер)

Два разнонаправленных слоя создают эффект бегущих волн без тайловой периодичности. Потребление — 2 texture samples, что вписывается в бюджет 40 draw calls для водной поверхности.

Глубина и foam. Через нод Scene Depth (в URP/HDRP opaque texture должна быть включена) получаем разницу между глубиной сцены и позицией фрагмента воды. Малая глубина (пересечение с берегом) → foam через Step/Smoothstep. Большая глубина → более насыщенный синий, выше непрозрачность. Foam добавляет 1-2 ms на GPU, но даёт реалистичную береговую линию.

Рефракция. Scene Color + смещение UV по normal map — дно «плывёт». Вода рендерится в Transparent очереди, после всей непрозрачной геометрии. Обязательно включать Opaque Texture в настройках URP, иначе рефракция не работает.

Fresnel и отражения. Fresnel Effect нод — вблизи нормали к камере поверхность прозрачнее, под острым углом отражает. Физически корректно для диэлектриков. Поверх Fresnel-маски добавляется кубмап или Reflection Probe. На мобильных платформах Reflection Probe заменяем на кубмап низкого разрешения (128x128) — экономия 1-2 ms.

Шейдер растительности. Анимация кустов и травы без физической симуляции — через вертексный шейдер. В ShaderGraph: берём XZ-координаты вершины как фазовый сдвиг, Time → Sine с разной фазой, умножаем на Vertex Color канал R (белый = качается, чёрный = закреплён к земле). Результат: трава качается волнами, основание фиксировано. Для «ветра при беге игрока» — добавляем CPU-параметр _PlayerPosition. Такой шейдер обрабатывает 100 000 вершин за 0.3 ms на iPhone 11.

Детали оптимизации водного шейдера

Исходный ассет использовал 4 слоя normal map и dynamic cubemap reflections — на мобильном устройстве это давало 12 FPS. После переписывания под URP с двумя слоями, упрощённым foam и baked reflections получили 60 FPS. Экономия времени разработки: 1 день вместо 3 дней на адаптацию ассета.

VFX Graph: как управлять миллионами частиц на GPU

VFX Graph исполняется полностью на GPU через Compute Shaders. В отличие от Particle System (Shuriken), которая работает на CPU, здесь можно управлять миллионами частиц без нагрузки на CPU. Пример: взрыв с шрапнелью (200 частиц) на GPU занимает 0.05 ms, тогда как CPU Particle System той же сложности — 0.8 ms.

Граф делится на контексты: Spawn (burst, constant rate, event trigger), Initialize (начальные атрибуты), Update (гравитация, турбулентность, коллизии), Output (Quad, Mesh, Lit/Unlit, Distortion).

Пример: взрыв с шрапнелью

Spawn: Single Burst (count: 200)
  ↓
Initialize:
  Position: Sphere Volume (radius: 0.1)
  Velocity: Spherical * Random(5, 15)
  Size: Random(0.05, 0.3)
  Lifetime: Random(0.5, 2.0)
  Color: Gradient по lifetime (белый → оранжевый → серый)
  ↓
Update:
  Gravity (force: -9.8)
  Drag (coefficient: 0.2)
  Turbulence (intensity: 2.0)
  Collision (SDF сцены или Depth Buffer)
  ↓
Output Quad (Unlit):
  Texture: искра
  Blend Mode: Additive

Turbulence использует Noise Field — трёхмерный шум, частицы отклоняются органично. Flipbook анимации в Output контексте — анимация спрайта для каждой частицы. Для мобильных платформ снижаем количество частиц до 50 и отключаем Collision — экономия 3 ms.

Почему пост-обработка требует настройки под платформу?

Post-processing — эффекты на финальном изображении после основного рендера. В Unity через Volume систему (Local/Global Volume). Типичный стек для action-проекта:

Эффект Назначение Особенности
Bloom Свечение ярких источников Threshold 0.8, intensity 0.5 — экономия 1 ms
Tonemapping ACES filmic для реализма, Neutral для стилизации Стандарт для realistic проектов
Color Adjustments Контраст +10%, насыщенность +5% Коррекция под настроение
Vignette Затемнение краёв Intensity 0.3 — фокус на центре
Motion Blur Размытие по вектору движения На мобайле отключаем — -2 ms GPU
Depth of Field Боке В VR осторожно — ломает восприятие глубины
Screen Space Ambient Occlusion SSAO / HBAO Затемнение в углах геометрии, +1.5 ms

Для мобильных платформ мы отключаем Motion Blur и SSAO, снижаем Bloom до 2-3 passes — итоговый бюджет пост-обработки 3-4 ms. На PC/HDRP стек может занимать 8-10 ms, но это компенсируется мощностью GPU.

Что входит в работу: от шейдера до поддержки

  • Разработка кастомных шейдеров в ShaderGraph (URP / HDRP): вода, растительность, персонажные эффекты, голограммы, dissolve.
  • VFX Graph эффекты: взрывы, огонь, дым, магия, окружение. Максимальная производительность — до 2 млн частиц на GPU при 60 FPS.
  • Настройка и оптимизация Particle System (Shuriken) для мобильных платформ: замена на GPU-инстансы снижает draw calls на 70%.
  • Построение Post-Processing стека под визуальный стиль проекта с замером времени рендера.
  • Портирование шейдеров между URP и HDRP при смене пайплайна: среднее время 0.5-1 день на шейдер.
  • Оптимизация VFX для целевой платформы: GPU instancing, LOD частиц, culling.

Deliverables: исходники шейдеров и VFX графов, документация по настройке, обучение команды (1 час консультации), поддержка в течение месяца после сдачи. Оценим проект за 1 рабочий день — свяжитесь с нами. Получите консультацию по вашему проекту — мы подберём оптимальное решение и назовём сроки.

Наш опыт и гарантии

Более 5 лет в геймдеве, 50+ проектов (мобильные, PC, консоли). Гарантируем, что шейдер будет работать на целевой платформе с заявленным FPS — если нет, дорабатываем бесплатно. Пример: для одной инди-студии переписали все шейдеры под URP — FPS на iPhone 8 вырос с 25 до 60, а бюджет времени на рендер сократился на 40%. Используем последние стабильные версии Unity (LTS) и Unreal Engine 5, работаем с Vulkan, Metal, DirectX 12.

Сравнение: готовый ассет из Asset Store часто требует доработки (совместимость, производительность) — кастомная разработка шейдеров обходится в 2-3 раза быстрее по времени, чем адаптация чужого кода. А шейдер, написанный с нуля под ваши задачи, даёт 100% контроль над производительностью и визуалом. Экономия бюджета на одном проекте достигает 30% за счёт отсутствия лишнего кода.

Этапы работы

  1. Анализ: изучаем сцену, целевые платформы, требования к FPS. Фиксируем визуальные референсы.
  2. Прототипирование: создаём шейдер/VFX граф, тестируем на референсном устройстве.
  3. Интеграция: встраиваем в проект, настраиваем параметры, оптимизируем draw calls и batching.
  4. QA: проверяем на всех целевых платформах (Android, iOS, PC, консоли), исправляем артефакты.
  5. Деплой и передача: отдаём исходники, документацию, проводим обучение. Поддержка — 1 месяц.

Сроки: от 2 до 10 рабочих дней в зависимости от сложности. Стоимость рассчитывается индивидуально — пишите, оценим ваш проект. Закажите разработку шейдеров — получите готовый результат с гарантией производительности.