Level Generasi Acak / Prosedural vs. Yang Dibuat Sebelumnya

31

Apa kelebihan / kekurangan menggunakan generasi acak / prosedural vs. tingkat yang dibuat sebelumnya?

Tampaknya ada beberapa yang dapat saya pikirkan, selain fakta bahwa item mungkin menjadi masalah untuk didistribusikan di medan yang dibuat secara acak, dan bahwa medan yang dihasilkan mungkin terlihat aneh.

Kelemahan dari level yang dibuat sebelumnya adalah saya perlu membuat editor level. Saya tidak bisa memutuskan mana yang lebih baik untuk digunakan.

Bisakah jawaban mencakup kode / contoh generasi prosedural dan premade, serta pro / kontra?

Pip
sumber

Jawaban:

26

Untuk menjawab sebentar pertanyaan utama Anda terlebih dahulu, keuntungan utama dari dunia game yang dihasilkan secara prosedural adalah:

  • Dunia bisa sangat besar , jauh lebih besar daripada dunia game yang dirancang secara manual.

  • Dunia (atau setidaknya sebagian darinya) dapat dibuat ulang untuk setiap game, yang berpotensi meningkatkan nilai replay, karena pemain akan selalu memiliki sesuatu yang baru untuk ditemukan.

Sebaliknya, kelemahan utama dari generasi prosedural adalah:

  • Tergantung pada metode generasi yang digunakan, mungkin sulit untuk memastikan bahwa dunia selalu dapat dimainkan, yaitu bahwa pemain tidak dapat terjebak dengan tidak ada cara untuk melanjutkan hanya karena mereka tidak beruntung dengan generasi dunia.

  • Bahkan jika Anda dapat menghindari menghasilkan dunia yang benar-benar tidak dapat dimainkan, generasi dunia acak dapat menyebabkan tingkat kesulitan yang sangat bervariasi: kadang-kadang, pemain mungkin menemukan semua yang mereka butuhkan hanya berbaris dengan nyaman untuk diambil, kadang-kadang mereka bisa berjalan lama tanpa menemukan sesuatu yang berguna .

    Selama periode yang lama, fluktuasi acak seperti itu cenderung keluar rata-rata, tetapi jika kesulitan gim misalnya berat di depan (khas untuk gim bertahan hidup), permulaan yang buruk dapat merusak gim sementara permulaan yang sangat beruntung bisa merampoknya dari semua tantangan.

  • Generasi prosedural yang dilakukan dengan buruk dapat membuat dunia terasa monoton dan membosankan: setelah Anda melihat selusin labirin yang dibuat secara acak, mereka semua mulai terlihat sama, bahkan jika mereka berbeda dalam detail.

  • Juga, jika dunia game sepenuhnya dibuat ulang untuk setiap game, tidak akan ada lokasi atau fitur tetap yang bisa dikenali pemain dari game sebelumnya. Kurangnya keakraban seperti itu dapat membuat pemain lebih sulit untuk terlibat dengan permainan pada tingkat emosional, atau untuk berbagi pengalaman dengan pemain lain.

Ada juga satu hal yang dapat Anda hitung di kedua daftar: dalam permainan di mana dunia dibuat secara acak untuk setiap permainan, tidak ada yang namanya panduan "langkah-langkah", karena setiap permainan akan berbeda.

(Unrepeatability ini juga bisa menjadi masalah untuk pengujian dan debugging, meskipun dapat setidaknya sebagian dihindari dengan membiarkan benih RNG ditentukan, setidaknya dalam mode debug, dan / atau dengan memberikan perintah "cheat" yang dapat digunakan untuk bermain maju cepat ke berbagai tahap.)


Namun, jika Anda melihat daftar kerugian, Anda akan melihat bahwa sebagian besar menggambarkan kerugian dari generasi prosedural murni ; banyak dari mereka dapat dihindari dengan mencampurkan konten yang dihasilkan secara manual dan prosedural .

Sebagai contoh, pemain selalu dapat memulai di kota yang tetap, yang dirancang secara manual, mungkin dikelilingi oleh wilayah rumah yang lebih atau kurang tetap, tetapi tempat-tempat yang lebih jauh dari kota dapat dihasilkan secara acak untuk selalu menyediakan daerah asing bagi pemain untuk dijelajahi.

