Strona główna Sztuka Generatywna Pole przepływu z szumem curl 3D

🌀 Pole przepływu z szumem curl 3D

Tysiące cząstek podąża za trójwymiarowym polem prędkości z szumem curl renderowanym na canvasie. Szum curl (∇×F) jest bezźródłowy, więc daje gładkie, turbulentne przepływy bez zlewów.

Sztuka Generatywna3DŚredni60 FPS
noise-flow-3d ↗ Otwórz osobno
Interfejs samej symulacji jest w języku angielskim.

Podobne symulacje

Jak to działa

Curl noise (szum zawirowań) wyprowadza się, obliczając rotację (∇×F) trójwymiarowego potencjalnego pola szumu. Kluczową własnością matematyczną jest to, że dywergencja dowolnej rotacji wynosi zero (∇·(∇×F) = 0), co sprawia, że wynikowe pole prędkości jest bezdywergencyjne. Oznacza to, że w przepływie nie istnieją żadne "ujścia" ani "źródła" — gęstość cząstek jest zachowana wszędzie.

W praktyce próbkujemy trójwymiarowe pole szumu Perlina/Simplex w lekko przesuniętych pozycjach, aby numerycznie przybliżyć pochodne cząstkowe potrzebne do obliczenia rotacji. Współrzędna z próbkowania szumu przesuwa się powoli w czasie, tworząc płynną ewolucję czasową dwuwymiarowego wzoru przepływu.

curl(F)_z = ∂F_y/∂x - ∂F_x/∂y
velocity = (∂N(x,y,z)/∂y - ∂N(x,y+e,z)/∂x, ∂N(x+e,y,z)/∂x - ...)
z = time * 0.003 (slow temporal evolution)

Każda cząstka przechowuje swoją pozycję (px, py) oraz licznik czasu życia. Gdy cząstka wychodzi poza granicę płótna lub przekracza swój czas życia, jest ponownie zasiewana w losowej pozycji. Efekt zanikającego śladu uzyskuje się, nakładając w każdej klatce półprzezroczysty czarny prostokąt zamiast całkowitego czyszczenia płótna.

Najczęściej zadawane pytania

Czym jest curl noise?

Curl noise to bezdywergencyjne pole wektorowe uzyskane przez obliczenie rotacji (∇×F) potencjalnego pola szumu. Ponieważ rotacja dowolnego pola wektorowego ma zerową dywergencję, cząstki podążające za curl noise nigdy się nie kumulują ani nie rozpraszają — płyną po trajektoriach zamkniętych lub otwartych, bez ujść i źródeł.

Dlaczego curl noise jest bezdywergencyjny?

Zgodnie z tożsamością rachunku wektorowego ∇·(∇×F) = 0 dla dowolnego gładkiego pola wektorowego F, rotacja jest zawsze bezdywergencyjna. Ta własność matematyczna zapewnia, że pole przepływu zachowuje "objętość" — nie dochodzi do nagromadzeń gęstości cząstek, co daje naturalnie gładkie, turbulentnie wyglądające przepływy.

Czym jest pole przepływu w sztuce generatywnej?

Pole przepływu (flow field) to siatka wektorów, które kierują cząstkami na płótnie. Każda cząstka próbkuje wektor w swojej bieżącej pozycji i porusza się wzdłuż niego. Gdy bazowe pole pochodzi z szumu (Perlina, Simplex lub curl noise), wynikiem jest organiczna, płynąca, turbulentnie wyglądająca sztuka.

Czym jest szum Perlina?

Szum Perlina (Perlin noise) to funkcja szumu gradientowego wynaleziona przez Kena Perlina. Generuje gładko interpolowane pseudolosowe wartości, dzięki czemu idealnie nadaje się do naturalnie wyglądających tekstur, terenu i pól przepływu. Wersja 3D próbkuje wartości w trzech współrzędnych (x, y, z), co pozwala zakodować czas jako oś z.

Jak szum 3D umożliwia animację czasową?

Wykorzystując czas symulacji jako trzecią (z) współrzędną funkcji szumu, pole przepływu ewoluuje płynnie w czasie, bez gwałtownych skoków. Gdy z rośnie powoli, dwuwymiarowy przekrój trójwymiarowego pola szumu przesuwa się organicznie, sprawiając, że cząstki wydają się dryfować i nieprzerwanie ewoluować.

Jaka jest różnica między szumem Perlina a szumem Simplex?

Szum Simplex to ulepszona przez Kena Perlina wersja szumu Perlina. Wykorzystuje siatkę simpleksową (trójkąty w 2D, czworościany w 3D) zamiast siatki kwadratowej/sześciennej. Eliminuje to artefakty zależne od osi, ma lepszą złożoność obliczeniową O(n²) w porównaniu do O(2^n) w n wymiarach i daje bardziej izotropowe wyniki.

Ile cząstek może działać w czasie rzeczywistym?

