Jak rozpocząć generowanie proceduralne?


147

Generowanie proceduralne znalazło się niedawno w centrum uwagi (przez Spore, MMO itp.) I wydaje się być interesującą / potężną techniką programowania.

Moje pytania są następujące:

  • Czy znasz jakieś średniej wielkości projekty, które wykorzystują techniki proceduralne?
  • Jaki język / klasa języków jest najlepszy do generowania procedur?
  • Czy możesz użyć generowania proceduralnego dla „poważnego” kodu? (czyli nie gra)

1
Zastanawiasz się, czy ten artykuł od X-Team byłby pomocny? x-team.com/blog/…
Adam Gerard

Odpowiedzi:


117

Prawdopodobnie powinieneś zacząć od małej teorii i prostych przykładów, takich jak algorytm przesunięcia punktu środkowego . Powinieneś także dowiedzieć się trochę o Perlin Noise, jeśli jesteś zainteresowany generowaniem grafiki. Wykorzystałem to, aby rozpocząć mój projekt na ostatnim roku dotyczący generowania proceduralnego.

Fraktale są ściśle związane z generowaniem proceduralnym.

Terragen i SpeedTree pokażą Ci niesamowite możliwości generowania proceduralnego.

Generowanie proceduralne to technika, której można używać w dowolnym języku (na pewno nie jest ograniczona do języków proceduralnych, takich jak C, ponieważ może być używana w językach OO, takich jak Java, i językach logicznych, takich jak Prolog). Dobre zrozumienie rekurencji w dowolnym języku wzmocni Twoją wiedzę na temat generowania proceduralnego.

Jeśli chodzi o kod „poważny” lub niezwiązany z grą, procedury generowania kodu zostały wykorzystane do:

  • symulować rozwój miast w celu planowania zarządzania ruchem
  • do symulacji wzrostu naczyń krwionośnych
  • SpeedTree jest używany w filmach i prezentacjach architektonicznych

Ten Perlin Noise wygląda bardzo podobnie do filtru „chmur” programu Photoshop.
doubleOrt

Pierwszy link jest uszkodzony
Jean Carlo Machado

Część muzyki Electro tworzy generację proceduralną
Poyda


12

Proceduralne generowanie treści jest teraz w całości napisane dla GPU, więc musisz znać język shaderów. Oznacza to GLSL lub HLSL. Są to języki powiązane odpowiednio z OpenGL i DirectX.

Podczas gdy moje osobiste preferencje dotyczą Dx11 / HLSL ze względu na szybkość, łatwiejszą krzywą uczenia się i Frank D Luna , OpenGL jest obsługiwany na większej liczbie platform.

Powinieneś także sprawdzić WebGL, jeśli chcesz od razu zacząć pisać shadery bez konieczności spędzania (znacznego) czasu potrzebnego na skonfigurowanie silnika gry OpenGL / DirectX.

Treść proceduralna zaczyna się od hałasu.

Musisz więc dowiedzieć się o szumie Perlina (i jego następcy szumie Simplex ).

Shadertoy to doskonałe źródło informacji o programowaniu shaderów. Zalecałbym, abyś przyszedł do tego po tym, jak sam wypróbujesz kodowanie shaderów, ponieważ kod tam nie jest przeznaczony dla matematycznie wrażliwych treści, ale tak właśnie odbywa się treść proceduralna.

Shadertoy został stworzony przez geniusza procedur, Inigo Quileza , produkt sceny demo, który pracuje w Pixar. Ma kilka filmów z YouTube ( świetny przykład ) z sesji kodowania na żywo i mogę je również polecić.


17
Co masz na myśli, mówiąc, że „generowanie treści proceduralnych jest teraz w całości napisane dla GPU”? Mówisz tylko o rzeczach takich jak źdźbła trawy? Nie chodzi ci na przykład o generowanie map lub miast do gier, prawda?
Dronz

2
Tak, myślę, że komentarz „wszystkie” jest tutaj nadmiernym uogólnieniem, ale w obszarze tworzenia krajobrazu (który, jak sądzę, jest najbardziej powszechny), jest to pomocna odpowiedź. Chociaż nie mogę sobie wyobrazić, kto chciałby oglądać, jak ktoś wpisuje kod w filmie.
Nate CK

1
Kogoś, kto chce nauczyć się pisać skomplikowany kod, na przykład shadery, lub nauczyć się wykorzystywać złożone wzorce w swoim projekcie. A to tylko zarysowanie powierzchni.
Ultroman the Tacoman

„Proceduralne generowanie treści jest teraz w całości napisane dla GPU, więc musisz znać język shaderów”. jest po prostu nieprawdziwe iw 100% mylące. (Robię prosty projekt generowania procedur, napisałem w swoim życiu 0 linii kodu shadera)
zmniejszam aktywność


