🌀 Domain warping — zaginanie szumu w przepływ
Domain warping podaje szum z powrotem na jego własne współrzędne — f(p + f(p + f(p))) — zmieniając zwykły fBm w wirujące, marmurkowe, chmurzaste pola. Dobieraj siłę zniekształcenia i liczbę oktaw, by rzeźbić organiczny przepływ.
Podobne symulacje
O technice domain warping
Domain warping (zniekształcanie dziedziny) to technika tekstur proceduralnych, w której współrzędne wejściowe funkcji szumu są przesuwane wynikiem innego wywołania funkcji szumu, zanim nastąpi próbkowanie. Konkretnie, zamiast próbkować f(p) próbkuje się f(p + a·f(p + b·f(p))), zwracając pole z powrotem do jego własnych współrzędnych. Wynikiem jest przekształcenie prostego pola fraktalnego ruchu Browna (fBm) w wirujące, przypominające marmur lub chmury wzory, które wyglądają na znacznie bardziej złożone i organiczne niż sam bazowy szum.
Domain warping jest szeroko stosowany w generowaniu proceduralnym w grach wideo, efektach wizualnych i sztuce generatywnej do tworzenia przekonujących map wysokości terenu, materiałów marmurowych, strumieni lawy i renderów atmosferycznych chmur bez ręcznie tworzonych tekstur.
Najczęściej zadawane pytania
Czym jest domain warping w grafice proceduralnej?
Domain warping to praktyka zniekształcania współrzędnych wejściowych funkcji szumu lub tekstury za pomocą innego pola szumu, zanim zostanie ono obliczone. Zamiast odczytywać szum w pozycji p, odczytuje się go w p plus przesunięcie, które samo pochodzi z szumu, co powoduje, że pole faluje i wiruje, tworząc organiczne wzory. Kluczowa obserwacja jest taka, że stosując to rekurencyjnie, wzmacnia się złożoność bez zwiększania podstawowej rozdzielczości szumu.
Jak korzystać z elementów sterujących w tej symulacji?
Użyj suwaka siły zniekształcenia (Warp Strength), aby kontrolować, jak daleko przesuwane są współrzędne — zero daje zwykłe fBm, wyższe wartości dają silniejsze zawijanie i marmurkowość. Suwak oktaw (Octaves) dodaje lub usuwa warstwy detali w bazowym szumie fBm. Przełącznik przebiegów (Passes) przełącza między jedną iteracją zniekształcenia a dwiema zagnieżdżonymi iteracjami, przy czym dwa przebiegi dają znacznie bogatszą turbulencję. Przełączaj między widokami zniekształconym (Warped) a zwykłym fBm (Plain), aby zobaczyć dokładnie, co dodaje zniekształcenie.
Jaką zmianę wizualną powoduje zwiększenie siły zniekształcenia?
Przy niskiej sile zniekształcenia (0–1) pole wygląda jak łagodnie pofalowane fBm. Gdy siła rośnie w kierunku 3–5, pojawiają się płynące marmurowe żyły i przypominające chmury zawirowania. Przy bardzo wysokiej sile (6–8) pole staje się mocno zniekształcone, z ciasnymi zawijasami i niemal turbulentnym przepływem. Nie ma jednego progu, przy którym efekt się pojawia — przejście jest płynne, dlatego suwaki działające w czasie rzeczywistym są tak przydatne do eksplorowania przestrzeni parametrów.
Jaka jest matematyka stojąca za wzorem f(p + f(p + f(p)))?
Wzór ten reprezentuje dwie warstwy zniekształcenia współrzędnych. Najbardziej wewnętrzne f(p) to standardowe wywołanie fBm, które daje dwuwymiarowy wektor przesunięcia. Ten wektor jest skalowany współczynnikiem siły i dodawany do p, tworząc zniekształconą współrzędną, która jest podawana do drugiego fBm, dającego drugi wektor przesunięcia. Najbardziej zewnętrzne f oblicza wartość w p plus to podwójnie zniekształcone przesunięcie. Każda warstwa jest rządzona wzorem fBm: suma po oktawach amplitude_i * noise(frequency_i * p), gdzie amplituda maleje o połowę, a częstotliwość podwaja się z każdą oktawą.
Gdzie domain warping jest wykorzystywany w rzeczywistej produkcji?
Szum ze zniekształconą dziedziną jest podstawą niezliczonych materiałów proceduralnych w produkcji VFX i silnikach gier. Shadery chmur w renderingu filmowym (używane w produkcjach dużych studiów) polegają na iterowanym domain warpingu, aby uzyskać realistyczną turbulencję. Generatory terenu wykorzystują go do wzorów erozji kanionów rzecznych. W silnikach gier takich jak Unreal i Unity zniekształcone fBm jest domyślnym budulcem węzłów grafu materiałów, które tworzą wodę, lawę, dym i szczegóły powierzchni skalnych.
Czy domain warping to to samo co szum turbulencji?
Nie, choć są powiązane. Szum turbulencji bierze wartość bezwzględną szumu ze znakiem na każdej oktawie przed zsumowaniem, tworząc bruzdy przypominające grzbiety. Domain warping to zniekształcenie przestrzeni współrzędnych stosowane przed lub wokół obliczenia szumu, a nie modyfikacja sumowania. Obie techniki można łączyć: można zastosować domain warping do szumu turbulencji lub zastosować turbulencję do pola już zniekształconego, uzyskując jeszcze bardziej złożone wzory.
Kto wprowadził domain warping i kiedy zyskał popularność?
Ogólna idea zniekształcania współrzędnych w teksturach proceduralnych poprzedza współczesne zastosowania i pojawia się już w oryginalnej pracy Kena Perlina z konferencji SIGGRAPH 1985 na temat tekstur proceduralnych jako forma perturbacji współrzędnych. Jednak domain warping wykorzystujący fBm zasilające samo siebie zostało systematycznie zbadane i spopularyzowane przez Inigo Quileza w jego artykułach i eksperymentach na ShaderToy z lat 2002–2013, które stały się kluczowymi materiałami źródłowymi dla artystów proceduralnych. Jego sformułowanie q = fBm(p), r = fBm(p + q), wynik = fBm(p + r) jest dziś kanonicznym przepisem.
Jakie inne zjawiska lub symulacje są powiązane z domain warpingiem?
Domain warping jest ściśle powiązany z polami przepływu (flow fields), gdzie pole szumu definiuje wektory prędkości, którymi podążają cząstki w czasie. Wiąże się też z curl noise, który wyprowadza bezdywergencyjny przepływ z potencjalnego pola szumu, symulując ruch cząstek podobny do płynu. Szum Worleya (komórkowy) może zostać poddany domain warpingowi, dając spękaną skałę lub organiczne wzory komórkowe. Ogólniej, domain warping jest szczególnym przypadkiem mapowania przesunięć (displacement mapping), stosowanego w całej grafice komputerowej do dodawania szczegółów powierzchni bez zwiększania rozdzielczości geometrii.
Jak domain warping jest wykorzystywany w programowaniu shaderów dziś?
We współczesnych shaderach GLSL i HLSL domain warping jest implementowany w kilku liniach: pobiera się przesunięcie vec2 z dwóch wywołań fBm o przesuniętych współrzędnych ziarna (np. fBm(p + vec2(0.0, 5.2)) dla x, fBm(p + vec2(1.3, 8.7)) dla y), skaluje przez siłę, a następnie oblicza końcowe fBm w zniekształconej pozycji. Wykonanie na GPU sprawia, że nawet dwuprzebiegowy domain warping działa w czasie rzeczywistym przy pełnej rozdzielczości ekranu. Platformy shaderowe, takie jak Shadertoy, oraz węzłowe edytory materiałów w silnikach gier udostępniają te parametry jako przyjazne dla artystów kontrolki.
Jakie są obecne kierunki badań rozwijające domain warping?
Badacze eksplorują różniczkowalny domain warping do syntezy tekstur neuronowych, gdzie optymalizacja oparta na gradiencie uczy pól zniekształceń dopasowanych do docelowych statystyk wyglądu. Innym aktywnym obszarem jest zniekształcenie oparte na fizyce, gdzie pole przesunięć jest ograniczone tak, aby spełniało równania mechaniki płynów (Naviera-Stokesa lub Eulera), dając tekstury, które są nie tylko wizualnie wiarygodne, ale też fizycznie spójne. Rzadkie reprezentacje neuronowe, takie jak NeRF i 3D Gaussian Splatting, wykorzystują też uczone deformacje współrzędnych, które są koncepcyjnie rozszerzeniem domain warpingu zastosowanym do wolumetrycznych pól promieniowania.