Mungkin juga ada kota-kota lain yang dirancang secara manual atau lokasi lain yang ditempatkan (kurang lebih) secara acak di dunia, sehingga pemain harus menemukan mereka, tetapi akan tahu apa yang diharapkan setelah mereka sampai di sana. Sebaliknya, fitur yang menonjol seperti gunung dapat ditempatkan secara manual (setidaknya di sekitar lokasi awal yang ditetapkan), tetapi detail medan mereka dapat diacak.

Adapun penempatan acak menyebabkan kebuntuan dan variasi kesulitan, yang dapat diatasi dengan menerapkan berbagai pemeriksaan konsistensi dan keseimbangan di atas algoritma generasi dunia prosedural Anda. Misalnya, jika pemain membutuhkan item tertentu untuk dapat menyeberang air, Anda dapat memasukkan beberapa kode untuk memastikan bahwa setidaknya satu item tersebut ditempatkan sehingga pemain dapat meraihnya tanpa melewati air.

Demikian pula, Anda mungkin juga ingin mengubah aturan penempatan item Anda sehingga tidak ada tongkat kehebatan keseimbangan ditempatkan sebelum pemain mencapai level x , dan mungkin untuk memastikan bahwa setidaknya satu ditempatkan di lokasi tetap di mana pemain dapat mencapai itu sebelum sampai ke tahap di mana mereka akan membutuhkannya untuk bertahan hidup.


Ngomong-ngomong, cara umum untuk membuat mesh konten prosedural dan yang dihasilkan secara manual lebih atau kurang mulus adalah memulai proses pembuatan manual dengan menggunakan generator dunia prosedural (mungkin disesuaikan dengan semestinya, misalnya untuk menghasilkan desa atau puncak gunung di mana Anda menginginkannya) ) untuk menginisialisasi wilayah yang Anda rancang, dan kemudian secara manual mengubah itu untuk menambah dan menyesuaikan detail yang Anda inginkan. (Ini juga dapat memungkinkan penyimpanan tingkat yang sangat kompak, dengan hanya menyimpan perubahan manual dan seed generator dan parameter yang digunakan.)

Cara lain untuk menggabungkan konten manual dan prosedural termasuk meninggalkan tempat kosong di level yang dirancang secara manual, untuk diisi dengan konten acak (misalnya kastil dapat menyertakan labirin yang dibuat secara acak di ruang bawah tanah, dengan hanya garis luar dan jalan keluar yang diperbaiki), atau desain manual hanya dapat menentukan garis besar yang luas dari beberapa bagian level (misalnya penempatan rumah di kota) dan meninggalkan detailnya (seperti penampilan persis setiap rumah) untuk dipilih secara acak.

Bahkan, bahkan banyak game yang sepenuhnya memperbaiki dunia game menggunakan beberapa bentuk generasi prosedural sebagai bagian dari proses desain levelnya, karena ada beberapa aspek generasi dunia (seperti menghasilkan medan yang tampak alami, atau menempatkan pohon individu di hutan) yang sulit dan / atau membosankan untuk dilakukan dengan tangan, tetapi relatif mudah untuk diotomatisasi.

Sebaliknya, kebanyakan generator dunia prosedural akan menggunakan setidaknya beberapa objek dan elemen yang dirancang secara manual untuk membangun dunia. Seseorang bahkan dapat dengan mudah memiliki beberapa tingkat pembuatan acak / manual bersarang: misalnya, dunia yang dihasilkan secara prosedural dapat mencakup kota yang dihasilkan secara manual dikelilingi oleh kayu yang dihasilkan secara prosedural dengan garis besar yang digambar secara manual, dengan pohon yang dihasilkan secara prosedural dengan bantalan daun yang dirancang secara manual.


Perhatikan juga bahwa pembuatan konten prosedural tidak selalu tidak kompatibel dengan dunia yang tetap: Anda bisa memilih seed RNG yang telah diperbaiki dan menggunakannya untuk menghasilkan dunia Anda. Ini bisa berguna jika Anda ingin dunia yang besar untuk dijelajahi para pemain, tetapi ingin tetap sama untuk setiap permainan dan setiap pemain.

