Jak mogę łatwo tworzyć mapy tekstur w chmurze?

16

W mojej grze tworzę planety 3d; będą one postrzegane jako „globusy”. Niektóre z nich będą wymagać warstw chmur. Spojrzałem na różne samouczki Blendera dotyczące tworzenia „ziemi” , a dla ich warstw chmur używają map chmur ziemi z NASA .

Stworzę jednak fikcyjny wszechświat z wieloma planetami generowanymi proceduralnie. Chciałbym więc użyć wielu odmian.

Mam nadzieję, że istnieje sposób na procedury generowania map w chmurze, takich jak łącze NASA. Będę również musiał stworzyć gigantów gazowych, więc będę również potrzebował innych rodzajów map tekstur chmur .

Jeśli jest to zbyt trudne, mogę wrócić do tworzenia kilku odmian map chmurowych. Na przykład 3 dla ziemskich, 3 dla gazowych gigantów itp.

Jak więc tworzyć statycznie lub programowo generować takie mapy chmurowe?

EdwardTeach
źródło

Odpowiedzi:

19

Generowanie chmur jest fajne! Omówię metody offline i środowiska wykonawczego.

Wstępnie renderowane chmury

Jeśli chcesz wstępnie renderować tekstury chmur w trybie offline, nie szukaj dalej niż Photoshop (lub Gimp , jeśli wolisz). Oba programy mogą łatwo generować wzorce chmur. Elementy menu często zmieniają się między wydaniami, ale od Gimp 2.8.2 głównym poleceniem, którego szukasz, jest Filters -> Render -> Clouds -> Solid Noise. Przed włączeniem polecenia musisz utworzyć nowy pusty obraz. Zachęcam do eksperymentowania z parametrami hałasu, ale tak jak w jednym przykładzie, oto co się stanie, jeśli ustawisz „Losowe ziarno” na 1, „Szczegół” na 4, „X rozmiar” na 4.0, „Y rozmiar” na 8.0, wyłącz „Randomize” i „Turbulent” oraz włącz opcję „Tilable”: Surowy wynik polecenia Gimp „Solid Noise”

Kolejnym krokiem, który zdecydowanie polecam, jest edycja poziomów obrazu ( Colors -> Levels...w Gimp). Przeciągając punkty końcowe, możesz skutecznie zmienić poziom zachmurzenia chmur z „całkowicie zachmurzonego” na „bez chmur na niebie”. Chmury progowe

Inne interesujące możliwości:

  • Użyj narzędzi „Dodge” i „Burn”, aby ręcznie rozjaśnić / przyciemnić fragmenty obrazu.
  • Wypacz obraz chmur, aby zasugerować wzory wiatru. Wypróbuj Filters -> Distorts -> Whirl and Pinch...polecenie Gimp lub skorzystaj z większej kontroli, korzystając Filters -> Distorts -> IWarp...z trybu Deform Mode ustawionego na „Swirl”. Zachowaj jednak subtelność - zbyt duże wypaczenie powoduje rozmycie szczegółów wysokiej częstotliwości z obrazu.
  • Dodaj wiele niezależnych warstw chmur, aby zasymulować różne typy chmur, od cienkich i delikatnych po duże i masywne (jestem pewien, że mają odpowiednie naukowe nazwy, ale do cholery Jim, jestem programistą, a nie meteorologiem!). W takim przypadku prawdopodobnie chcesz zapisać każdą warstwę jako osobny obraz, abyś mógł animować je niezależnie w czasie wykonywania.

To naprawdę zależy od twojej artystycznej wizji. Oszalej! Po zakończeniu pamiętaj o wyeksportowaniu tekstury jako jednokanałowego obrazu w skali szarości, abyś mógł używać tych samych danych w chmurze dla swojego koloru i kanału alfa w czasie wykonywania.

Generowanie chmury wykonawczej

Generowanie nieograniczonych wzorców chmur w czasie wykonywania jest nieco bardziej zaangażowane, ale nadal całkowicie wykonalne. To ogromny temat, który obejmie tylko szerokie pociągnięcia.

