Problem z czystą szumem jako polu przepływu
Perlin noise i jego odmiany (Simplex, Worley) są standardowym narzędziem do dodawania organicznie wyglądacej losowości do grafiki komputerowej, a jest podziwiajace zamiast prosić o próbkowanie funkcji szumu 3D bezpośrednio i traktować jej gradient jako prędkość cząsteczek. Wynik wygląda na szumowy w odpowiedni sposób dla tekstury, ale jako pole przepływu nie działa dobrze: pola oparte na gradientach mają niemal wszędzie niezerową divergencję, co oznacza, że niektóre obszary przestrzeni działają jak niewidzialne zjeżdżalnie, które suka cząsteczki w głąb, a inne działają jako niewidzialne źródła, które je wypuszczają. Obserwuj to przez kilka sekund i zobacz, jak cząsteczki widocznie skupiają się w grupy lub wycofują całe obszary ekranu.
Rozwiązanie to jedno identyczności wektorowej
Kalkulus wektorowy oferuje wyjście, które nie wymaga żadnego rozwiązań pola płynu: dla dowolnej gładkiej pole wektorowego Ψ, rotacja tego pola, ∇×Ψ, jest zawsze optymalizowana do zerowej divergencji. To identyczność, ∇·(∇×Ψ) = 0, prawdziwa dla każdego możliwego Ψ — więc jeśli budujesz pole prędkości poprzez obliczenie rotacji pewnego pola potencjałowego, inkompressybilność jest automatycznym wynikiem, a nie czym należy rozwiązać.
Psi(x,y,z) = ( noise1(x,y,z), noise2(x,y,z), noise3(x,y,z) ) // trzy niezależne pola szumu v = rot(Psi) = ( ∂Ψ_z/∂y - ∂Ψ_y/∂z, ∂Ψ_x/∂z - ∂Ψ_z/∂x, ∂Ψ_y/∂x - ∂Ψ_x/∂y ) // przybliżamy każdą pochodną cząstkową metodą różnic centrów: ∂Ψ_z/∂y ≈ ( Ψ_z(x, y+e, z) - Ψ_z(x, y-e, z) ) / (2*e) Zastosuj trzy niezależne pola szumu, jedno dla każdego komponentu potencjału Ψ, i oblicz rotację numerycznie za pomocą różnic centrów (standardowa technika, popularizowana w pracy Roberta Bridson'a z 2007 roku SIGGRAPH na temat szumu rotacji do proceduralnego przepływu płynu). Wynik jest prawdziwym polem prędkości inkompressybilnym, próbkowanym w dowolnej punkcie przestrzeni 3D — znacznie tańsze niż rozwiązywanie równania Poissona ciśnienia wymagane przez rzeczywiste rozwiązanie Navier-Stokesa.
Psi(x,y,z) = ( noise1(x,y,z), noise2(x,y,z), noise3(x,y,z) ) // 3 independent noise fields
v = curl(Psi) = ( dPsi_z/dy - dPsi_y/dz,
dPsi_x/dz - dPsi_z/dx,
dPsi_y/dx - dPsi_x/dy )
// approximate each partial derivative with a central difference:
dPsi_z/dy ≈ ( Psi_z(x, y+e, z) - Psi_z(x, y-e, z) ) / (2*e)
Dlaczego wygląda na turbulencję
Perlinowe szumy rozprowadzają swoją energię równomiernie po szerokim zakresie częstotliwości przestrzennych, zamiast skupiać ją na jednym skalowaniu. Aby takie same właściwości dziedziczył jego rotatork (curl), otrzymujemy eddy wielu rozmiarów włożone jeden w drugi, co widocznie przypomina spadkowe wiry rzeczywistej turbulencji, nawet jeśli nic tu nie obywa się z równaniami Naviera-Stokesa. Laminowanie wielu oktaw szumów o różnych częstotliwościach (brownowiejska ruchoma frakcja) przed wyznaczeniem rotatoryka przyczynia się do podobieństw, dodając detale klepiące na topie dużych wolno się poruszających eddy — to samo technikę stosuje się do sprawdzenia Perlinowych szumów, by wyglądały one jak naturalne tereny czy chmury.
Gdzie to naprawdę jest używane
Curl noise jest fundamentem w produkcji efektów wizualnych: dym, ogień, śladów magii i opakowy płyn w filmach i grach często są sterowane przez curl noise zamiast pełnego symulacji płynu, ponieważ można ocenić je na dowolnym punkcie w dowolnym momencie — bez siatki, bez historii symulacji, prosto równoległe na milionach cząstek — a dodatkowo można je nakładać na koarsywną rzeczywistą symulację, aby dodać drobne szczegółowe detale po niskim rozdzielczości. Wymiarem to jest brak pamięci o przeszkodach, granicach czy zachowaniu chwilowej prędkości; to kinematyczna przybliżona symulacja ruchu, a nie fizyczna, i jest wybrana szczególnie dlatego, że „wygląd z niezmienniczności” często wystarcza dla danego obrazka.
Często zadawane pytania
Dlaczego nie można użyć prostej Perlinowej lub simplexowej szumu jako pola prędkości?
Bo pole szumu prostego ma niemal wszędzie niezerową divergencję, co oznacza, że cząsteczki się zgrupowują w niektórych regionach i są wywietrzczone z innych. Curl szumu naprawia to poprzez konstrukcję: curl dowolnego pola wektorowego jest zawsze bezdivergencjowe, więc cząsteczki ani nie zgrupują się w sinkach, ani nie zostaną wywietrzczone z źródeł.
Co krytycznie daje obliczanie curla?
Obecne, niestabilne ruchy bez widocznych atraktorów ani repelatorów — dym, ogień i przepływowe strumienie cieczy, gdzie gęstość cząsteczek pozostaje prawie stała w czasie zamiast konsolidować się w bryłki, co jest charakterystycznym znakiem naiwnego pola prędkości opartego na gradientach.
Czy curl szumu to rzeczywista symulacja cieczy?
Nie — nie ma on ani jednej z maszyn adwersji czy presji projektowanych w rzeczywistym rozwiązań Navier-Stokes, a także całkowicie ignoruje granice i przeszkody. Jest to ekonomiczna przybliżona kinematyczna symulacja, która wygląda na cieczą, ponieważ dzielą się ona jednym kluczowym celem z rzeczywistym niestabilnym przepływem: zerową divergencją.
Wypróbuj na żywo
Wszystko powyżej działa bezpośrednio w Twojej przeglądarce — otwórz Three Dimensional Curl Noise Flow Field i zmieniaj parametry podczas działania. Nic nie jest instalowane ani przesyłane na serwer, cały model działa w jednej karcie.
▶ Otwórz symulację Three Dimensional Curl Noise Flow Field