Prosedürel üretime nasıl başlanır?


147

Prosedürel nesil , son zamanlarda (Spore, MMO'lar vb. Tarafından) gündeme geldi ve ilginç / güçlü bir programlama tekniği gibi görünüyor.

Sorularım şunlar:

  • Prosedürel üretim tekniklerini kullanan orta ölçekli projeler biliyor musunuz?
  • Prosedürel nesil için en iyi dil / dil sınıfı hangisidir?
  • "Ciddi" kod için yordamsal üretimi kullanabilir misiniz? (yani oyun değil)

1
X-Team'in bu makalesini yararlı bulup bulmayacağınızı merak ediyor musunuz? x-team.com/blog/…
Adam Gerard

Yanıtlar:


118

Muhtemelen küçük bir teori ve orta nokta yer değiştirme algoritması gibi basit örneklerle başlamalısınız . Grafik oluşturmakla ilgileniyorsanız, Perlin Gürültüsü hakkında da biraz bilgi edinmelisiniz . Bunu, prosedürel üretimle ilgili son yıl projeme başlamak için kullandım.

Fraktallar , prosedürel nesil ile yakından ilgilidir.

Terragen ve SpeedTree size prosedürel üretimin bazı şaşırtıcı olanaklarını gösterecek.

Prosedürel üretim, herhangi bir dilde kullanılabilen bir tekniktir (Java gibi OO dillerinde ve Prolog gibi Mantık dillerinde kullanılabildiğinden kesinlikle C gibi prosedürel dillerle sınırlı değildir). Herhangi bir dilde iyi bir özyineleme anlayışı, Procedural Generation'a dair kavrayışınızı güçlendirecektir.

'Ciddi' veya oyun dışı koda gelince, prosedürel oluşturma teknikleri şu amaçlarla kullanılmıştır:

  • Trafik yönetimini planlamak için şehirlerin büyümesini simüle edin
  • kan damarlarının büyümesini simüle etmek
  • SpeedTree, filmlerde ve mimari sunumlarda kullanılır

Bu Perlin Noise, Photoshop'un "bulutlar" filtresine çok benziyor.
doubleOrt

İlk bağlantı koptu
Jean Carlo Machado

Bazı Electro müzikler, oluşturulacak prosedürel üretimi kullanır
Poyda


12

Prosedürel içerik oluşturmanın tamamı artık GPU için yazılmıştır, bu nedenle bir gölgelendirici dili bilmeniz gerekir. Bu GLSL veya HLSL anlamına gelir. Bunlar sırasıyla OpenGL ve DirectX'e bağlı dillerdir.

Kişisel tercihim hız, daha kolay öğrenme eğrisi ve Frank D Luna nedeniyle Dx11 / HLSL iken , OpenGL daha fazla platformda destekleniyor.

Bir OpenGL / DirectX oyun motoru kurmak için gereken zamanı (hatırı sayılır) harcamak zorunda kalmadan doğrudan gölgelendiriciler yazmaya başlamak istiyorsanız WebGL'ye de göz atmalısınız.

Prosedür içeriği gürültüyle başlar.

Bu yüzden Perlin gürültüsü (ve onun yerine geçen Simplex gürültüsü ) hakkında bilgi edinmeniz gerekecek .

Shadertoy , gölgelendirici programlamayı öğrenmek için mükemmel bir başvuru kaynağıdır . Gölgelendirici kodlamasını kendiniz bir kez verdikten sonra buraya gelmenizi tavsiye ederim, çünkü kod matematiksel olarak hassas için değildir, ancak prosedürel içerik bu şekilde yapılır.

Shadertoy, Pixar'da çalışan demo sahnesinin bir ürünü olan bir prosedür dehası Inigo Quilez tarafından yaratıldı . Geride bazı youtube videoları ( büyük bir örnek canlı kodlama oturumların) ve aynı zamanda bu tavsiye edebilir.


17
Ne demek "yordamsal içerik oluşturmanın tamamı artık GPU için yazılıyor"? Sadece çim bıçakları gibi şeylerden mi bahsediyorsun? Örneğin oyunlar için haritalar veya şehirler oluşturmayı kastetmiyorsunuz, değil mi?
Dronz

2
Evet, bence buradaki "hepsi" yorumu aşırı genelleme, ancak peyzaj üretimi alanında (ki en yaygın olanı tahmin ediyorum) bu yararlı bir cevap. Yine de, bir videoya kod yazan birini kimin izlemek isteyeceğini hayal edemiyorum.
Nate CK

1
Gölgelendiriciler gibi karmaşık kod yazmayı veya tasarımlarında karmaşık kalıplardan nasıl yararlanılacağını öğrenmek isteyen biri. Ve bu sadece yüzeyi çiziyor.
Ultroman the Tacoman

"Prosedürel içerik oluşturmanın tamamı artık GPU için yazılmıştır, bu nedenle bir gölgelendirici dili bilmeniz gerekir." sadece doğru değildir ve% 100 yanıltıcıdır. (Basit yordamsal oluşturma projesi yapıyorum, hayatımda 0 satır gölgelendirici kodu yazdım)
etkinliği azaltma etkinliği


8

Bu konuda uzman değilim, ancak birkaç cevaba katkıda bulunmayı deneyebilirim:

  1. NetHack ve onun Brethern'i açık kaynak kodludur ve büyük ölçüde yordamsal üretim düzeylerine (haritalar) dayanır. İndirilenlere bağlantı . Manzara / doku / bulut oluşturma ile daha çok ilgileniyorsanız , bu konularda epeyce makalesi olan Gamasutra ve GameDev'i araştırmanızı tavsiye ederim .

  2. AFAIK Diller arasında çok fazla fark olduğunu düşünmüyorum. Gördüğünüz kodun çoğu C / CPP'de olacak çünkü hala Oyun Geliştiricilerinin resmi dilidir, ancak istediğiniz her şeyi kullanabilirsiniz ...

  3. Böyle bir teknolojiden yararlanabilecek bir projeniz olup olmamasına bağlı. Ordu için simülatörlerde kullanılan prosedürel nesil gördüm (çok oynanabilir olmasalar da bir oyun olarak kabul edilebilir :)).

