Dinamik va Statik protsessual avlodlar

Kirish: Bu ba'zi bir notinch voqealar #NotGDC 2017 uchun yozilgan bo'lib, GDC-ga kela olmagan o'yin ishlab chiquvchilar uchun noan'anaviy voqea. Qayta aloqa uchun xush kelibsiz.

So'nggi paytlarda meni protsessual avlodda dinamik yoki statik elementlardan foydalanish tushunchasi qiziqtirmoqda. Bu uzoq vaqt davomida muhokama qilingan-qilinmaganiga ishonchim komil emas, shuning uchun men ushbu maqolani yozishga qaror qildim va umid qilamanki, ba'zi fikrlarni bildiraman. Ushbu maqola protsessual avlod nima ekanligini bilasiz va Elite, Minecraft, Spelunky, Nethack va Dwarf Fortress kabi o'yinlarda ishlatilishi bilan tanishasiz.

Ta'riflar

O'yinni bajarish paytida yuzaga keladigan tarkibni generatsiyalash uchun dinamik avlodni aniqlashimiz mumkin. Masalan, Minecraft-da, dunyoning turli mintaqalari o'yinchini qamrab olgunga qadar yaratilmaydi.

O'z navbatida, statik avlod - bu o'yin boshlanishidan oldin yuzaga keladigan har qanday protsessual avlod. Keyinchalik ushbu avlodning mahsuloti ish vaqti davomida yuklanishi yoki kod yoki tizimga boshqa tarzda kiritilishi mumkin edi.

O'yinlardagi protsessual avlod atamasi odatda dinamik avlodni anglatadi, holbuki film va hikoyalardagi protsessual avlod (qarang NaNoGenMo) statikdir.

Avlodga bo'lgan ko'plab yondashuvlar ba'zi dinamik va ba'zi statik elementlarni o'z ichiga oladi. Masalan, Spelunky zindonlarni yaratish uchun oldindan qurilgan qismlarni dinamik ravishda tikadi. Yana bir misol, uning samaradorligini sezilarli darajada yaxshilaydigan statistik hisoblangan jadvalni o'z ichiga olgan Perlin Noise algoritmi. So'nggi misol Speedtree bu protsessual avlod usullaridan foydalangan holda statik daraxt kesmalarini yaratish uchun foydalaniladigan modellashtirish tizimidir.

Mening ushbu mavzuga bo'lgan asosiy qiziqishim ta'riflarga emas - men qanday qilib dizaynerlar qiziqarli va ajoyib dunyolarni yaratish uchun protsessual avlodning turli tomonlarini birlashtirishi bilan qiziqaman. Ushbu maqsadni yodda tutgan holda, butun o'yin olamining avlodini misol sifatida ishlatib, har bir yondashuvning ijobiy va salbiy tomonlarini ko'rib chiqaylik. (Ushbu fikrlar mutlaqo eksklyuziv emas va dinamik avloddagi ko'p tadqiqotlar ba'zi kamchiliklarni kamaytirdi. Masalan, hisoblash ijodi sohasidagi estetik tanlov bo'yicha tadqiqotlarni ko'rib chiqing.)

Dinamik avlod: Taroziga qarshi va Kamchiliklari

Keling, ishlaydigan vaqtda butun aholi yashaydigan dunyoni yarata oladigan tizimni yaratganimizni ko'rib chiqaylik. Buni dinamik ravishda amalga oshirishning ko'plab afzalliklari bor:

  • Cheksiz o'zgaruvchanlik ¹: Tizim hech qachon yaratilayotgan olamlardan chiqib ketmaydi;
  • Cheksiz hajmi ¹: Tizim abadiy davom etadigan dunyoni yaratishi mumkin;
  • Cheksiz tafsilotlar ¹: Tizim dunyoning barcha tomonlariga tobora ko'payib borayotgan tafsilotlarni qo'shishi mumkin;
  • Tez bo'lishi mumkin: dangasa baholash bilan biz faqat o'yinchi ko'rgan narsalarni ishlab chiqarishimiz kerak, garchi amalda bu kamroq qiziq dunyoga olib keladi; va,
  • Pleyer / tizim kiritish usulidan foydalanishi mumkin: Tizim generatsiya protsedurasining bir qismi sifatida pleerning kirishlaridan (ularning nomi kabi) foydalanishi mumkin;

