Bagaimana seseorang memulai dengan generasi prosedural?


147

Generasi prosedural telah menjadi sorotan baru-baru ini (oleh Spore, MMOs, dll), dan sepertinya teknik pemrograman yang menarik / kuat.

Pertanyaan saya adalah ini:

  • Apakah Anda tahu ada proyek menengah yang memanfaatkan teknik pembuatan prosedural?
  • Bahasa / kelas bahasa apa yang terbaik untuk generasi prosedural?
  • Bisakah Anda menggunakan generasi prosedural untuk kode "serius"? (yaitu, bukan game)

1
Bertanya-tanya apakah Anda akan menemukan artikel ini dari X-Team bermanfaat? x-team.com/blog/…
Adam Gerard

Jawaban:


117

Anda mungkin harus mulai dengan sedikit teori dan contoh sederhana seperti algoritma perpindahan titik tengah . Anda juga harus belajar sedikit tentang Perlin Noise jika Anda tertarik untuk menghasilkan grafik. Saya menggunakan ini untuk memulai proyek tahun terakhir saya pada generasi prosedural.

Fraktal terkait erat dengan generasi prosedural.

Terragen dan SpeedTree akan menunjukkan kepada Anda beberapa kemungkinan menakjubkan dari pembuatan prosedural.

Generasi prosedural adalah teknik yang dapat digunakan dalam bahasa apa pun (jelas tidak terbatas pada bahasa prosedural seperti C, karena dapat digunakan dalam bahasa OO seperti Java, dan bahasa Logika seperti Prolog). Pemahaman yang baik tentang rekursi dalam bahasa apa pun akan memperkuat pemahaman Anda tentang Generasi Prosedural.

Adapun kode 'serius' atau non-game, teknik pembuatan prosedural telah digunakan untuk:

  • mensimulasikan pertumbuhan kota untuk merencanakan manajemen lalu lintas
  • untuk mensimulasikan pertumbuhan pembuluh darah
  • SpeedTree digunakan dalam film dan presentasi arsitektur

Perlin Noise ini sangat mirip dengan filter "cloud" Photoshop.
doubleOrt

Tautan pertama terputus
Jean Carlo Machado

Beberapa musik Electro menggunakan generasi prosedural yang akan dibuat
Poyda

50

Wiki Pembuatan Konten Prosedural:

http://pcg.wikidot.com/

jika yang Anda inginkan tidak ada di sana, maka tambahkan;)


11
Saya tidak dapat menyalin seluruh wiki di sini! Tidak ada 'bagian penting'.
Martin

12

Pembuatan konten prosedural sekarang semuanya ditulis untuk GPU, jadi Anda harus tahu bahasa shader. Itu berarti GLSL atau HLSL. Ini adalah bahasa yang terkait dengan OpenGL dan DirectX masing-masing.

Sementara preferensi pribadi saya adalah untuk Dx11 / HLSL karena kecepatan, kurva belajar yang lebih mudah dan Frank D Luna , OpenGL didukung pada lebih banyak platform.

Anda juga harus memeriksa WebGL jika Anda ingin langsung menulis shader tanpa harus menghabiskan waktu (yang cukup) untuk menyiapkan mesin game OpenGL / DirectX.

Konten prosedural dimulai dengan noise.

Jadi, Anda perlu belajar tentang Perlin noise (dan penggantinya Simplex noise ).

Shadertoy adalah referensi luar biasa untuk belajar tentang pemrograman shader. Saya akan merekomendasikan Anda datang ke sana setelah Anda memberi kode shader pergi sendiri, karena kode tidak ada untuk mual secara matematis, tapi itulah cara konten prosedural dilakukan.

Shadertoy diciptakan oleh seorang jenius prosedural, Inigo Quilez , produk dari adegan demo yang bekerja di Pixar. Dia memiliki beberapa video youtube ( contoh yang bagus ) dari sesi coding langsung dan saya juga bisa merekomendasikan ini.


17
Apa maksud Anda "pembuatan konten prosedural sekarang semuanya ditulis untuk GPU"? Anda hanya berbicara tentang hal-hal seperti bilah rumput? Anda tidak bermaksud membuat peta atau kota untuk permainan, misalnya, bukan?
Dronz

2
Ya, saya pikir komentar "semua" di sini adalah generalisasi berlebihan, tetapi di bidang generasi lanskap (yang saya kira adalah jenis yang paling umum), ini adalah jawaban yang bermanfaat. Meskipun saya tidak bisa membayangkan siapa yang ingin menonton seseorang mengetik kode dalam video.
Nate CK

1
Seseorang yang ingin belajar cara menulis kode yang rumit, seperti shader, atau belajar bagaimana memanfaatkan pola yang rumit dalam desain mereka. Dan itu hanya menggaruk permukaan.
Ultroman the Tacoman

"Pembuatan konten prosedural sekarang semuanya ditulis untuk GPU, jadi Anda harus tahu bahasa shader." tidak benar dan 100% menyesatkan. (Saya membuat proyek pembuatan prosedural yang sederhana, saya menulis 0 baris kode shader dalam hidup saya)
mengurangi aktivitas


