Strona główna Rendering Tekstury proceduralne

🎨 Tekstury proceduralne

Proceduralne tekstury w shaderze fragmentów GLSL: marmur, słoje drewna, chmury, ogień, komórki Voronoi i lawa. Szum fBm, szum Worleya, animacja przez uniform czasu.

Rendering2DŚredni60 FPS
procedural-textures ↗ Otwórz osobno
Interfejs samej symulacji jest w języku angielskim.

O teksturach proceduralnych

Ta symulacja renderuje sześć klasycznych tekstur proceduralnych — marmur, drewno, chmury, ogień, komórki Voronoi i lawę — w całości na GPU, za pomocą pojedynczego shadera fragmentów GLSL. Nie są wczytywane żadne pliki obrazów; każdy piksel jest obliczany z matematyki współrzędnych. Podstawowym elementem jest szum wartości zbudowany z hasha siatki opartego na sinusie, sumowany przez oktawy jako fraktalny ruch Browna (fBm): każda oktawa podwaja częstotliwość i zmniejsza o połowę amplitudę, dając detal na wielu skalach.

Suwak Scale (0,5×–4×) przybliża pole szumu, Speed (0×–3×) napędza zegar animacji, a Octaves (1–8) ustala, ile warstw fBm jest sumowanych, zamieniając detal na szybkość. Zakładki presetów przełączają gałąź shadera, a przełączniki Palette przebarwiają przez jasność na Grayscale lub rampę Heat. Te same techniki napędzają grafikę filmową i grową: kora, marmur, dym i lawa są zwykle generowane, a nie fotografowane.

Najczęściej zadawane pytania

Czym są tekstury proceduralne?

To tekstury, w których każdy piksel jest obliczany za pomocą funkcji matematycznej, a nie odczytywany z zapisanej bitmapy. Ponieważ kolor wynika ze współrzędnych piksela, rezultat jest bezszwowy, kafelkowalny i dostępny w dowolnej rozdzielczości. Ta demonstracja oblicza wszystkie sześć tekstur na żywo w shaderze fragmentów działającym na GPU.

Czym jest fBm i po co jest tu użyty?

Fraktalny ruch Browna sumuje kilka warstw szumu, każda o podwójnej częstotliwości i o połowę mniejszej amplitudzie niż poprzednia. Daje to zarówno duże kształty, jak i drobne detale powierzchni, dlatego powstają naturalnie wyglądające chmury, marmur i ogień. Suwak Octaves kontroluje, ile warstw, od 1 do 8, jest dodawanych.

Co robią suwaki Scale, Speed i Octaves?

Scale (0,5× do 4×) powiększa próbkowanie szumu, więc niskie wartości pokazują duże struktury, a wysokie ujawniają drobne ziarno. Speed (0× do 3×) mnoży zegar animacji, a przeciągnięcie do 0 zamraża teksturę. Octaves (1 do 8) ustala liczbę warstw fBm, dodając bogactwo kosztem obciążenia shadera.

Jak faktycznie generowany jest bazowy szum?

Funkcja skrótu miesza każdy punkt siatki całkowitoliczbowej za pomocą fract z sin iloczynu skalarnego, dając pseudolosową wartość na każdy róg siatki. Szum wartości gładko interpoluje cztery otaczające rogi krzywą smoothstep, a fBm nakłada kilka przeskalowanych kopii tego szumu, by zbudować finalne pole.

Jak różni się preset Voronoi od pozostałych?

Tryb Voronoi używa szumu Worleya, czyli komórkowego, zamiast szumu wartości. Rozrzuca punkt zalążkowy w każdej komórce siatki i dla każdego piksela znajduje najbliższy zalążek, zwracając tę odległość i skrót zalążka. Każda komórka jest następnie kolorowana na podstawie swojego zalążka i przyciemniana przy granicach, tworząc charakterystyczną mozaikę regionów.

Co zmieniają przełączniki Palette?

Każda tekstura ma własną wbudowaną rampę kolorów, którą przełącznik Original pozostawia bez zmian. Grayscale konwertuje wynik na jasność za pomocą standardowych wag 0,299, 0,587, 0,114, ujawniając surową wartość szumu. Heat bierze tę samą jasność i przepuszcza ją przez rampę ognia czarny-czerwony-pomarańczowy-żółty, przebarwiając dowolną teksturę na mapę termiczną.

Czy te tekstury są fizycznie dokładne?

Nie — to artystyczne przybliżenia, a nie symulacje fizyczne. Ogień i lawa nie rozwiązują dynamiki płynów; animują pola fBm za pomocą masek i sinusoidalnych zniekształceń, by sugerować ruch. Celem jest przekonujący, kontrolowalny detal wizualny w czasie rzeczywistym, dokładnie tak, jak tekstury proceduralne są używane w renderowaniu produkcyjnym.

Dlaczego shader fragmentów zamiast gotowych obrazów?

Działanie w shaderze fragmentów oznacza, że GPU oblicza teksturę niezależnie dla każdego piksela równolegle, więc obraz jest niezależny od rozdzielczości i nigdy nie pokazuje szwów kafelkowania ani rozmycia przy powiększeniu. Kosztuje też niemal zero pamięci, ponieważ nic nie jest przechowywane, a tekstura może animować się w sposób ciągły, wprowadzając czas do obliczeń.

Co robi korekcja gamma na końcu shadera?

Po obliczeniu koloru jest on podnoszony do potęgi 0,4545, czyli jeden przez 2,2. Zamienia to kolor liniowy, w którym działają obliczenia, na przestrzeń sRGB oczekiwaną przez wyświetlacz, dzięki czemu tony pośrednie wyglądają na poprawnie jasne, a nie zbyt ciemne. To standardowy końcowy krok w wyjściu shadera.

Gdzie w prawdziwym świecie używa się tekstur proceduralnych?

Są wszędzie w filmach 3D i grach: kamień, drewno, marmur, woda, chmury, skóra i teren są zwykle generowane, a nie fotografowane. Te same funkcje szumu napędzają mapy wysokości terenu, powierzchnie planet i efekty specjalne. Szum Voronoi w szczególności pojawia się w geometrii obliczeniowej, modelach biologii komórkowej i mapach regionów w grach.

Podobne symulacje