Dastlabki ikkita nuqta - o'yinlarda protsessual avlod uchun odatiy turtki. Dasturchi pleyerga cheksiz xilma-xil o'yinlarni va / yoki kashf etish uchun cheksiz kenglikni taklif qilish uchun tarkibni yaratishni tanlashi mumkin. Ishlayotgan vaqtda algoritmni amalga oshirib, o'yinchi tizimida dunyoni yaratish uchun to'liq erkinlik mavjud. Uchinchi nuqta, cheksiz tafsilotlar, o'yinlarda algoritmik to'qimalar tizimlarida ishlatilishidan tashqari, batafsil o'rganilmagan (qarang: Allegoritmik).

O'yinchining xulq-atvori va vaziyatdan avlodga kirish sifatida foydalanish qiziqarli va asosan o'rganilmagan avtoulovdir. Bitta misol, bitta o'yindagi o'yinchining harakatlarini keyingi o'yinlarida dunyo tarixini yaratish uchun ishlatishdir. Keyinchalik murakkab bir misol: o'yinchining e'tiborini nimaga qaratayotganini kuzatib boring, ular o'yin o'ynayotganlarida va qiziqish uyg'otadigan dunyoning yangi voqealari va jihatlarini bilib olishadi.

Dinamik protsessual avlod o'zining kamchiliklaridan xoli emas. Bu erda bir nechta:

  • Hisoblashning murakkabligi o'yinchiga ta'sir qiladi: yanada qiziqarli dunyoni yaratish uchun o'yinchi ko'proq kutishi kerak;
  • Chiqarishni cheklangan boshqarish: tizimga dizaynerni kiritish faqat algoritmni loyihalash bosqichida amalga oshirilishi mumkin;
  • Murakkab: algoritmning murakkabligi odatda ko'proq dizayn / niyat / ijod / hayajonni portlatadi; va,
  • Tilga bog'liq: algoritmlar odatda o'yin mexanizmi bilan bir xil tilda yozilishi kerak.

Statik avlod: ijobiy va salbiy tomonlar

Endi o'ylab topilgan dunyoni yaratadigan alternativani ko'rib chiqing. Bu bitta o'ta murakkab dunyo bilan o'yin bo'lishi mumkin yoki o'yin minglab olamlardan tasodifiy tanlanishi mumkin. Statik ravishda yaratiladigan tarkibning ba'zi tabiiy ustunliklari:

  • Eng yaxshi natijalarni tanlashingiz mumkin: Siz minglab olamlarni yaratishingiz va faqat qiziqarli narsalarni yuborishingiz mumkin;
  • Boshqa vositalar bilan birlashtirishi mumkin: Siz avlodni umumiy tarkibni yaratish jarayonining bir qismi sifatida ishlatishingiz mumkin;
  • Hisoblashning murakkabligi pleyerga ta'sir qilmaydi: imkon qadar imkon qadar ko'proq hisoblash manbalaridan foydalanishingiz mumkin (masalan, sayyoramizning murakkab tarixini taqlid qilish uchun superkompyuterlar guruhini yollashingiz mumkin); va,
  • Har qanday til / tizimdan foydalanishingiz mumkin: Sizda o'yin qurilgan tildan foydalanish cheklangan emas.

Birinchi nuqta dizayn yordamchisi sifatida protsessual avlodni o'z ichiga oladi - bu dizaynni taklif qiladi va biz o'zimizga yoqadiganlarini tanlaymiz. Keyingi dizaynlarni (estetik tanlov jarayonida) haydash uchun yoki Amazon Mechnical Turk (Dizayn maydoni) ni almashtirish uchun ushbu takliflarni tizimga qaytarishimiz mumkin.

Tarkibni yaratish jarayonida algoritmlarni birlashtirish kino va o'yinlarda odatiy amaliyotdir.

Hisoblash murakkabligi bo'yicha uchinchi nuqta hisoblash vaqtini hisoblash algoritmini ishlab chiqishi mumkin. Samaradorlik ustuvor emasligi sababli, endi tarkibingizni yaratishda munosib echimlarni topish uchun simulyatsiya (masalan, Karl Simsning ishi) va ehtimoliy algoritmlarni almashtirishingiz mumkin. Biz buni allaqachon o'yinlarda ko'rmoqdamiz, bu engil simulyatsiya bilan ta'minlangan yengil pishiriq, va menimcha, u protsessual usullarga nisbatan kuchliroq qo'llanilishi mumkin.

