Unity 3D vs Shiva: la mia esperienza

L’altro ieri ho deciso: ho acquistato la licenza di Unity Pro e di Unity Pro iOS. E’ stata una bella mazzata, visto che entrambe sono costate la bellezza di 2100 €, ma n’è valsa la pena!

L’anno scorso avevo acquistato la licenza di Stonetrip Shiva 3D, un game engine con ambiente di sviluppo integrato simile ad Unity ma con un prezzo nettamente inferiore. Shiva3D è un ottimo prodotto e ha dietro un team di sviluppo che implementa frequentemente nuove ed interessanti features. Rispetto ad Unity, con un unica licenza di Shiva è possibile realizzare giochi cross platform, e le piattaforme supportate sono più di quelle che supporta Unity, ma per il resto Unity è decisamente migliore e di seguito parlerò delle features principali (almeno quelle che ho provato fin’ora) per le quali penso che Unity sia migliore.

Uno dei motivi per cui inizialmente ho deciso di acquistare Unity è la compatibilità dell’editor con Mac OS X. Shiva attualmente è disponibile solo su Windows e ogni volta che dovevo lavorarci dovevo necessariamente usare il mio notebook con windows, o in alternativa usare una virtual machine su OS X (o bootcamp). Dover mettere le mani su Windows non è una cosa che amo particolarmente, e il fatto che Unity supporti nativamente Mac OS X (anzi, è stato prima sviluppato su Mac e in seguito su Windows) è stato uno dei primi motivi per cui si è scatenata in me la voglia di acquistarlo.

