Оптичне фокусування руховим лінзою
Каустики – це яскраві, змінні світлові візерунки, які ви бачите на дні басейну в сонячний день. Вони утворюються через те, що хвиляста поверхня води не є плоским склом — вона постійно змінюється, діючи як лінза. Кожен фрагмент поверхні має локальний нахил, і закон Снеллі регулює відхилення променя світла при переході з повітря (показник заломлення n₁ ≈ 1.0) у воду (n₂ ≈ 1.333): n₁ sin(θ₁) = n₂ sin(θ₂). Фрагмент поверхні, нахилений в один бік, фокусує сусідні промені світла в яскравий смугу; фрагмент, нахилений в інший бік, розсіює промені світла, створюючи тьмяну область. Оскільки поверхня ніколи не є плоскою протягом більше ніж частки секунди, ці яскраві смуги фокусування постійно котяться та мерехтять по підлозі.
// Snell's law at an air-water interface n1 * sin(theta1) = n2 * sin(theta2) n1 = 1.000 (air) n2 = 1.333 (water) theta2 = asin( (n1 / n2) * sin(theta1) ) // bend TOWARD the normal, entering denser medium
Чому конуси концентрують світло, а не розповсюджують його
Площа інтерфейсу відхиляє кожен промінь на однаковий кут скрізь, тому паралельні промені залишаються паралельними та підлога освітлюється рівномірно. Криволіний інтерфейс — а хвиляста поверхня води локально криволінійна всюди — відхиляє сусідні промені на незначно різні кути, оскільки сама норма поверхні змінюється з точки до точки. Де поверхнева кривизна випадково змушує сфокусувати групу сусідніх променів у спільну точку, їхня світлова енергія концентрується в невеликій зоні та ця зона набагато яскравіша за середнє освітлення — цю яскраву концентрацію називають конусом. Де кривизна розсіює промені, підлога відповідно темніша за середню. Загальна світлова енергія зберігається (відхилення не створює фотонів); конуси виникають тоді, коли лінза перерозпорює цю енергію нерівномірно, а не рівномірно розподіляє її.
Моделювання поверхні води як висотної карти
Практична модель в реальному часі моделює поверхню води як висотну карту, зазвичай суму кількох синусів або Gerstner хвиль з різними амплітудами, частотами, швидкостями та напрямками, щоб уникнути очевидно повторюваного шаблону. Нормалі поверхні в кожній точці є градієнтом цієї висотної карти, і саме нормалі — а не висоті — визначають, як світ відбивається там, оскільки закон Снелінга діє на кут між що들어ходить променем та локальною нормальною, а не на рівень.
height(x, z, t) = sum(amplitude_i * sin(freq_i * (x*dir_i.x + z*dir_i.y) + speed_i * t)) normal(x, z, t) = normalize(-dHeight/dx, 1, -dHeight/dz) // gradient gives the tilt // refract each vertical light ray at the surface using normal + Snell's law, // then trace it down to the pool floor and accumulate ray density per floor cell
Поперечне відображення техніка
Ефективна реальна техніка - яка використовується у безлічі GPU водяних шейдерів - не відстежує промені назад від камери або підлоги. Замість цього вона працює вперед: для кожної точки на поверхні води, рефрактуйте гіпотетичний вертикальний промінь сонячного світла вниз через цю точку, використовуючи закон Снелла, проектуйте його до плоскості підлоги та накопичуйте невелику кількість яскравості в пікселі підлоги, на який він приземлився. Де багато точок рефракції з перехресних променів потрапляють у сусідні пікселі підлоги - точно там, де викривлення поверхні концентрує світло - ця область підлоги непропорційно накопичує яскравість, і зароджується патерн каустики безпосередньо з щільності приземлень променів, а не через будь-яльний розрахунок фокусної точки.
Глибина, амплітуда хвилі та масштаб візерунка
Два параметри визначають зовнішній вигляд отриманого малюнку. Глибина води встановлює, наскільки певний кут нахилу поверхні підсилюється, коли промені досягають дна — у неглибокій воді утворюються вузькі, різкі, висококонтрастні каустики, оскільки промені ще не розійшлися перед ударом об дно, тоді як у глибокій воді однакові розсіяні відбиті промені поширюються на ширшій площі дна, створюючи ширші, м'якші, з меншим контрастом візерунки. Амплітуда та частота хвиль встановлюють масштаб і різкість лінзи: невеликі, високочастотні хвилі (хвилі штормового моря) утворюють тонкі, швидко змінювані каустики, тоді як великі, низькочастотні схили створюють широкі, повільно рухаються смуги світла. Обидва ці ефекти пояснюють, чому каустики на басейні виглядають зовсім інакше в спокійний ранок порівняно з вітряним днем, а також чому каустики у глибокому та неглибокому кінцях одного басейну, під одним вітром ніколи не схожі один на одного.
Frequently asked questions
Чому викликаності з'являються лише як яскраві лінії та смуги, а не рівномірно покривають підлогу?
Плоска поверхня відбивала б усі паралельні промені світла одним і тим самим кутом, що забезпечило б рівне освітлення підлоги. Хвиляста поверхня локально викривлена, тому сусідні промені зводяться під трохи різними кутами та концентруються разом у деяких місцях (яскравими викликаностями) і розходяться в інших (темніших областях) — цей малюнок виникає завдяки нерівномірному перерозподілу світла, а не через створення додаткового світла.
Яку роль відіграє закон Снелла у викликастості?
Закон Снелла, n1 sin(theta1) = n2 sin(theta2), визначає, наскільки кожен промінь згинається при переході з повітря у воду, виходячи з кута між променем і нормаллю поверхні води в кожній точці. Оскільки нормаль поверхні змінюється безперервно на хвилястій поверхні, так само змінюється і кут згину, а ця варіація і створює фокусування або розсіювання світла у викликастому малюнку.
Чому викликаності виглядають чіткішими у неглубокій воді, ніж у глибокій?
У неглибокій воді відрегульовані промені ще не пройшли велику відстань до удару об підлогу, тому фокусуючий ефект від кривизни поверхні залишається вузьким і створює чіткі, контрастні волокна. У глибокій воді ті самі відрегульовані промені розходяться на більшій відстані перед досягненням підлоги, розповсюджуючи сфокусоване світло на ширшій площі і створюючи м'якші, менш контрастні малюнки.
Спробуйте наживо
Усе, що вище, працює прямо у вашому браузері — відкрийте Water Caustics і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.
▶ Відкрити симуляцію Water Caustics