Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

28
come sfruttare la Procedural Content Generation (e quanto è divertente) by Michele Pirovano Bologna, 11 Maggio 2014

Transcript of Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

Page 1: Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

come sfruttare laProcedural Content Generation

(e quanto è divertente)

by Michele Pirovano

Bologna, 11 Maggio 2014

Page 2: Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

Chi sono io

Page 3: Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

Scaletta• Generazione di Contenuti Procedurali– Cosa è– Qualche esempio– Perché usarla– Quando usarla– Come farla

• Il nostro esempio: – Daedalus Random Dungeon Generator– Come funziona– Qualche dritta– Come va sull’Unity Asset Store

Page 4: Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

Procedural Content Generation (PCG)• “La Generazione Procedurale di Contenuti è la

generazione programmatica di contenuti per videogiochi usando un processo casuale o pseudo-casuale che risulta in una gamma impredicibile di spazi di gioco.”

- da http://pcg.wikidot.com/

– Generazione Procedurale• Senza (o con limitato) intervento umano

– Di contenuti• Qualsiasi cosa possa essere considerata ‘contenuto’ di un gioco

– Processo casuale• Permette infinite variazioni

Page 5: Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

Ma funziona?

ROGUE

Page 6: Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

Ma funziona?

Elite

Page 7: Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

Ma funziona?

Dwarf fortress

Page 8: Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

Ma funziona?

Minecraft

Page 9: Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

Ma funziona?

Civilization V

Page 10: Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

Ma funziona?

Spore

Page 11: Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

Quali sono i vantaggi?• Si generano un gran numero di variazioni di un unico contenuto in

poco tempo– Potenzialmente infinite

• Creazione di contenuti dinamici– Off-line, dato un certo input– In tempo reale, adattandosi

al giocatore

• Pesa meno sulla memoria

• Può sorprendere

Page 12: Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

Quali sono gli svantaggi?• Per generare qualcosa di complesso, richiede un

algoritmo molto complesso• Per generare qualcosa, richiede una conoscenza

approfondita di quel qualcosa– Per fare un generatore di livelli, devi saper far bene i

livelli!• Se non si fa attenzione:– il 90% di ciò che si genera è inutile– Si riempie il codice di ‘casi speciali’– Si eliminano parti interessanti per via dei limiti imposti

Page 13: Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

Cosa si può generare?• Qualsiasi contenuto di un videogame– Mappe• Livelli• Dungeon• Terreni

– Suoni– Musica– Texture

Page 14: Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

Cosa si può generare? (e due)

– Modelli• Piante• Edifici• Animali

– Strategie dell’IA – Narrativa– Regole

– ???– Interi giochi

Page 15: Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

Quanto generare?• Compromesso tra– Tutto fatto a mano– Tutto generato da zero

• La cosa ‘migliore’:– Generare ciò che si può– Aggiungere a mano dettagli difficili da generare, o per cui un

algoritmo è difficile• Esempio:– Struttura dell’albero generata, foglie fatte a mano– Struttura di un dungeon generata, tiles fatti a mano

PCG A MANO

Page 16: Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

Come generare? (versione base)• Prendete un po’ di dadi

• Scegliete qualche regola• Generate!

Page 17: Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

Come generare? (versione seria)• Due metodi principali per generare– Search-based:

• Si generano diverse istanze di un contenuto, si valutano le istanze generate e si selezionano le migliori– Richiede tempi di computazione elevati– Permette di scovare delle istanze particolari, a cui il designer

dell’algoritmo non aveva pensato• Può essere interattivo

– Costruttivo:• Si genera direttamente ciò che si vuole ottenere con un

algoritmo ad-hoc– Richiede un algoritmo ‘a colpo sicuro’– Richiede di ‘giocare’ con i parametri di generazione

Page 18: Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

Qualche tecnica• Tecniche valide per entrambi i metodi (ricerca

o meno)– Vettori di parametri– L-systems– Simplex/perlin noise– Cellular automata– Frattali – Agent-based

Milano, 13 Gennaio 2014

Page 19: Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

Evoluzione!

Milano, 13 Gennaio 2014

Hastings 2012 - Evolving Content in the Galactic Arms Race Video Game

Page 20: Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

Il nostro esempio:Daedalus Random Dungeon Generator

Milano, 13 Gennaio 2014

daedalus.artskillz.net

Page 21: Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

Funzionalità• Mappe 2D e 3D• Completo di asset grafici• Decine di parametri per

gestire la generazione• Interfaccia intuitiva• Tiles direzionali, variazioni, etc.• Full source code

• New: Torri 3D (con scale)

Page 22: Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

Daedalus è…• Metà PCG. Metà no.– La struttura è generata, i tiles sono fatti a mano

• Costruttivo– Una mappa totalmente navigabile è sempre

generata• I tempi di generazione sono consistenti!

• Agent-based– L’algoritmo si basa su un agente virtuale che ‘scava’

• Pieno di casi speciali

Page 23: Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

Come funziona

Generatore

Interprete

Mappa ‘Fisica’

Mappa ‘Virtuale’

Parametri

Page 24: Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

Algoritmo di base (a grandi linee)• Recursive Backtracking (o simili)

• Considera una mappa piena di ‘rocce’• Parti da una cella a caso

1. Scegli una roccia adiacente2. Scava un tunnel3. Ripeti

Page 25: Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

Dove sta la difficoltà?

Milano, 13 Gennaio 2014

• Dove metto le stanze?– Scelgo delle aree grandi abbastanza, collegate al corridoio

• E le porte?– Tra le stanze e il corridoio

• Voglio le colonne nelle stanze? E nei corridoi?

• Dove metto l’inizio e la fine?

• Decine di casi specifici di cui tener conto!– Decine di euristiche!

Page 26: Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

L’importanza dell’interfaccia

Milano, 13 Gennaio 2014

• Scegliete parametri intuitivi

• Raggruppate parametri con funzionalità simili

• Pensate ad una modalità «one click»

Page 27: Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

Come va sull’Asset Store?• Versione Beta sottoposta all'approval nell’ultima settimana di Gennaio.• Review sullo store: 5 giorni• Prezzo di rilascio: $35 (sconto del 30% sull’ipotetico prezzo finale di $50)• Nella prima settimana di vita sull'AssetStore, Daedalus ha totalizzato 17 copie. • Campagna pubblicitaria non aggressiva: forum di Unity, social networks, thread

su vari forum• Nel mese di Febbraio: 31 copie vendute.

Secondo posto nella classifica Top Paid e Top Grossing dell'AssetStore (sezione Editor Add On).

• Da lì in poi, le vendite si sono assestate con circa una copia al giorno• Pubblicazione della versione completa nella prima settimana di Aprile • Prezzo aumentato a $70 (con aggiunta di features e asset)• Nuovo incremento delle vendite, spinte anche dalla nuova feature (generazione

multi-livello)• Ora siamo circa 90 copie vendute.

Page 28: Come sfruttare la Procedural Content Generation - Presentazione svilupparty 2014

Grazie per l’attenzione!

[email protected]

Qualche fonte utile:

http://pcg.wikidot.com/

http://www.gamasutra.com/view/news/181853/5_tips_for_using_procedurallygenerated_content_in_your_game.php

http://www.gamasutra.com/view/feature/174311/procedural_content_generation_.php

http://www.gamasutra.com/blogs/JayelindaSuridge/20130903/199457/Modelling_by_numbers_Part_One_A.php

http://games.ws.dei.polimi.it/wp-content/vdp/VDP2013-10-ProceduralContentGeneration.pdf

http://homes.di.unimi.it/pirovano