Un altro punto a favore per Unity sono gli script: oltre a poter scrivere gli script in tre linguaggi diversi (C#, Javascript e Boo), il sistema di scripting è molto potente: possiamo creare delle classi generiche e delle classi derivate che approfondiscono un comportamento generico (immaginate ad es. uno script generico per l’intelligenza artificiale che implementa le funzioni base per un movimento intelligente dei mob (nemici e non), e poi uno script derivato da questo costruito specificamente per i nemici).

Su Unity è inoltre possibile creare dei plugin che aggiungono nuove funzionalità, sia al motore che all’editor: per es. possiamo creare dei nuovi moduli che si integrano con l’editor, con tanto di interfaccia grafica, oppure possiamo creare dei plugin che aggiungono nuove funzionalità al motore e al sistema di script (ad esempio un plugin che ci permette di usare una libreria non supportata da Unity, per es. OpenFeint, attraverso il sistema di script di Unity).

Anche con Shiva è possibile creare degli script (altrimenti che game engine di sviluppo sarebbe?), ma le possibilità sono inferiori: il linguaggio di scripting (uno solo) è StoneScript, derivato da Lua, e non è possibile creare classi, comportamenti derivati da altri, ecc… Inoltre l’accesso alle variabili e ai metodi degli altri oggetti presenti nella scena è più difficoltoso, a differenza di Unity che rende il processo più semplice ed intuitivo. Anche Shiva (con la licenza Advanced) permette di creare dei plugin per implementare nuove funzionalità, ma attualmente non è possibile estendere l’editor creando dei nuovi moduli.

Su Unity, a differenza di Shiva, è anche possibile scriptare gli shader per i materiali e per gli effetti di post-produzione: in questo modo è possibile creare qualsiasi tipo di effetto e di materiale personalizzato attraverso appositi shaders che utilizzano i vertex shaders e i pixel shaders della pipeline programmabile disponibile ormai in tutte le schede video e in versione limitata nei dispositivi mobili di ultima generazione.

Oltre alle funzionalità “classiche” di un game engine, come il generatore / editor di terreni (che troviamo anche su Shiva, ma su quest’ultimo, almeno nella ver. 1.9.0.1 è un po’ buggato e lento, al punto che a volte diventa impossibile modificare un terreno dall’editor per la lentezza di aggiornamento della mesh), su Unity troviamo il Tree Generator: un interessantissimo generatore di alberi procedurali che permette appunto di creare da zero alberi di qualsiasi tipo, giocando con vari parametri messi a disposizione.

Tra le altre funzionalità interessanti di Unity troviamo i soft bodies: grazie al motore fisico nVidia PhysX usato è possibile, oltre a simulare il comportamento fisico dei corpi rigidi (rigid bodies), anche il comportamento di tessuti e vestiti (cloth simulation). Così potremmo creare ad esempio delle scene che contengono tende, bandiere, vestiti sui personaggi, o altri oggetti “morbidi” che reagiscono all’ambiente circostante secondo le leggi della fisica, in tempo reale. I soft bodies non sono attualmente disponibili su Shiva, ma è possibile implementarli manualmente accedendo ai singoli vertici delle mesh e associando dei rigid bodies collegati dagli opportuni joint.

Grazie all’implementazione del motore di Allegorithmic Substance, Unity permette di utilizzare le texture procedurali che possono essere prodotto dall’editor prodotto da Allegorithmic (che ahimè costa 900$), oppure attraverso altri programmi che generano texture procedurali compatibili con Allegorithmic Substance. In alternativa è possibile scaricare / acquistare le texture procedurali che troviamo disponibili sul web o sul sito di Allegorithmic.

Utilizzando le texture procedurali è possibile ridurre il peso delle applicazioni realizzate, visto che le texture procedurali non sono delle bitmap ma dei file che contengono solo le informazioni necessarie per ricostruire matematicamente una determinata texture. Inoltre con le texture procedurali è possibile ottenere degli effetti particolari ed è possibile variare l’aspetto delle texture applicate ai materiali in tempo reale e in modo procedurale. Un esempio: si può creare una texture procedurale che mette a disposizione un parametro che indica quanto quella determinata texture è “sporca”. Variando il parametro si può simulare un materiale più o meno sporco o impolverato, e questa variazione può essere fatta in tempo reale all’interno dell’applicazione.

Riguardo Shiva, StoneTrip aveva annunciato alcuni mesi fa che avrebbe implementato il medesimo motore per le texture procedurali anche sul suo game engine, ma ad oggi non ci sono ancora notizie.

Infine, ma non per ordine di importanza, troviamo l’Asset Store, un marketplace integrato con l’editor di Unity, che permette di acquistare assets “belli e pronti” per le nostre applicazioni e di importarli direttamente nell’editor. Nell’Asset Store troviamo asset di qualsiasi: modelli 3d, personaggi animati, ambientazioni, suoni, script, estensioni e plugin per l’editor, strumenti aggiuntivi per l’editor, template di giochi e piccoli giochi già pronti da usare come base o a scopo educativo, e quant’altro. Inoltre è possibile vendere i propri asset nell’Asset Store e guadagnare il 70% del prezzo di vendita.

Andiamo ai prezzi:

La versione base di Shiva costa 169€ e permette di creare giochi per tutte le piattaforme supportate (attualmente Windows, Mac, Linux, iPhone, iPad, Android, Palm WebOS e altre). La versione Advanced di Shiva costa 1499 € (durante il periodo natalizio di solito abbassano il prezzo del 50%) e permette tra le altre cose di: creare plugin, utilizzare il profiler, modificare più materiali in batch, e qualche altra cosa.

La versione base di Unity è gratuita ma non permette di pubblicare le applicazioni sui dispositivi mobili (iPhone e Android). Inoltre la versione base è limitata su alcuni aspetti, per es. non è possibile utilizzare alcuni tipi di effetti (riflessi per es.) e gli shader per il post-production. Inoltre è limitata anche sotto altri aspetti (batching dinamico assente per es.).

La versione Pro di Unity costa 1050 €, e permette di utilizzare tutte le features del motore, ma permette di pubblicare solo su Desktop (Windows e Mac) e su Web. Per pubblicare anche sui dispositivi mobili è necessario acquistare una licenza per ogni piattaforma (attualmente iOS e Android). Anche nel caso delle piattaforme mobile ci sono due tipi di licenza: la licenza base che costa 280€ ed è limitata sotto alcuni aspetti, e la licenza Pro senza limitazioni che costa 1050€ per ogni piattaforma. Per sviluppare un gioco per iPhone abbiamo ad esempio le seguenti scelte: Unity base (free) + Unity iOS Base (280€) = 280€, oppure Unity Pro (1050€) + Unity iOS Pro (1050€) = 2100€. Se vogliamo sviluppare anche per Android dovremo acquistare l’apposita licenza (base = 280€ o Pro = 1050€), e così via.

Concludendo, avendo avuto la possibilità di provare sia Shiva che Unity, mi sento di consigliare assolutamente quest’ultimo, anche se il costo della licenza (a meno che non vi “accontentate” delle versioni base) è decisamente più elevato. Unity è inoltre più diffuso e più conosciuto dalla community rispetto a Shiva, ed è quindi possibile trovare più supporto, tutorial, video tutorial (in alcuni casi anche in italiano) e libri (su amazon.it ce ne sono diversi).

11 pensieri su “Unity 3D vs Shiva: la mia esperienza

    1. admin Autore articolo

      Di nulla! Shiva come dicevo è anch’esso un ottimo prodotto, sopratutto considerando il prezzo. Ma se hai la possibilità di spendere di più ti consiglio vivamente Unity perchè è un OTTIMO investimento anche se le license Pro costano parecchio. Io mi sento molto più produttivo con quest’ultimo.

      Replica
  1. art

    Ciao e complimenti per l’articolo. Ho una domanda inerente la parte iOS. Se compri la versione base a 280 euro per poter provare un tuo prodotto devi per forza aderire al programma di apple (99$/anno) ?

    Sto cercando info ma non mi è chiaro.

    Art

    Replica
    1. admin Autore articolo

      Grazie! Sinceramente non ricordo cosa non si può fare senza essere iscritti al Developer Program di Apple, se non erro si possono provare le app nel simulatore da XCode, quindi in teoria potresti provarle lì (dico in teoria perchè io non sono mai riuscito a provare i progetti iOS esportati da Unity sul simulatore, ma solo sull’iPhone o iPad, ma credo sia solo una questione di configurazione). Per provarli invece su un device credo che ci voglia necessariamente l’abbonamento al developer program perchè bisogna creare ed installare un certificato con il quale firmare l’app. Non ho mai provato comunque, io ho comprato subito l’abbonamento 🙂

      Replica
      1. Art

        Si infatti, lo compro. Non e’ un costo oneroso e fino a che non la vedi girare sul device non sembra mai vera l’app/game.
        Grazie

        Art

        Replica
  2. enzo

    Ciao grazie per l’articolo.
    Volevo chiederti quale ide utilizzi su mac per scrivere in c# ed eventualmente integrarlo su Unity?
    Grazie ancora..

    Replica
    1. admin Autore articolo

      Ciao! Uso l’ide integrato di default su Unity che è MonoDevelop. Non ho mai provato con altri, probabilmente c’è una soluzione migliore ma con MonoDevelop fino ad ora non ho avuto problemi.

      Replica
  3. Raf

    Ciao Marco. Bell’articolo!
    Vorrei chiederti cosa ne pensi, in base alla tua esperienza, della dimensione dei giochi realizzati per iPhone con Unity e Shiva? Hai notato se con l’ultima versione di Unity si riescono a produrre giochi “leggeri” (diciamo sotto i 20 MB)? Shiva ti sembra migliore da questo punto di vista?
    Ciao e grazie!

    Replica
    1. admin Autore articolo

      Ciao Raffaele, grazie! Riguardo la dimensione non ho fatto test specifici su questo in quanto fino ad ora non ho avuto il tempo di dedicarmi a giochi completi ma ho fatto solo delle prove, quindi non mi sono preoccupato molto della dimensione. Ho fiducia che Unity3D “sa” quello che fa, ho visto che lo hanno usato in molti giochi famosi (tra cui Shadowgun che ha avuto un buon successo sia nell’app store che su android market), quindi mi aspetto che sia ben ottimizzato. Shiva non è male, ma tra i due Unity mi sembra quello più “professionale”.

      Prova a chiedere nel forum di Unity.

      Replica
  4. Samuele

    Ciao! 🙂

    Ottimo articolo, anche io ero tentato tra i due, ma soprattutto da Unity3D e questo articolo ha confermato le mie idee..
    Unity è ancora il migliore sulla piazza, riguardo la creazione di giochi su iOS ed Android?

    Replica
    1. admin Autore articolo

      Sì credo che Unity3D sia ancora il migliore, ovviamente non mettiamo nel calderone i game engine di punta come quello di Unreal, ecc… che sono un’altra storia (anche di prezzo!). Ma tra i motori di fascia media, se così si può dire, Unity3D è ancora il migliore.

      Replica

Rispondi