Perhatikan bahwa, jika Anda melakukan ini (atau mungkin bahkan jika tidak), Anda benar-benar harus mendesain generator dunia Anda untuk bekerja secara hierarkis, menggunakan beberapa instance RNG, sehingga misalnya generator peta keseluruhan akan menyimpan instance RNG tunggal. yang akan digunakan untuk menghasilkan subregional, menetapkan nilai seed berbeda untuk masing-masing subregion yang kemudian digunakan generator region untuk menabur instance RNG terpisah yang akan digunakan untuk menghasilkan subregion, dan seterusnya. Ini untuk menghindari "efek kupu-kupu", di mana mengubah bahkan detail terkecil dari bagian terkecil peta dapat membuat RNG tidak sinkron dan menyebabkan semua hal lain di dunia menjadi sangat berbeda.

Cara penting lain untuk menghindari efek kupu-kupu, terutama jika Anda menghasilkan dunia "dengan cepat" saat pemain menjelajahinya, adalah dengan menghindari RNG normal sepenuhnya (kecuali untuk proses yang terjadi "secara instan" dari sudut pandang pemain, seperti menghasilkan tingkat baru ketika pemain memasukinya) dan alih-alih menggunakan metode pembuatan angka acak yang tidak menyimpan keadaan internal apa pun. Misalnya, ketika memilih benih untuk subregion yang akan dimasukkan pemain, generator dunia keseluruhan dapat mengambil koordinat subregion (dan keseluruhan benihnya sendiri) dan memberi mereka makan untuk fungsi hash untuk menghasilkan benih subregion. Dengan begitu, setiap wilayah akan selalu terlihat sama, terlepas dari urutan pemain memasukkannya.


Ps. Setelah semua penyimpangan itu, izinkan saya secara singkat menjawab pertanyaan terakhir Anda tentang kode aktual yang digunakan untuk pembuatan prosedural. Sayangnya, saya tidak berpikir itu benar-benar dapat dijawab dalam arti yang berarti tanpa lebih banyak detail daripada yang Anda berikan, karena secara harfiah ada banyak cara berbeda untuk melakukan generasi dunia prosedural seperti halnya ada permainan yang menggunakannya.

Sebagai contoh, kakek buyut dari semua game eksplorasi yang dihasilkan secara prosedural mungkin adalah Rogue , yang algoritme pembangkitan levelnya hanya terdiri dari menempatkan secara acak sekelompok ruang persegi panjang di dalam tingkat persegi panjang yang lebih besar, dan menghubungkan kamar-kamar tersebut dengan lorong (dan menempatkan tangga ke level selanjutnya di salah satunya). Penggantinya yang beraneka ragam , dari Nethack ke seri Diablo , telah menguraikan sistem ini dalam banyak cara, tetapi sebagian besar tetap mempertahankan gagasan dasar tingkat berbeda yang terdiri dari kamar, ruang bawah tanah, dan labirin yang kurang lebih secara acak ditempatkan pada peta kotak.

Sebaliknya, untuk gim yang menampilkan pengaturan terbuka di luar ruangan, Anda mungkin ingin memulai dengan semacam algoritma pembangkitan medan fraktal dan membangun fitur lain (sungai, hutan, kota, dll.) Di atas itu. Atau Anda bisa melakukan sesuatu seperti apa yang dilakukan Minecraft , dan menghasilkan tekstur prosedural 3D acak yang menentukan bagian mana dari lanskap Anda masing-masing tanah dan udara (diskalakan dan bias sehingga blok bawah lebih cenderung menjadi tanah), dan kemudian overlay fitur seperti air , tanah / batu, vegetasi, dll. di atasnya.

Tentu saja, tidak satu pun di atas berlaku jika Anda, katakanlah, menulis permainan eksplorasi ruang angkasa , dalam hal ini Anda hanya perlu menghasilkan banyak sistem bintang yang ditempatkan secara acak sesuai dengan beberapa fungsi kerapatan, dan kemudian menghasilkan secara acak mengatur bintang dan planet di masing-masing. Atau mungkin Anda mengatur pemain untuk menjelajahi lanskap non-Euclidean , dalam hal ini Anda akan menghadapi serangkaian tantangan yang sama sekali berbeda (seperti kenyataan bahwa volume dalam radius yang diberikan tumbuh secara eksponensial daripada secara polinomi, membuatnya menjadi sangat sulit untuk menyimpan peta besar di memori).