Oxirgi nuqta (sizning o'yin dvigatelingiz bilan bir xil til bilan cheklanmaslik) juda erkin bo'lishi mumkin. Masalan, ma'lumotlarni qayta ishlashda, ma'lumotni ishlab chiqarishda va mashinalarni o'qishda ishlatiladigan ko'plab tizimlar murakkab va ularni o'yin dvigateliga kiritish juda qiyin. Siz ushbu tizimlardan va boshqa ochiq manbali dasturlardan turli xil qiziqarli olamlarni yaratishda foydalanishingiz, so'ngra to'g'ridan-to'g'ri olamlarni sizning o'yiningiz bilan paketlashingiz mumkin.

Statik avlodning asosiy kamchiliklari talab qilinadigan ma'lumotlar miqdoriga asoslanadi:

  • Ma'lumot juda og'ir: Agar algoritmlar ish vaqtida mavjud bo'lmasa, oldindan yaratilgan olamlaringiz diskda juda ko'p joy talab qilishi mumkin;
  • Cheklangan miqdor bilan cheklangan: Siz faqat N olamlarini jo'natishingiz mumkin. Agar N sizning o'yinchilaringiz kutgan dunyo sonidan katta bo'lsa, unda bu muammo emas; Yakuniy tafsilotlar bilan cheklangan: Tafsilotlar miqdori ma'lumotlarga ta'sir qiladi, shuning uchun siz ham tabiiy ravishda uni cheklashga majbur bo'lasiz; va,
  • Dinamik hodisalarga javob bera olmayapsiz: Statik tarkib pleer kiritishiga javob bera olmaydi.

Cheksiz dunyo etarli emas

30 yil oldin Elit bilan o'yinlardan so'ng, hech kimning Osmoniga qadar bo'lmagan holda, protsessual avlod uzoq yo'l bosib o'tdi. Ushbu o'yinlar dinamik avloddan foydalanib, minimal miqdordagi ma'lumotlarga ega bo'lgan butun galaktika tarkibini taqdim etadi. Ammo cheksiz galaktika o'ziga jalb qiladi. Agar sizning galaktikangizda etarlicha yangilik bo'lmasa, hatto sizning o'yiningizda milliardlab olam bo'lsa ham, o'yinchi naqshlarni ko'radi va zerikishni boshlaydi.

Agar biz cheksiz tarkibni va'da qilmasak, dinamik avlodning foydalari pasayishni boshlaydi. Protsedura avlod - bu cheksiz tarkibni ishlab chiqarish uchun mashina, ammo bundan ham ko'proq bo'lishi mumkin. Misollar ko'p:

  • O'z o'yin dunyosingiz uchun murakkab va boy tarixni taqlid qilish uchun klasterdan foydalaning;
  • Statik ravishda dinamik ravishda tozalanadigan qo'pol darajalar to'plamini hosil qiling;
  • Algoritmlardan foydalanib, koinotingizdagi barcha mayda-chuyda ma'lumotlarni to'ldiring;
  • Bir-biriga dinamik ravishda yopishtirilgan tarkibni oldindan yarating; yoki,
  • O'zining darajalarini superkompyuterda yarating va keyin har kuni ushbu yangi dunyoni o'z o'yinchilariga tarqatadigan o'yin yarating.

Statik avlod - bu o'yinlarni ishlab chiqishda o'rganilmagan maydon, shuning uchun o'yinlar uning ko'p qirralarini o'z ichiga olganini ko'rishni istardim. Shunday qilib, keyingi loyihangizni ishlab chiqishda yuqoridagi fikrlarni ko'rib chiqing, chunki sizga protsessual avlodning dinamik shakli umuman kerak bo'lmasligi mumkin. Nimani o'ylab topganingizni menga ayting!

Izohlar:

  1. Cheksiz olam, o'lcham va tafsilotlar muqarrar ravishda hisoblash manbalari bilan bog'liqdir.

Muallif Bio: Salom, men Moonman nomli o'yin ustida ishlaydigan o'yin yaratuvchiman. Men protsessual avlod haqida ko'p o'ylayman. Men bilan @eigenbom-da suhbatlashing.