Reading Time: 7 minutes
Introduzione
Ciao a tutti
vi presento il titolo appena rilasciato dal mio team amatoriale, il team novasoft.
Il nome del gioco e’ Fantasy Racing.
E’ stato pubblicato Venerdi 17 2012, nel market android:
https://market.android.com/details?id=or…t.racegame
Tecnicamente il gioco e’ basato su di un framework che noi amiamo chiamare PATRIA 3D engine, totalmente proprietario e scritto in Ansi C puro. Il nome e’ dovuto al fatto che quando abbiamo iniziato a svilupparlo erano in corso i festeggiamenti per il 150 anniversario della nostra nazione. Ecco il motivo del nome PATRIA.
Alcuni cenni su PATRIA
Il motore in questione ha le seguenti caratteristiche (al momento, anche se in continua lavorazione):
– Supporta pienamente OpenGL ES 2.0
– E’ completamente compilabile in qualsiasi ambiente desktop (Windows, Mac e Linux) e mobile (IOS e Android)
– Supporta vari formati di immagini per il texturing
– Supporta shaders standard GLSL con un framework di caricamento e compilazione molto interessante tra cui l’embedding degli shaders stessi al fine di proteggerli da un eventuale intrusione nel package applicativo.
– Supporta caricamento di modelli da formato OBJ e da un formato proprietario .patria3D che viene ottenuto attraverso un tool di conversione proprietario
– Nel gioco fantasy racing si e’ implementato un map editor basato su fogli di calcolo cosi che chiunque potesse editarli (funzione non aperta al pubblico).
– Supporta il wrapping JNI per il supporto NDK
– Implementa un sistema di messaggi interno molto efficiente (per quanto possa esserlo un sistema di messaggi) al fine di rendere il motore pluggabile su diversi ambienti come Objective C e Java NDK, Linux, Windows o MAC
– Implementa un sistema molto basico di calcolo delle collisioni attraverso buonding boxes o multiple spheres per avere un approssimazione del volume del modello.
– Implementa vari effetti di esplosione particellare basati su CPU ed altri basati GPU su shaders nei casi piu tosti.
– Supporta l’integrazione con il WII mote per il testing su Desktop del prodotto
– Le funzioni matematiche del motore grafico come le manipolazioni di matrici e’ possibile delegarle a codice SIMD ARM NEON per ottimizzare drasticamente le prestazioni
– Implementa il picking di oggetti attraverso color picking con un framework di utilizzo semplicissimo a livello di programmazione.
– Implementa un algoritmo molto base e mal funzionate di ray casting per la selezione degli oggetti, al momento non usato
– Supporta merging delle meshes
– Supporta merging e batching automatico degli elementi statici dello scenario al fine di minimizzare le OpenGL Draw calls
– Supporta tecniche di color replacement e vertex manipulation sulle meshes caricate nell’engine
– Supporta cloning delle mesh
– Implementa un sistema di benchmarking interno per la valutazione delle prestazioni del motore come FPS, Draw per Frame, Triangles per Frame etc
– Supporta 3 livelli di dettaglio del motore al fine di rendere al meglio su diversi devices in base alla loro potenza. La scalabilita’ sarebbe possibile in modo dinamico anche se al momento non ho investito in materia.
Cenni sullo sviluppo
Ora, passando oltre gli aspetti puramente tecnici, vorrei riportarvi le mie esperienze in questa avventura da un punto di vista piu pratico.
Il nostro gruppo si e’ riunito un anno fa, per la precisione il 18 di Gennaio 2011.
Inizialmente era composto da 5 membri e non era stato composto per lo sviluppo di videogiochi ma per altre idee imprenditoriali. Dopo un pochino 2 membri hanno abbandonato un po per perdita di entusiasmo un po perche’ messi male nel loro assetto aziendale.
Siamo cosi rimasti in 3.
E’ composto da 2 programmatori (io e Bizio, spero si iscrivera’ presto) ed un modellatore 3D che si e’ anche occupato del level design (mio fratello).
In aggiunta, un mio ottimo amico si e’ prestato per le basi musicali del gioco (Grazie Max, spero ci sara’ un ritorno tangibile all’aiuto).
Il tutto e’ stato sviluppato di notte dopo orario di lavoro e durante i week ends in pure stile indie casalingo, ci manca solo il garage (in alternativa’ pero’ ho la cameretta di mio figlio dove programmo, tra winnie de poooh e macchinine).
Tutti e 3 i componenti del team hanno famiglia e figli (mio fratello ne ha 3 per darvi un idea).
L’avventura e’ nata ed e’ tuttora un tentativo di sondaggio del mercato piu che un tentativo imprenditoriale. Il modo in cui eventuali introiti saranno gestiti sono dettagli non rilevanti anche se non e’ stata la molla principale. Ringraziando la situazione non abbiamo problemi in tal senso.
Il framework 3D e’ stato interamente sviluppato da me partendo da fine Febbraio 2011 senza avere nessuna conoscenza di OpenGL o programmazione 3D in generale.
Avevo un ottimo background di programmazione di videogiochi di base che comincia circa 20 anni fa, ho scritto nella mia vita qualche milione di linee di codice in linguaggi di basso livello come C e ASM e sono appassionato da sempre di real time computing. Diciamo che questo e’ quello che mi ha aiutato di piu.
Il framework contiene al momento piu di 35.000 linee di codice C contando solo il motore e non il layer Java che sta sopra al momento.
Tutta la filiera produttiva e’ stata effettuata con SW free ed opensource come Eclipse, Valgrind (per il memory profiling), Blender, Inkscape, Gimp e tanti altri tools che ora non ricordo nemmeno piu di precisione.
Al momento il framework e’ solo agli albori per cui non offre ancora molte delle cose che vorremmo come antialiasing, postprocessing e altri effetti che sono nella do-queue.
Abbiamo intenzione ovviamente di migliorare PATRIA come tecnologia inserendo effetti grafici, migliorando le capacita’, le prestazioni e la programmabilita’. L’idea’ e’ quella di avere un framework the potremo utilizzare internamente per darci un buon engine, diverso dalla solita roba e che ci permetta di sviluppare le nostre idee in poco tempo.
Cosa e’ andato e cosa non e’ andato
Per quanto riguarda l’esperienza di implementazione stessa, posso dire quanto segue:
– Il non avere esperienza del mondo OpenGL e’ stato un problema marginale. Avevo gia una buona preparazione ai concetti base ed un ottima predisposizione matematica. Non avrei nemmeno osato diversamente.
– Il non avere esperienza di OpenGL e non conoscere nessuno che ne avesse mi ha costretto a fare tutto da solo. Ho investito tantissimo in libri come il red book, il blue book, l’orange book ed il gold book, Li ho letti e riletti 1000 volte fino alla nausea. E’ diventata la mia lettura preferita al bagno. Ho anche investito molto nei libri di GPU Gems, Game Gems e di matematica applicata al 3D.
– Il non avere esperienza di OpenGL mi ha causato mesi di ritardi, questo devo riconoscerlo. Questo perche’ inizialmente ho sviluppato in immediate mode, poi ho scoperto OpenGL ES 2.0 e le potenzialita’ degli shaders. Da li ho scoperto la necessita’ di gestione delle matrici in proprio e cosi via, ho cominciato a studiare le potenzialita’ di ottimizzazione del rendering, il batching e cosi viam si e’ aperto un mondo. Penso di avere buttato via tutto e rifatto tutto almeno 5 volte, almeno la componente di rendering del motore. Lo rifarei? Dalla A alla Z, e’ stata una esperienza incredibilmente eccitante. Non sarei riuscito a fare il tutto la notte dopo una giornata lavorativa molto impegnativa se non ci fosse stato l’amore in quello che facevo.
– Il supporto del mio ottimo amico bizio e’ stato tutto sulla componente Java. E’ stato fondamentale avere una persona che curasse l’aspetto mobile puro. Lui si e’ specializzato in tutto quello che non era game engine. Molto utile. Questo ha comunque comportato uno squilibrio molto gli effort di sviluppo verso il motore C ma questo era gia in programma e l’ho un pochino accusato.
– Tornando indietro riscriverei tutto come ho fatto, a prescindere dal risultato mi si e’ aperto un mondo di esperienze e sono sempre piu innamorato di questo mondo. Ho ampliato le mie conoscenze sul mondo della programmazione real time e mi sono fatto le ossa (tanto) sull’ambiente Eclipse che e’ usatissimo anche nel mio mondo principale.
– Ho imparato a dormire 4 ore per notte. Lo faccio ormai da 13 mesi, ho scoperto che e’ possibile ma con le dovute accortezze.
– Sono felice di non avere usato un engine gia fatto perche’ non mi avrebbe dato le stesse emozioni. Sto facendo questo per passione, i soldi non mi servono (non prendetela a male) ed i ricavati non andranno nelle mie tasche in quanto ho parecchi progetti non di lucro da portare avanti. Quello di cui sono felice e’ che il background acquisito in C, nel mondo GL e e nel mondo unix in generale e’ impagabile.
– L’imparare a modellare low poly e’ stato piuttosto difficile facendo le cose a livello amatoriale. Ancora non abbiamo raggiunto un livello buono in materia. Siamo fiduciosi che ci riusciremo, l’impegno c’e’.
– La mancanza di un grafico si e’ sentita. Abbiamo pero’ commissionato il lavoro del materiale del market, icona e campagna di promozione ad un illustratore molto bravo. Non saremmo mai riusciti da soli. Il costo e’ stato gestibile.
– Il concept del gioco non e’ ancora completamente quello che avevamo in testa anche se e’ completo. Non siamo riusciti a sviluppare il tutto in tempi decenti. Ci sara’ molta carne al fuoco aggiunta nei prossimi mesi (settimane spero). Il gioco e’ cmq giocabile ed a nostro avviso divertente con ben 15 livelli di gioco.
– L’effort e’ stato massacrante. Consiglio di non mettersi in queste avventure con una famiglia e figli se non si ha un ottima comprensione dal proprio partner. Non e’ stato un gioco da ragazzi, e’ stato un impegno serio.
– Sono molto soddisfatto di aver messo su un bel tech layer, spero di riuscire a riusare tutto come e’ nei miei programmi.
Costi
Tornando sul discorso prodotto, posso dire quanto segue:
– Abbiamo speso all’incirca 3.000 euro in tutto per:
– Devices di prova (il mondo Android ha bisogno di tanti devices per i testing)
– Libri
– Illustratore per la grafica del market e della campagna pubblicitaria.
– Campagna Pubblicitaria.
Ovviamente questa stima non considera il nostro tempo. Se dovessi calcolare il costo reale, ad esempio calcolando quanto guadagno l’ora per le ore che ci abbiamo lavorato sarebbe una cifra altissima, decine di volte di piu, meglio non pensarci (siamo in 3 dopotutto).
Modello di business
Il modello di business che abbiamo deciso di adottare e’ di seguito descritto.
Piattaforma Android (rilasciata oggi): Modello free + pubblicita’ da migrare ad un freemium puro. Per ora abbiamo tutto free ed i passaggi di advertisement basata su ADWHIRL. Nelle prossime settimane rilasceremo content a pagamento tra cui:
– Capitoli addizionali di gioco (0.99$ a capitolo)
– Rimozione AD (da quantificare)
– Pacchi di mappe aggiuntive (da verificare e quantificare)
Piattaforma IOS (da completare il porting): Modello a pagamento per tutto. Pensavamo a 0.79$. Se le cose su Android si dimostrano positive adotteremo il modello freemium anche la anche se vorrei prima consultarmi con gente che gia ha esperienza reale su quel mercato come ad esempio il sempre disponibile TheCrib.
Per ora i prezzi ed i tempi sono ancora da decidere quindi non prendeteli alla lettera.
Cosa ci aspettiamo
Una cosa sicuramente l’abbiamo gia ottenuta, abbiamo imparato tantissimo. Inoltre il non essersi esposti economicamente e socialmente a rischi ci permette di guardare la situazione con moltissima tranquillita’.
Le aspettative (o meglio speranze) ci sono, e ce ne sono moltissime nel nostro cuore. Essendo persone mature pero’ capiamo sia la situazione del mercato che la reale qualita’ del prodotto. Per questo capiamo benissimo che non ci arricchieremo con questo prodotto.
A noi basterebbe coprire le spese o creare le basi per sentirci appagati in questa avventura.
D’altro canto possiamo dire che noi ce l’abbiamo messa tutta. Siamo partiti un anno fa senza sapere nulla di Android e di OpenGL e ora stiamo con un prodotto nel market android basato su un framework 3D perfettamente funzionante e che regala emozioni mentre si gioca, diverte.
Certo, non sempre basta questo a fare un successo, vediamo casa succedera’, noi aspettiamo, ieri notte non abbiamo dormito ed oggi sara’ tutto il giorno dedicato al refresh del market android e delle statistiche di admob.
What is next?
Il porting ad Iphone e’ da completare, non credo cominceremo altri prodotti. Almeno per ora non ne abbiamo le forze e non possiamo stressare ulteriormente (senza introiti) le nostre famiglie.
Vedremo in base al risultato.
Grazie
Se siete arrivati fin qui, avete avuto molta pazienza.
Grazie di cuore a tutti.