8

Saya bukan ahli dalam hal ini, tetapi saya dapat mencoba dan berkontribusi beberapa jawaban:

  1. NetHack dan brethern adalah open source dan sangat bergantung pada generasi prosedural tingkat (peta). Tautkan ke unduhannya. Jika Anda lebih tertarik pada lanskap / tekstur / generasi cloud, saya sarankan Anda mencari Gamasutra dan GameDev yang memiliki beberapa artikel tentang subjek tersebut.

  2. AFAIK Saya tidak berpikir ada banyak perbedaan antar bahasa. Sebagian besar kode yang Anda lihat adalah dalam C / CPP karena itu masih merupakan bahasa resmi Pengembang Game, tetapi Anda dapat menggunakan apa pun yang Anda inginkan ...

  3. Yah itu tergantung jika Anda memiliki proyek yang dapat memanfaatkan teknologi tersebut. Saya melihat generasi prosedural yang digunakan dalam simulator untuk tentara (yang dapat dianggap permainan, meskipun mereka tidak terlalu bisa dimainkan :)).

Dan sebuah catatan kecil - definisi saya jika pembuatan prosedural adalah sesuatu yang menghasilkan banyak data dari sejumlah kecil aturan atau pola dan banyak keacakan, hasil Anda mungkin bervariasi :)


8

Ada buku bagus tentang topik ini:

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

Itu bias terhadap efek visual non-real-time dan generasi animasi, tetapi teori dan ide-ide dapat digunakan di luar bidang ini, saya kira.

Mungkin juga layak untuk disebutkan bahwa ada paket perangkat lunak profesional yang mengimplementasikan alur kerja prosedural lengkap yang disebut Houdini dari SideFX. Anda dapat menggunakannya untuk menemukan dan membuat prototipe solusi prosedural untuk masalah, yang nantinya dapat Anda terjemahkan ke kode.

Meskipun ini paket yang agak mahal, ia memiliki lisensi evaluasi gratis, yang dapat digunakan sebagai alat pendidikan dan / atau teknik yang sangat bagus.


7

Generasi prosedural banyak digunakan dalam demoscene untuk membuat grafik yang kompleks dalam eksekusi kecil. Will Wright bahkan mengatakan bahwa dia terinspirasi oleh demoscene saat membuat Spore. Itu mungkin tempat terbaik Anda untuk memulai.

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


3

yang paling penting adalah menganalisis bagaimana jalan, kota, blok, dan bangunan disusun. cari tahu apa kesamaan semua gedung misalnya. lihat foto, peta, rencana dan kenyataan. jika Anda melakukan itu, Anda akan selangkah lebih maju dari orang-orang yang menganggap pembangunan kota hanya sebagai masalah teknologi komputer.

selanjutnya Anda harus mengembangkan solusi tentang cara membuat geometri itu dalam langkah-langkah kecil yang berbeda. Anda harus mendefinisikan aturan yang membentuk kota yang dapat dipercaya. jika Anda menyukai pemodelan 3d, Anda harus memikirkan kembali banyak hal yang telah Anda pelajari sehingga komputer dapat mengikuti instruksi Anda dalam situasi apa pun.

Agar tidak kehilangan jalur, Anda harus mengatur banyak operator yang hanya bertanggung jawab atas bagian kecil dari keseluruhan proses. yang membuat proses debug, memperluas dan meningkatkan sistem Anda menjadi lebih mudah. pada langkah selanjutnya Anda harus menautkan operator tersebut dan memeriksa hasilnya dengan mengubah parameter.

Saya telah melihat terlalu banyak "generator kota" yang terutama terdiri dari kotak-kotak berbentuk acak dengan beberapa tekstur jendela pada mereka: (


3

(Lebih dari 10 tahun kemudian ...)

Generasi prosedural hanya berarti bahwa kode digunakan untuk menghasilkan data alih-alih dibuat sendiri. Misalnya jika Anda ingin menghasilkan hutan dengan berbagai pohon, Anda tidak akan merancang setiap pohon dengan tangan , sehingga pengkodean lebih efisien untuk menghasilkan variasi. Bisa jadi generasi pohon grafis, ukuran, struktur, penempatan ...

Secara umum ada beberapa jenis interaksi dengan beberapa aturan , selain itu Anda dapat menambahkan beberapa keacakan dan logika Anda sendiri, menggabungkan semua teknik ini ... Apa pun yang agak kacau tetapi tidak terlalu kacau dapat menghasilkan hasil yang menarik.

Berikut adalah beberapa teknik penting:

Beberapa game terkenal dengan generasi prosedural mereka:

Video tutorial tentang Pembuatan Landmass Prosedural .

Konferensi tentang pembuatan konten prosedural untuk permainan, memiliki banyak video tentang topik: semuanya prosedural

Selamat bersenang-senang.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.