Ve küçük bir not - benim tanımım eğer prosedürel üretim az miktarda kural veya kalıptan ve çok fazla rastlantısallıktan çok fazla veri üreten bir şeyse, sonuçlarınız değişebilir :)


8

Konuyla ilgili harika bir kitap var:

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

Gerçek zamanlı olmayan görsel efektlere ve animasyon üretimine eğilimlidir, ancak teori ve fikirler bu alanların dışında kullanılabilir sanırım.

SideFX'in Houdini'si olarak adlandırılan eksiksiz bir prosedürel iş akışını uygulayan profesyonel bir yazılım paketinin olduğunu da belirtmekte fayda var. Daha sonra koda çevirebileceğiniz problemlere prosedürel çözümler icat etmek ve prototiplemek için kullanabilirsiniz.

Oldukça pahalı bir paket olmasına rağmen, çok güzel bir eğitim ve / veya mühendislik aracı olarak kullanılabilecek ücretsiz bir değerlendirme lisansına sahiptir.


7

Prosedürel oluşturma, küçük bir yürütülebilir dosyada karmaşık grafikler oluşturmak için demoscene yoğun bir şekilde kullanılır. Will Wright, Spore'u yaparken demoskenden ilham aldığını bile söyledi. Başlamak için en iyi yer burası olabilir.

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


3

en önemli şey yolların, şehirlerin, blokların ve binaların nasıl yapılandırıldığını analiz etmektir. örneğin tüm binaların ortak yönlerini öğrenin. fotoğraflara, haritalara, planlara ve gerçekliğe bakın. bunu yaparsanız, şehir inşasını yalnızca bilgisayar teknolojisi olarak gören insanlardan bir adım önde olursunuz.

daha sonra bu geometrinin küçük, farklı adımlarla nasıl oluşturulacağına dair çözümler geliştirmelisiniz. inandırıcı bir şehri oluşturan kuralları belirlemelisiniz. Eğer 3d modellemeyle ilgileniyorsanız, bilgisayarın her durumda talimatlarınızı takip edebilmesi için öğrendiklerinizi yeniden düşünmeniz gerekir.

İzi kaybetmemek için, tüm sürecin sadece küçük bölümlerinden sorumlu olan birçok operatör kurmalısınız. bu, hata ayıklamayı, genişletmeyi ve sisteminizi iyileştirmeyi çok daha kolaylaştırır. sonraki adımda bu operatörleri bağlamanız ve parametreleri değiştirerek sonuçları kontrol etmeniz gerekir.

Çoğunlukla üzerinde bazı pencere dokuları bulunan rastgele şekilli kutulardan oluşan çok fazla "şehir üreticisi" gördüm: (


3

(10 yıldan fazla bir süre sonra ...)

Prosedürel üretim, yalnızca kodun el yapımı yerine verileri oluşturmak için kullanıldığı anlamına gelir. Örneğin siz çeşitli ağaçları ile bir orman oluşturmak istiyorsanız değil her ağaç tasarımı yapacak elle dolayısıyla kodlama varyasyonları oluşturmaktır daha etkilidir. Ağaç grafiklerinin üretimi, boyutu, yapısı, yerleşimi ...

Genelde birkaç kuralla bir tür etkileşim vardır , buna ek olarak kendi rasgelelik ve mantığınızı ekleyebilir, tüm bu teknikleri birleştirebilirsiniz ... Biraz kaotik ama çok kaotik olmayan herhangi bir şey ilginç sonuçlar verebilir.

İşte birkaç önemli teknik:

Prosedürel nesilleri ile ünlü birkaç oyun:

Prosedürel Kara Kütlesi Üretimi hakkında video eğitimi .

Oyunlar için prosedürel içerik oluşturma konferansı, konuyla ilgili birçok videoya sahiptir: her şey prosedürel

İyi eğlenceler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.