Dlaczego wykonanie funkcji szumu, którą można kafelkować, jest dwukrotnie droższe?

13

Widziałem w kilku miejscach, że bezproblemowe wykonanie pętli hałasu Perlina wymaga jej dwukrotnego obliczenia na nieco inne sposoby i zsumowania dwóch wyników.

Często zadawane pytania matematyczne Perlina zawierają formułę:

Floop(x,y,z)=(tz)F(x,y,z)+zF(x,y,zt)t

aby pętla działała w kierunkuWspomniano również, że przedłużenie to pętli w 2 wymiarach zajęłoby 4 oceny i do pętli w 3 wymiarach zajęłoby 8 oceny .FzFF

Rozumiem, że daje to bezproblemowe połączenie między kafelkami, które jest nie tylko ciągłe, ale ciągle różnicowane, ale intuicyjnie oczekuję, że tak będzie, jeśli funkcja szumu zostanie po prostu oceniona raz, a punkty siatki zmniejszą modułowo wymagany rozmiar płytki. Jeśli funkcja szumu jest kiedykolwiek oparta tylko na bezpośrednio otaczających punktach siatki (4 dla szumu 2D, 8 dla szumu 3D), to z pewnością po prostu skorzystaj z skrajnych lewych punktów siatki, gdy punkt do obliczenia znajdzie się poza prawą krawędzią płytki taka sama jakość hałasu jak między innymi punktami siatki?

Ponieważ widziałem to wielokrotne podejście do obliczeń w kilku miejscach, zakładam, że musi to mieć pewną przewagę, ale staram się dostrzec wadę polegającą na owijaniu punktów siatki z powrotem na początek, gdy stają się zbyt duże. czego mi brakuje?

trichopaks
źródło

Odpowiedzi:

19

To niefortunne, że ludzie często to polecają. Mieszanie w ten sposób dwóch (lub czterech itd.) Przetłumaczonych kopii funkcji szumu jest dość złym pomysłem. Jest nie tylko drogi, ale nie zapewnia nawet poprawnie wyglądających rezultatów!

Hałas Perlina Mieszany hałas Perlina

Po lewej stronie jest trochę hałasu Perlina. Po prawej stronie są dwa przypadki hałasu Perlina, ułożone w stos i mieszane od lewej do prawej.

Różnica jest nieco subtelna, ale widać, że drugi obraz ma niższy kontrast w pionowej kolumnie biegnącej w środku. To jest 50% połączenie dwóch różnych wystąpień funkcji hałasu. Taka mieszanka nie wygląda jak oryginalna funkcja szumu: po prostu wygląda jak zabłocony bałagan.

OK, więc nie jest aż tak źle, patrząc tylko na surowy szum ... ale jeśli wykonasz jakieś nieliniowe transformacje na obrazie, nierównomierny kontrast może powodować problemy. Na przykład tutaj są te obrazy progowe na poziomie 60%. (Pomyśl na przykład o generowaniu wysp na oceanie).

Progowy hałas Perlina Progowy mieszany hałas Perlina

Teraz możesz wyraźnie zobaczyć, jak obraz po prawej stronie ma mniej, mniejszych białych obszarów na środku.

Jak wspomniano, w przypadku szumów opartych na siatce, takich jak Perlin, lepszym sposobem jest układanie pseudolosowych gradientów w punktach siatki. Jest to łatwe i tanie, a następnie możesz zastosować algorytm interpolacji do gradientów jak zwykle (podobnie jak interpolacja dwuliniowa tekstury sąsiadująco). Powoduje to hałas sąsiadująco bez żadnych dziwnych artefaktów, ponieważ działa z algorytmem szumu leżącym u jego podstaw, a nie nad nim. Możesz zastosować podobną strategię z szumem Worleya (szum komórkowy), kafelkując losowe punkty funkcji, których używa jako podstawy.

Jednak przy wielu oktawach hałasu nie zawsze jest to takie proste. Jeśli względna skala między oktawami (inaczej „brak przejrzystości”) nie jest liczbą całkowitą lub zwykłą liczbą wymierną, być może nie będziesz w stanie znaleźć dogodnego punktu podziału, w którym wszystkie siatki oktaw pasują do siebie. Możesz ustawić każdą oktawę niezależnie, ale ogólny hałas nadal nie byłby możliwy do ustawienia w takim przypadku.

Nathan Reed
źródło
4
Obrazy obok siebie naprawdę wpływają na intuicyjne zrozumienie wyjaśnienia. Będę o tym pamiętać przy moich własnych odpowiedziach.
trichoplax