Każdy kreator cieniujący ma pomysł, jak uzyskać efekt tłustej / zanieczyszczonej wody, podobny do tego:
Idealnie woda nie byłaby jednolicie oleista, ale zamiast tego olej mógłby być wytwarzany z jakiegoś źródła (takiego jak zanieczyszczający odpływ z zakładu chemicznego), a następnie rozpraszany w jednolitej części wód. Moim pomysłem w tej części byłoby utrzymanie „mapy olejowej” jako tekstury 2D, która określa gęstość oleju w każdym punkcie na powierzchni wody. Rozproszyłby się i poruszałby naturalnie z prędkością wody; w tym momencie (mam symulację cząstek i fal dla fal dynamicznych i już robię coś podobnego do piany na powierzchni wody). Nie jestem jednak pewien, czy byłby to fizycznie poprawny, ponieważ olej może nie poruszać się z taką samą prędkością jak woda.
I nie mam pojęcia, jak zrobić te wszystkie trippy kolory :-). Myśli?
Odpowiedzi:
Podstawą fizyczną kolorów plamy oleju jest opalizowanie , a także związane z pierścieniami Newtona . W szczególności grubość warstwy olejowej jest rzędu długości fali światła. Ponieważ światło odbija się zarówno od górnej, jak i dolnej powierzchni oleju, na dowolnej długości fali, pod niektórymi kątami oba odbicia będą poza fazą i wzajemnie się znoszą; pod innymi kątami odbicia będą w fazie i będą się sumować. Dzieje się tak pod różnymi kątami dla każdej długości fali, więc rozświetlenie oleju białym światłem daje wszystkie te kolory. Jeśli podświetlisz go jedną częstotliwością (np. Światło lasera), zobaczysz tylko serię jasnych i ciemnych pierścieni.
Jeśli zignorujesz załamanie w warstwie olejowej, po prostu opracowując geometrię sytuacji, możesz stwierdzić, że jasność odbitego światła dla dowolnej długości fali powinna się różnić jak
Teoretycznie powinno to być zintegrowane na wszystkich długościach fal, ale w praktyce prawdopodobnie można to po prostu zrobić dla czerwieni, zieleni i niebieskiego - powiedzmy odpowiednio 700, 550 i 400 nm. Zmiana grubości oleju zmieni promień pozorny pierścieni koloru. Prawdopodobnie owinąłbym
2.0 * pi * oilThickness / wavelength
pojedynczą wartość RGB dostarczoną do modułu cieniującego jako jednolitą wartość. W razie potrzeby można go pomnożyć przez teksturę, aby zasymulować zmienną grubość oleju - prawdopodobnie to daje większość interesującej tekstury na powyższym obrazku.Daje to wartość koloru RGB, którą można pomnożyć do formatu BRDF.
dot(L, H)
Czynnikiem będą wykorzystywane do punktowych / kierunkowe światła, można zastąpićdot(N, V)
tam stosowania tego jak dobrze do refleksji środowisko mapy.Oświadczenie: Nie wypróbowałem tego w module cieniującym, po prostu narysowałem kilka schematów i przekonałem się, że „powinno działać” ... więc daj mi znać, jeśli spróbujesz! :)
źródło