Ilmari Karonen
sumber
7

Keuntungan Generasi Prosedural

  1. Dapat dengan mudah mengatur skala peta / desain Anda ke ukuran yang benar-benar besar, jauh lebih besar dari yang Anda bisa buat dengan tangan.

  2. Dengan membuat sistem tempat potongan medan dibuat dengan cepat, Anda dapat menghindari keharusan menulis potongan kode untuk memuat potongan dari memori permanen.

  3. Dalam jangka panjang, Anda mungkin dapat menemukan level yang lebih layak menggunakan desain prosedural daripada dengan mengedit peta manual.

  4. Untuk permainan 'penjelajah' Anda, Anda dapat menghasilkan banyak lusinan, ratusan atau bahkan ribuan level yang berbeda satu sama lain yang membuat pemain tidak bosan.

Kerugian Generasi Prosedural

  1. Membutuhkan banyak pekerjaan untuk memastikan bahwa medan yang dihasilkan terlihat 'bagaimana Anda menginginkannya'.

  2. Membuat 'level pengujian' menjadi hal yang sulit.

  3. Penempatan item dan hal-hal lain seperti itu, seperti yang Anda sebutkan, harus dilakukan dengan hati-hati, meskipun untuk permainan penjelajah top-down, ini mungkin tidak akan terlalu menjadi masalah daripada yang Anda pikirkan.

  4. Kecuali pengujian ekstensif dilakukan, Anda mungkin mendapatkan skenario di mana gameplay Anda rusak sepenuhnya dengan level prosedural tertentu, lebih dari itu jika Anda membuat level dengan tangan.

  5. Untuk medan yang benar-benar kompleks, Anda mungkin menghabiskan lebih banyak waktu untuk memperbaiki bug dan pekerjaan desain maka Anda akan menghabiskan waktu untuk membuat alat desain peta dasar dan pemuat file.

Keuntungan Desain Manual

  1. Perancang game bisa lebih yakin bahwa gameplay berfungsi sebagaimana mestinya dalam konteks setiap level.

  2. Dimungkinkan untuk membuat dan menempatkan 'detail halus' dengan lebih mudah daripada yang Anda dapat dengan pembuatan prosedural.

  3. Beberapa fitur medan sangat sulit untuk diproduksi secara prosedural, seperti air yang mengalir turun gunung. Melakukan hal itu akan memerlukan evaluasi yang sangat teliti terhadap peta ketinggian yang mungkin sulit untuk dirancang.

  4. Lebih mudah untuk memandu pemain di sepanjang 'jalur linier', meskipun seperti yang Anda katakan Anda sedang membangun permainan 'penjelajah', ini mungkin tidak begitu relevan.

Kekurangan Desain Manual

  1. Menerapkan perubahan luas ke medan Anda akan memakan waktu, sedangkan dengan generasi prosedural, hanya modifikasi beberapa nilai akan menghasilkan medan yang sama sekali berbeda.

  2. Anda harus menyimpan setiap peta dalam memori, yang mungkin dapat diterima untuk level kecil, tetapi untuk level yang lebih besar, pembuatan prosedural mungkin satu-satunya pilihan Anda. Meningkatkan persyaratan pemasangan memori permanen untuk gim Anda.

  3. Mungkin memerlukan pembangunan editor peta dan sistem pemuatan file.

Saya akhirnya daftar lebih banyak kerugian untuk pembuatan konten prosedural, meskipun ini mungkin karena proyek saya sepenuhnya prosedural jadi saya tahu perangkapnya. Untuk permainan penjelajah, saya akan menyarankan Anda untuk mempertimbangkan seberapa besar Anda ingin setiap peta menjadi dan apakah membuat alat pengeditan peta yang terpisah adalah sesuatu yang Anda bersedia lakukan.

parar
sumber
dapatkah Anda (tidak di sini, tetapi di suatu tempat) menunjukkan kode untuk pembuatan prosedural Anda? Saya tidak akan menggunakannya, tetapi saya belum pernah mencoba membuat peta saya secara prosedural sebelumnya. (Itulah sebabnya saya mengajukan pertanyaan ini: P), Juga, saya membatalkan jawaban Anda, tetapi semacam menginginkan pendapat orang lain, jadi saya mungkin tidak langsung menerimanya
Pip