🌊 Мини-гайд: лёгкий процедурный океан-шейдер в URP
Как получить волны без текстур и тяжёлых симуляций.
Вся анимация считается математикой прямо в вершинном шейдере.
Плоскость воды деформируется по высоте. Движение из нескольких синусных волн с разной частотой и фазой:
float t = _Time.y * waveSpeed;
float k = TWO_PI / max(0.001, waveLength);
float wave = sin(pos.x * k + t) + cos(pos.z * (k * 1.17) - t * 1.23) + sin((pos.x + pos.z) * (k * 0.73) + t * 0.81);
wave *= 0.333;
pos.y += wave * waveAmplitude;
✨ Цвет и блик (пиксели)
float ndv = saturate(dot(normalWS, viewDirWS));
float fresnel = pow(1.0 - ndv, fresnelPower);
float ripple = sin(_Time.y + worldPos.x * 0.35 + worldPos.z * 0.28) * surfaceRipple;
half3 color = baseColor + specColor * fresnel + ripple;
🧩 Как использовать в сцене
Создать материал на основе шейдера
Назначить его на обычную плоскость
Отмасштабировать плоскость под размер водной поверхности
Post #49
329