Реалістичний 3D-океан, відрендерений шейдерами GLSL: піна, відблиски місяця, ефект Френеля та підповерхневе розсіювання. Передустановки від спокійного моря до шторму. Кидайте каміння — дивіться на кола.
Хвилі Герстнера з декількома частотними компонентами. Рівняння Френеля контролюють баланс відбиття/заломлення. Піна з'являється там, де нахили хвиль перевищують поріг.
Виберіть пресет (спокій, шторм, рябь, цунамі). Клацайте на воду, щоб створити кола. Спостерігайте за відблисками місячного світла, що переміщуються разом з хвилями.
Ефект Френеля означає, що під малим кутом ви бачите більше відбиття, а дивлячись прямо вниз — більше заломлення. Ось чому далека вода виглядає як дзеркало, а близька — прозора.
Ця симуляція в реальному часі рендерить процедурну поверхню моря за допомогою вершинного шейдера GLSL, побудованого навколо моделі хвиль Герстнера. Шість напрямлених хвильових компонентів різної амплітуди та довжини хвилі підсумовуються так, що точки поверхні описують колові орбіти, а не просто гойдаються вгору-вниз, утворюючи гострі гребені та широкі западини. Кожен компонент підпорядковується дисперсійному співвідношенню для глибокої води w = sqrt(g·k), тож довші хвилі рухаються швидше, а фрагментний шейдер за моделлю Блінна-Фонга разом із ефектом Френеля відтворює сонячні відблиски, відбиття неба та піну на гребенях.
Сума шести хвиль Герстнера зміщує плоску сітку: кожна точка рухається не лише вертикально, а й горизонтально (коефіцієнт крутості Q = 0.55), формуючи загострені гребені. Швидкість хвиль підпорядковується дисперсії для глибокої води w = sqrt(9.81·k), де k = 2π/L, а регулятор шторму додає додаткову брижу та збільшує крутість моря. Фрагментний шейдер змішує кольори глибокої та мілкої води за висотою, додає дзеркальні сонячні відблиски, френелівське відбиття неба та білу піну на найкрутіших гребенях.
Тягніть, щоб обертати камеру, і прокручуйте, щоб масштабувати. Повзунки задають амплітуду хвиль, довжину хвилі, напрямок вітру (0–360°), швидкість хвиль, інтенсивність шторму (0–1) та щільність атмосферного туману. Кнопка «Шторм» миттєво підвищує амплітуду, швидкість і штормову брижу для бурхливого моря, тоді як кнопка «Спокій» розгладжує поверхню майже до дзеркальної. Невеликий вітрильник гойдається на хвилях як орієнтир масштабу.
Хвилі Герстнера, описані Францом Йозефом Герстнером у 1802 році, були одним із перших точних розв'язків для періодичних хвиль на воді. Їхня особливість — рух частинок по колах — і є причиною того, чому реальні гребені хвиль виглядають гострими, а западини плоскими; ту саму модель широко використовують для рендерингу океану в іграх та кіно.
Хвиля Герстнера — це математична модель хвилі на воді, у якій кожна частинка поверхні рухається по колу, а не лише вгору-вниз. Цей горизонтальний рух збирає воду до гребенів, роблячи їх гострими та загостреними, тоді як западини лишаються широкими й плоскими, що набагато ближче до реального морського хвилювання, ніж проста синусоїда.
Вона підсумовує шість компонентів Герстнера у вершинному шейдері, кожен зі своїм напрямком, амплітудою та довжиною хвилі, усі керовані повзунком напрямку вітру. Оскільки ці хвилі інтерферують, поверхня набуває нерегулярного, постійно мінливого вигляду справжнього моря. Фрагментний шейдер потім додає колір залежно від глибини, дзеркальні сонячні відблиски, френелівське відбиття неба та піну на найкрутіших гребенях.
Амплітуда задає висоту хвиль, а довжина хвилі — їхній інтервал. Напрямок вітру (0–360°) повертає переважний напрямок руху, швидкість масштабує те, як швидко рухаються хвилі, а шторм (0–1) додає хаотичну брижу, затемнюючи небо та воду. Туман регулює атмосферну імлу. Кнопки «Шторм» і «Спокій» одразу переходять до заздалегідь заданих бурхливих або дзеркальних умов.
Рух фізично обґрунтований: кожен компонент використовує дисперсійне співвідношення для глибокої води w = sqrt(g·k) з g = 9.81 м/с², тож довші хвилі правильно рухаються швидше за короткі. Це візуальне наближення, а не повноцінний розв'язувач рідини, оскільки використовується фіксований набір із шести хвиль та стилізовані піна й освітлення, але основна форма хвилі та дисперсійна поведінка відповідають теорії.
Хвилю Герстнера можна зробити настільки крутою, що орбіти частинок на гребені починають випереджати саму хвилю, і тоді поверхня згортається, а модель перестає бути однозначною. У природі це саме той момент, коли хвилі розбиваються на баранці, зазвичай щойно кут гребеня наближається приблизно до 120 градусів, тому ця симуляція й малює піну на своїх найгостріших, найшвидших гребенях.