Zasadniczo zamierzasz powielić polecenie Gimp „Solid Noise” w kodzie modułu cieniującego, używając funkcji szumu, takiej jak kanoniczny szum Perlin, w celu wygenerowania nieskończonej, gładkiej, deterministycznej (opcjonalnie) okresowej głośności hałasu. Twoje pytanie nie określało, który interfejs renderowania jest docelowy, więc nie mogę tu podać zbyt szczegółowych informacji; rozdział 26 „GPU Gems 2” opisuje wariant hałasu Perlina w (nieco przestarzałych) HLSL i CgFX, lub możesz użyć tej funkcji szumu GLSL. Próbkując kawałek 2D objętości szumu 3D, otrzymujesz coś w rodzaju polecenia Gimp „Solid Noise” z Detail = 0. Im mniejsza odległość między próbkami głośności hałasu, tym niższa częstotliwość („gładsza”) będzie twój hałas. Aby zwiększyć poziom szczegółowości wysokich częstotliwości, zacznij od podstawowego wzoru szumu niskiej częstotliwości i dodaj dodatkowe „oktawy” szumu o wyższej częstotliwości, gdzie każda „oktawa” to inny wycinek głośności szumu 3D o większej odległości próbkowania i niższa amplituda. Wizualny przykład tego procesu (który znalazłem w Googlingu „wieloklinowym szumie Perlina”) można znaleźć tutaj .

Dodatkową zaletą jest fakt, że tekstury chmur generowane w ten sposób można bardzo łatwo animować! Dodaj przesunięcie czasowe do współrzędnych przykładowych funkcji szumów 3D, a otrzymasz niezwykle przekonujący ruch chmury (jak na przykład na tym filmie ). Wynika to z faktu, że funkcja hałasu jest płynna we wszystkich trzech wymiarach; przewijanie tekstury w kierunku U / V powoduje, że chmury poruszają się po planecie, natomiast przewijanie w kierunku W (prostopadłym) powoduje powolne „ewoluowanie” chmur.

Możliwe jest również wypaczanie chmur w czasie wykonywania, aby uzyskać efekty podobne do huraganu. Wyniki mogą być znacznie lepszej jakości niż naiwne filtry wypaczające Gimp, co (jak wspomniano wcześniej) może prowadzić do nadmiernie rozmytej tekstury. Jedną z technik, na którą zdecydowanie chcesz się przyjrzeć, są „mapy przepływów”, jak opisali Alex Vlachos z Valve ( slajdy SIGGRAPH 2010 ) lub Carlos Gonzalez z Naughty Dog ( slajdy GDC 2012 ). Podstawową ideą jest to, że malujesz pole wektorowe („mapa przepływu”) i używasz go do zniekształcania i przewijania tekstury chmur w czasie wykonywania, a także okresowego przechodzenia między dwiema różnymi teksturami chmur, gdy odległość zniekształcenia staje się zbyt duża.

Jakiej metody użyć?

Wstępne renderowanie tekstur chmur w Gimp / Photoshop jest niezwykle łatwe; możesz wygenerować nową teksturę w ciągu kilku sekund po zrozumieniu. Kod środowiska wykonawczego jest trywialny i bardzo szybki. Jednak bardziej unikalne tekstury chmur oznaczają wyższe wymagania dotyczące miejsca na dysku (także większe / wolniejsze pobieranie) i większe zużycie pamięci VRAM w czasie wykonywania.

Generowanie chmury wykonawczej jest na początku znacznie trudniejsze, ale kiedy już zacznie działać, ma kilka wyraźnych zalet w porównaniu z wstępnie renderowanymi teksturami chmurowymi. Możesz wygenerować nieskończoną różnorodność realistycznych animowanych wzorów chmur bez użycia dodatkowego miejsca na dysku lub pamięci VRAM. Jednak czas wykonywania oceny wielu funkcji szumu 3D na piksel może być wysoki; twoje cieniujące piksele chmurowe będą znacznie wolniejsze niż w przypadku wstępnie renderowanego przypadku.

TL; DR: zdecydowanie zacznij od użycia wstępnie renderowanych chmur i przełącz się na chmury proceduralne w środowisku wykonawczym, jeśli potrzebujesz dodatkowej różnorodności (lub dodatkowego wyzwania programistycznego).

postgoodizm
źródło
1
To świetna odpowiedź: bardzo wszechstronna i łatwa do naśladowania. Widzę, że wspomniałeś o „wypaczaniu chmur w celu zasugerowania wzorów wiatru”. To jest coś, co na pewno będę musiał zrobić, więc możesz to trochę rozwinąć? Kiedy to otrzymam, zaakceptuję twoją odpowiedź.
EdwardTeach,
@EdwardTeach Done; mam nadzieję, że to pomaga!
postgoodism