Na nowoczesnym płótnie przeglądarki z akceleracją GPU zwykle 3000–8000 cząstek działa przy 60 kl./s. Ta symulacja wykorzystuje 2000–6000 cząstek, w zależności od ustawienia suwaka. Każda cząstka wymaga jednego obliczenia szumu i jednego wywołania rysowania na klatkę, więc wydajność skaluje się liniowo z liczbą cząstek.

Czym jest technika zanikającego śladu (trail fade)?

Zamiast czyścić płótno w każdej klatce, nad całym płótnem rysowany jest półprzezroczysty czarny prostokąt. Powoduje to, że stare pozycje cząstek stopniowo zanikają, pozostawiając świecące ślady, które ujawniają strukturę pola przepływu. Nieprzezroczystość prostokąta zanikania kontroluje długość śladu.

Czy curl noise może symulować rzeczywistą dynamikę płynów?

Curl noise przybliża wygląd turbulentnego przepływu płynu, ale nie rozwiązuje równań Naviera-Stokesa. Prawdziwa symulacja płynów wymaga rozwiązywania równań różniczkowych cząstkowych z korekcją ciśnienia. Curl noise jest jednak obliczeniowo tani, nigdy nie rozbiega się numerycznie i daje estetycznie przekonującą turbulencję w grach i sztuce generatywnej.

Czym jest warstwowanie oktaw (szum fraktalny)?

Warstwowanie oktaw sumuje wiele funkcji szumu o różnych częstotliwościach i amplitudach: W(x) = Σ (1/2^i)·noise(2^i·x). Każda kolejna oktawa podwaja częstotliwość i zmniejsza o połowę amplitudę, dodając drobniejsze detale. Wynikiem jest szum fraktalny (fBm — fraktalny ruch Browna), który naśladuje naturalne zjawiska, takie jak chmury i teren.

O tej symulacji

Każda cząstka próbkuje trójwymiarowe pole szumu fraktalnego w czterech drobnych przesuniętych punktach, a funkcja curlAt() zamienia te różnice skończone na prędkość za pomocą ∂Fy/∂x − ∂Fx/∂y — numerycznej rotacji potencjału szumu. Ponieważ rotacja jest matematycznie gwarantowana jako bezdywergencyjna, cząstki nigdy nie gromadzą się w ujściach ani nie znikają w źródłach, a jedynie nieustannie wirują, dlatego zwiększanie Oktaw wciąż dodaje drobniejsze detale turbulencji, nigdy nie przerywając przepływu.

🔬 Co pokazuje

Tysiące świecących śladów cząstek wirujących w gładkim, bezdywergencyjnym turbulentnym przepływie, przy czym wzór powoli ewoluuje w czasie, gdy współrzędna z pola szumu się przesuwa.

🎮 Jak korzystać

Dostosuj Cząstki, Prędkość, Skalę i Oktawy, wybierz długość zanikania śladu i tryb koloru, kliknij na płótno, aby rozproszyć nową falę cząstek w tym miejscu, lub naciśnij P/R, aby zapauzować/zresetować.

💡 Czy wiesz, że?

Curl noise to ulubiona sztuczka w efektach wizualnych i grach właśnie dlatego, że nigdy nie "rozbiega się" numerycznie tak, jak mogą to robić prawdziwe solwery płynów — otrzymujesz przekonującą turbulencję bez żadnego ryzyka niestabilności związanego z rozwiązywaniem równań Naviera-Stokesa.

Najczęściej zadawane pytania

Dlaczego cząstki nigdy się nie zlepiają ani nie opróżniają obszaru?

Pole prędkości pochodzi z obliczenia rotacji potencjału szumu, a tożsamość rachunku wektorowego div(curl(F))=0 gwarantuje, że wynikowy przepływ jest bezdywergencyjny, więc gęstość cząstek jest zachowana wszędzie.

Co dokładnie dodaje do przepływu zwiększenie liczby Oktaw?

Funkcja fbm() sumuje coraz wyższej częstotliwości, niższej amplitudy warstwy szumu dla każdej dodanej oktawy, nakładając drobniejsze detale turbulencji na wielkoskalowe wiry, bez zmiany ogólnego kierunku przepływu.

Co się dzieje, gdy kliknę na płótno?

Kliknięcie tworzy 200 nowych cząstek rozproszonych w losowym promieniu wokół kursora, najpierw zastępując istniejące cząstki, a następnie dodając nowe, co pozwala wstrzyknąć widoczną falę do przepływu.

Jak symulacja animuje wzór w czasie, tak aby nie wyglądał tak samo?

Czas symulacji zasila współrzędną z trójwymiarowego odczytu szumu, więc każda klatka próbkuje nieco inny przekrój przez objętość szumu, dając płynną, ciągłą ewolucję zamiast statycznego lub zapętlonego wzoru.

Co dokładnie zmienia ustawienie zanikania śladu?

Zamiast czyścić płótno, każda klatka rysuje półprzezroczysty czarny prostokąt nad wszystkim; niższa nieprzezroczystość zanikania pozostawia długie, świecące ślady, podczas gdy wyższa niemal natychmiast usuwa stare pozycje.