8

Nie jestem w tym ekspertem, ale mogę spróbować udzielić kilku odpowiedzi:

  1. NetHack i jego brethern są open source i w dużym stopniu polegają na proceduralnym generowaniu poziomów (map). Link do plików do pobrania. Jeśli jesteś bardziej zainteresowany generowaniem krajobrazu / tekstur / chmur, polecam przeszukanie Gamasutra i GameDev, które mają sporo artykułów na te tematy.

  2. AFAIK Myślę, że nie ma dużej różnicy między językami. Większość kodu, który widzisz, będzie w C / CPP, ponieważ jest to nadal bardzo oficjalny język twórców gier, ale możesz używać wszystkiego, co chcesz ...

  3. To zależy, czy masz projekt, który może skorzystać na takiej technologii. Widziałem generację proceduralną używaną w symulatorach dla wojska (które można uznać za grę, chociaż są mało grywalne :)).

I mała uwaga - moja definicja, jeśli generowanie proceduralne jest czymś, co generuje dużo danych z małej liczby reguł lub wzorców i dużej liczby losowości, wyniki mogą się różnić :)


8

Istnieje doskonała książka na ten temat:

http://www.amazon.com/Texturing-Modeling-Third-Procedural-Approach/dp/1558608486

Jest nastawiony na efekty wizualne i generowanie animacji nie w czasie rzeczywistym, ale przypuszczam, że teoria i pomysły są użyteczne poza tymi dziedzinami.

Warto również wspomnieć, że istnieje profesjonalny pakiet oprogramowania, który implementuje pełny przepływ proceduralny o nazwie SideFX's Houdini. Możesz go używać do wymyślania i prototypowania proceduralnych rozwiązań problemów, które później możesz przełożyć na kod.

Chociaż jest to dość drogi pakiet, ma bezpłatną licencję testową, która może być używana jako bardzo ładne narzędzie edukacyjne i / lub inżynierskie.


7

Generowanie proceduralne jest intensywnie używane w demoscenie do tworzenia złożonej grafiki w małym pliku wykonywalnym. Will Wright powiedział nawet, że podczas tworzenia Spore zainspirowała go demoscena. To może być najlepsze miejsce na rozpoczęcie.

http://en.wikipedia.org/wiki/Demoscene


3

najważniejszą rzeczą jest przeanalizowanie struktury dróg, miast, bloków i budynków. dowiedz się, co mają wspólnego wszystkie np. budynki. spójrz na zdjęcia, mapy, plany i rzeczywistość. jeśli to zrobisz, będziesz o krok przed ludźmi, którzy uważają budowanie miast za kwestię wyłącznie technologii komputerowej.

następnie powinieneś opracować rozwiązania dotyczące tworzenia tej geometrii w małych, wyraźnych krokach. musisz zdefiniować zasady, które składają się na wiarygodne miasto. jeśli interesujesz się modelowaniem 3D, musisz przemyśleć wiele z tego, czego się nauczyłeś, aby komputer mógł postępować zgodnie z instrukcjami w każdej sytuacji.

aby się nie zgubić, należy ustawić wielu operatorów, którzy są odpowiedzialni tylko za małe części całego procesu. to znacznie ułatwia debugowanie, rozbudowę i ulepszanie systemu. w kolejnym kroku należy połączyć te operatory i sprawdzić wyniki zmieniając parametry.

widziałem zbyt wiele „generatorów miast”, które składają się głównie z pudełek o przypadkowych kształtach z pewnymi teksturami okien: (


3

(Ponad 10 lat później ...)

Generowanie proceduralne oznacza tylko, że kod jest używany do generowania danych, a nie ręcznie. Na przykład, jeśli chcesz wygenerować las z różnymi drzewami, nie będziesz projektować każdego drzewa ręcznie , dlatego kodowanie jest bardziej wydajne do generowania odmian. Może to być generacja grafiki drzewa, rozmiar, struktura, położenie ...

Ogólnie rzecz biorąc, istnieje pewien rodzaj interakcji z kilkoma regułami , oprócz tego możesz dodać własną losowość i logikę, połączyć wszystkie te techniki ... Cokolwiek nieco chaotycznego, ale niezbyt chaotycznego, może przynieść interesujące rezultaty.

Oto kilka godnych uwagi technik:

Kilka gier znanych z generacji proceduralnej:

Samouczek wideo o proceduralnym generowaniu lądu .

Konferencja na temat generowania treści proceduralnych do gier zawiera wiele filmów na ten temat: wszystkoproceduralne

Baw się dobrze.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.