Подання жирної / забрудненої води?


19

Будь-які майстри шейдерів там мають уявлення про те, як досягти ефекту жирної / забрудненої води, подібного до цього:

жирна вода

В ідеалі вода не була б рівномірно жирною, але натомість нафта могла б утворюватися з якогось джерела (наприклад, забруднюючий стік з хімічної установки), а потім дифундувати по всьому водойму. Моєю думкою для цієї частини було б зберегти «масляну карту» як двовимірну текстуру, яка визначає густину нафти у кожній точці поверхні води. Він би дифундував і рухався природним шляхом за допомогою водяної води; у цій точці (у мене є моделювання хвильових часток для динамічних хвиль, і я вже роблю щось подібне для піни на поверхні води). Однак я не впевнений, наскільки це фізично правильно, оскільки нафта може рухатися не з тією ж швидкістю, що і вода.

І я поняття не маю, як зробити всі ці примхливі кольори :-). Думки?


Використовувати текстуру ..? Хроматичний радіальний градієнт, застосуйте деякі спотворення ..
bobobobo

@bobobobo - напрямок, на який ви дивитесь, впливає, які кольори відображаються, хоча ... youtube.com/watch?v=NRtUoMG16ZU
Роберт Фрейзер

1
Ви хочете застосувати шейдер на основі en.wikipedia.org/wiki/Thin-film_interference, але я не маю уявлення, як піти на те, щоб написати його.
jzx

2
( gamedev.net/page/resources/_/technical/… ) Я не можу перекрити відповідь, бо не знаю теми
horatio

Відповіді:


25

Фізичною основою кольорів масляного пляма є райдужність , а також пов'язана з кільцями Ньютона . Зокрема, товщина масляного шару знаходиться на порядку довжини хвилі світла. Оскільки світло відбивається як від верхньої, так і від нижньої поверхні масла, при будь-якій заданій довжині хвилі, під деякими кутами два відбиття будуть поза фазою і скасовуватимуть один одного; під іншими кутами відбиття будуть у фазі і складаються разом. Це відбувається під різними кутами для кожної довжини хвилі, тому освітлення олії білим світлом видає всі ці кольори. Якщо ви освітлювали його однією частотою (наприклад, лазерним світлом), ви б бачили лише ряд світлих і темних кілець.

Якщо ви ігноруєте заломлення в масляному шарі, просто опрацьовуючи геометрію ситуації, ви можете виявити, що яскравість відбитого світла для будь-якої заданої довжини хвилі повинна змінюватися як

sin(2.0 * pi * oilThickness / (dot(L, H) * wavelength)) * 0.5 + 0.5

Теоретично це має бути інтегровано на всіх довжинах хвиль, але на практиці ви, ймовірно, можете просто зробити це для червоного, зеленого та синього - скажімо, 700, 550 та 400 нм відповідно. Зміна товщини масла змінить видимий радіус кольорів кілець. Я б, мабуть, 2.0 * pi * oilThickness / wavelengthперетворив на єдине значення RGB, що надається шейдеру, як рівномірне значення. Ви можете помножити її на текстуру, щоб імітувати різну товщину масла, якщо бажано - саме це, мабуть, дає більшість цікавої текстури на зображенні вище.

Це дає значення кольору RGB, яке ви можете помножити на свій BRDF. dot(L, H)Фактор буде використовуватися для точкового / спрямованого світла, і ви можете замінити dot(N, V)там для застосування цього до відбиття карти навколишнього середовища , а також.

Відмова: Я не пробував цього в шейдері, просто намалював кілька діаграм і переконав себе, що це "повинно працювати" ... так що дайте мені знати результати, якщо ви все-таки спробуйте! :)


Класні речі. Причина, по якій виникають відбиття на верхній і нижній масляних поверхнях, полягає в тому, що деякі хвилі відбиваються на верхній частині, а інші просто заломлюються. Ці заломлені хвилі просуваються до поверхні ботона, де вони можуть заломлюватися знову або відбиватися.
dsilva.vinicius
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.