Home Videotutorials Videotutorial Blender GE (Game Engine) Le basi del Game Engine, il motore di gioco di Blender 3D 2.6 – Lezione 2; videotutorial con trascrizione

Page Rank Check    





Le basi del Game Engine, il motore di gioco di Blender 3D 2.6 – Lezione 2; videotutorial con trascrizione
Video Tutorials - Videotutorial Blender GE (Game Engine)
Scritto da RedBaron85   
Mercoledì 01 Febbraio 2012 11:34

Le basi del Game Engine, il motore di gioco di Blender 3D 2.6 – Lezione 2; videotutorial con trascrizione

In questo secondo tutorial del minicorso sulle basi del Game Engine, il motore di gioco di Blender 3D, parleremo ancora dell'aspetto degli oggetti e degli ambienti, trattando in particolare due argomenti: il Bake delle Textures e degli effetti (mostrando il Bake delle ombre e la loro mappatura sugli oggetti mediante UV Mapping) e l'utilizzo di Sprites o Textures animate a runtime.

Il tutorial è stato realizzato con la versione 2.61 di Blender 3D.

 

Informazioni traccia sottotitoli video youtube

Video sottotitolato

Per attivare i sottotitoli in questo video, aprire il menù in basso a destra nel Player YouTube e selezionare la casella "CC".

 

Ebook PRO

Cycles per

Cycles perBlender 3D 2.62 - 2.65

Ebook PRO di Francesco "RedBaron85" Milanese su "Cycles per Blender 3D"

 

Di seguito, la trascrizione del videotutorial

 

Salve a tutti, in questo secondo tutorial del minicorso sulle basi del Game Engine, il motore di gioco di Blender 3D, parleremo ancora dell'aspetto degli oggetti e degli ambienti, trattando in particolare due argomenti: il Bake delle Textures e degli effetti (mostrando il Bake delle ombre e la loro mappatura sugli oggetti mediante UV Mapping) e l'utilizzo di Sprites o Textures animate a runtime.

Il tutorial è stato realizzato con la versione 2.61 di Blender 3D.

 

 

Passiamo al motore Blender Game, il motore di gioco, con modalità di ombreggiatura GLSL, lasciando però Solid nelle 3D View.

Iniziamo la nostra puntata da lontano, in modo da vedere, strada facendo, quali imprevisti possono verificarsi nella realizzazione della scena... ho detto infatti che in questa puntata parleremo del bake delle Textures, per mostrare ad esempio come ottimizzare le ombre, e delle Textures animate, ma un tutorial riguardante solo questi argomenti sarebbe troppo isolato dal resto, mentre un buon corso mostra vari elementi collegati e qualche tips & tricks.

Ebbene, iniziamo posizionando la telecamera all'interno di un cubo che scaleremo a dovere in modo da rappresentare una stanza vista dall'interno. Al centro di questa stanza metteremo un semplice tavolino, da utilizzare per proiettare un'ombra da fissare sulla Texture del pavimento mediante Bake.

Per aggiungere il tavolino, iniziamo aggiungendo un cubo, restringiamolo e scaliamolo solo lungo l'asse Z, quello verticale, in modo da ottenere una gamba del tavolo; passiamo in Edit Mode, selezioniamo tutto e facciamo un paio di duplicazioni e spostamenti per posizionare le altre gambe del tavolino nello spazio.

Per chiudere il tavolino, aggiungendo sostanzialmente il piano vero e proprio, selezioniamo vertici o spigoli delle gambe del tavolo e realizziamo le facce di collegamento con F; realizzata una prima superficie chiusa, estrudiamola verso l'alto in modo da dare spessore al piano. Torniamo in Object Mode. In questo momento non ce ne rendiamo conto, ma la mesh appena realizzata ha un grosso difetto... ci torneremo tra poco, in questa stessa puntata.

Sopra il tavolino posizioniamo una fonte di luce Omni Light, la classica Lamp; dalla puntata precedente, sappiamo che questa luce non può proiettare ombre in tempo reale nella scena. Dal momento che il nostro personaggio non proietterà ombre sugli altri elementi presenti nella scena, useremo la Lamp a runtime, senza ombre in tempo reale, così da non appesantire l'esecuzione del gioco.

Per isolare la mesh del pavimento rispetto al resto del cubo, selezioniamo la faccia inferiore di quest'ultimo (in Edit Mode, modalità selezione facce) e premiamo P, confermando poi l'operazione di separazione dal menù che apparirà a video. Torniamo quindi in Object Mode e selezioniamo il pavimento.

Forniamo una Texture al pavimento selezionandolo, aggiungendo un Material di base e una Texture di tipo immagine.

Nella 3D View, passiamo alla modalità di visualizzazione Textured per vedere un'anteprima.

Qui sorge il problema presente, come anticipato, anche per il tavolino: le normali delle facce non sono impostate correttamente. Nel caso del pavimento, il motivo è che esso era in realtà parte di un cubo, dove ogni faccia aveva le normali verso l'esterno, mentre qui ci troviamo all'interno del cubo, per cui dobbiamo andare in Edit Mode e flippare le Normali, sia per il pavimento che per la mesh che, ora, rappresenta il resto della stanza, ossia pareti e soffitto.

Il problema del tavolino è simile ma la soluzione è diversa: in questo caso, selezioniamo l'oggetto, passiamo in Edit Mode, selezioniamo tutti i vertici, gli spigoli e le facce e facciamo ricalcolare a Blender le normali in maniera corretta con Recalculate. L'operazione viene svolta correttamente perché siamo partiti da un'unica mesh, duplicata e modellata in Edit Mode (non creando cioé oggetti distinti, da fondere in seguito) e realizzando una mesh chiusa, per cui Blender può individuare facilmente il dentro e il fuori... se partite da più oggetti distinti da fondere in uno solo, ricorrete a Boolean Union, non al semplice Join.

A questo punto vi anticipo una cosa: l'utilizzo di mappe Normal Maps, che useremo tra poco, non funziona correttamente se non si fornisce un Layer UV agli oggetti; per questo motivo, anche se il pavimento è un semplice plane, realizziamo l'UV Mapping. E' comunque un buon esercizio per cercare di abituarsi a ricorrere sempre e comunque all'UV Mapping, quando si realizzano giochi col Game Engine.

Implementiamo un UV Mapping elementare: va bene anche il semplice Unwrap, visto che c'è solo una faccia nell'oggetto; ricordiamoci, ovviamente, di cambiare la mappatura UV Layer nella sezione Mapping della Texture.

La Texture immagine è un po' piccola per il nostro pavimento, quindi eventualmente scaliamo la scucitura nella finestra UV – Editor delle immagini; conviene munirsi di Textures predisposte per il tiling, come questa, dove cioé la parte destra e la parte superiore dell'immagine si “agganciano” perfettamente alla parte sinistra e inferiore, rispettivamente, per cui affiancando più immagini (tiling, appunto) non notiamo punti di discontinuità nell'aspetto finale.

Ok, abbiamo impostato correttamente la Texture per definire l'aspetto del pavimento.
Di questa Texture ho a disposizione anche la versione Normal Map, per simulare dei piccoli rilievi o delle impurità nella superficie di un oggetto, in questo caso il pavimento, senza dover modificare la mesh.

Questo è un punto molto importante nella progettazione di un ambiente o di un personaggio per un videogioco: evitare mesh complesse, in quanto i calcoli per gestire le coordinate dei vertici degli oggetti vengono effettuati dalla CPU, che deve occuparsi anche dello stato generale del gioco, dell'interazione con l'utente, delle comunicazioni di rete, eccetera... ci sono calcoli che vengono effettuati invece dalla GPU, la scheda video, per cui – dove possibile – è buona norma “spostare il carico di lavoro” dalla CPU alla GPU.

Nel caso del pavimento del nostro scenario, lo sviluppatore poco esperto potrebbe pensare di realizzare i vari listelli del pavimento come mesh a parte, magari suddividendo e deformando le mesh con qualche modificatore, in modo da realizzare un pavimento davvero realistico... troppo realistico... inutilmente realistico!! Soprattutto, uno scenario complesso, che richiederà molti calcoli da parte della CPU, per un semplice pavimento!!

L'alternativa è aggiungere dettagli mediante le Textures sul canale Normal, anche perché questo effetto viene gestito senza complicare la mesh (infatti, fateci caso, stiamo utilizzando un plane con una sola faccia rettangolare, per il pavimento, niente suddivisioni o altro) e i calcoli vengono effettuati dalla GPU, non dal processore, rendendo l'esecuzione del gioco più fluida.

Aggiungiamo quindi una seconda Texture immagine al Material, caricando il file immagine della mappa di rilievo nel secondo slot delle Texture e cambiando Influence da Color Diffuse (che va disattivato) a Geometry Normal; va bene anche 1 come valore ma attenzione: dobbiamo selezionare anche la casella Normal Map nella sezione Image Mapping della Texture, per dire a Blender di utilizzare la Texture come mappa per i rilievi sulle Normali, appunto.

Attenzione: dobbiamo impostare la mappatura UV, con il layer UV creato automaticamente da Blender, anche per questa seconda Texture.

Le immagini delle Textures, quella per il colore e questa per le Normali, hanno la stessa risoluzione, quindi non c'è bisogno di effettuare scaling o altre operazioni per farle combaciare (se ricordate, abbiamo scalato la scucitura nel Layer UV per replicare la Texture in fase di UV Mapping).

Forniamo un Material di base al tavolino in modo da completare le operazioni preliminari prima di passare al primo dei due argomenti di questo tutorial: il Bake delle Textures.

In realtà il Bake può essere utilizzato per più scopi (ombre, Ambient Occlusion, Displace su Normals per mappare mesh High Poly su Low Poly, eccetera), in questa puntata vedremo quello delle ombre.

Torniamo a Blender Render e impostiamo Soft Size 2 e magari 8 o più Samples per la fonte di luce. Chiaramente, in realtime non abbiamo ombre, tantomeno sfumate. Lanciamo invece un rendering della scena con Blender Render: qui le ombre ci sono... e ci vanno pure bene.

Come fare per ottenere la Texture delle sole ombre da applicare al Plane?
Selezioniamo la mesh del pavimento, già unwrappata, e passiamo in Edit Mode, selezionando tutti i vertici, gli spigoli e le facce e visualizzando l'unwrap in una finestra UV – Editor delle immagini...

ALT: c'è un problema! Non possiamo effettuare il Bake ora perché l'unwrap visualizzato è quello scalato su una delle due Texture aperte prima (Color o Normal)...

Clicchiamo quindi su Image New per creare una nuova immagine con le impostazioni di default (1024 per 1024, nera).

Problema: l'unwrap di prima è ancora scalato ed è più grande dell'immagine.

Realizziamo quindi un secondo layer UV aggiungendone uno nella pila UV Maps nella scheda Object Data, nella Properties Window e selezioniamolo, cliccando in particolare sulla macchina fotografica a destra, per dire a Blender che ora stiamo usando questo Layer.

Rifacciamo l'unwrap della mesh sull'immagine nera: adesso l'unwrap, associato a questo secondo Layer UV, resterà dentro l'immagine nera.

E' giunto il momento di fare il Bake delle ombre: nella scheda Render, all'interno della Properties Window, apriamo la sezione Bake, scegliamo Shadows (ombre) e avviamo il Bake cliccando sul relativo pulsante.

A seconda dei casi, questa operazione richiederà poco o molto tempo... beh in questo caso poco perché la scena e la mesh sono molto semplici: nella finestra UV vedremo il disegno delle ombre presenti sull'oggetto pavimento in questo preciso momento.

Ecco cosa fa quindi il Bake: “fissa”, per così dire, l'aspetto di un oggetto in un dato momento su un'immagine 2D (ecco perché dobbiamo fare l'unwrap e, dopo, la mappatura UV); tale immagine potrà essere applicata all'oggetto per SIMULARE, quindi, certi effetti, in questo caso le ombre, senza implementarli davvero... è un trucco utilizzato per ottenere un certo effetto con pochi calcoli ed utilizzando quindi poche risorse.

Il rovescio della medaglia è che se sposteremo gli oggetti o le fonti di luce, le ombre non varieranno, in quanto in realtà si tratta di una Texture immagine precalcolata, non di vere e proprie ombre.

Vediamo comunque come applicare la Texture appena ottenuta per realizzare le ombre.

Per prima cosa, salviamo l'immagine ottenuta mediante Bake nella finestra UV Editor delle immagini come file immagine a parte, su disco.

Faccio presente che possiamo elaborare come vogliamo questo file immagine con un qualsiasi programma di fotoritocco, ad esempio sfumando o colorando le ombre, aggiungendo altri elementi, eccetera...

Passiamo alla scheda Texture del Material del pavimento, selezioniamo il terzo slot e aggiungiamo una nuova Texture immagine, caricando ovviamente l'immagine del Bake delle ombre.

Nella sezione Mapping, cambiamo le coordinate in UV e scegliamo il secondo Layer UV, quello creato appositamente per la Texture Bake.

In Influence, lasciamo selezionato Diffuse Color (in quanto vogliamo influenzare il colore dell'oggetto, in effetti) ma cambiamo la modalità di miscelazione in Multiply.

Come spiegato nei miei ebook su Texture e Compositing, l'effetto pratico di Multiply è quello di scurire gli oggetti nei punti corrispondenti a pixel grigi o neri della Texture e di lasciare il colore originale nei punti corrispondenti ai pixel bianchi; Multiply è infatti la moltiplicazione del colore sottostante per il valore numerico del pixel della Texture, che è 1 se è bianco (quindi ad esempio il rosso puro, moltiplicato per 1, restituirà il rosso puro), 0 per il nero (quindi il rosso puro, moltiplicato per 0, restituirà nero) e valori intermedi per i grigi (con l'effetto di scurire il rosso, nel nostro esempio).

Torniamo al Game Engine e avviamo il gioco con P: adesso, come potete vedere, c'è l'ombra del tavolino sul pavimento, anche se in effetti la nostra fonte di luce NON proietta ombre in tempo reale, cosa che possiamo vedere in due modi: osservando le gambe del tavolino, che non sono ombreggiate (e da qui uno spunto: fare il Bake delle ombre anche per il tavolino), oppure spostando il tavolino o la fonte di luce nella scena 3D in fase di modellazione ed avviando nuovamente il gioco (l'ombra resterà al suo posto).

Abbiamo parlato del Bake di un effetto, se vogliamo, ossia del Bake delle ombre; come avrete notato scegliendo “Shadow” dal menù del baking, è possibile effettuare il Bake anche per altri canali, come ad esempio per le Textures... quest'opzione, in particolare, ci consente di fare il Bake delle Textures procedurali, mappandole su un'immagine mediante unwrap per applicarle in seguito come immagini UV Mapped agli oggetti, operazione utile perché il Blender Game Engine NON visualizza a runtime le Textures procedurali, per cui, se vogliamo utilizzare una Texture del genere (ad esempio Cloud, Voronoi, Marble, Wood, eccetera), dobbiamo fare l'unwrap, il Bake del canale Texture, salvare l'immagine della Texture procedurale mappata sulla scucitura della mesh ed applicare poi tale immagine come Texture UV Mapped alla mesh, così come fatto poco fa per l'immagine che rappresentava le ombre.

Quanto detto conclude la prima parte di questo tutorial; se volete, quindi, potete mettere in pausa, riposarvi, magari ripassare quanto fatto finora e riprendere tra un po' con la seconda parte del tutorial, riguardante le Textures animate nel Game Engine!

 

Le basi del Game Engine, il motore di gioco di Blender 3D 2.6 – Lezione 2; videotutorial con trascrizione 

 

Eccoci alla seconda parte... beh in realtà in passato ho trattato questo argomento, l'utilizzo di Textures animate nel GE, in un videotutorial, quindi adesso inserirò proprio quel videotutorial, visto che le considerazioni fatte in quel caso – per Blender 3D 2.59 – valgono anche per la versione 2.61.

Chi conosce quel videotutorial può approfittarne per fare un po' di ripasso.

*          *          *

Aggiungiamo una mesh nella scena, in questo caso un semplice Plane, ma potete provare l'effetto anche su superfici più complesse, ad esempio il volto di un personaggio, utilizzando un'immagine delle sprites del personaggio mentre parla anziché dover modellare la faccia con le armature o altre tecniche.

Cambiamo il motore di rendering, che di default è Blender Render, in Blender Game, scegliendo tale voce nel menù Engine, nella finestra Info del programma.

Cambiamo inoltre la modalità di ombreggiatura in GLSL Materials, scegliendo tale voce nella scheda Render, all'interno della Properties Window, e la modalità di ombreggiatura nella finestra 3D in Textured, scegliendo tale voce nel menù Viewport Shading, nell'header della 3D View.

Facciamo l'unwrap del plane assegnandogli, in una finestra UV – Editor delle immagini, l'immagine con le varie Sprites; sto utilizzando proprio l'immagine presente nel tutorial originale che, come potete vedere, è composta da 10 sprites, disposte su 5 colonne e 2 righe.

Nel fare l'unwrap, copriamo tutta l'immagine con la sagoma del Plane, non solo la prima sprite, dopodiché apriamo il pannello Properties della finestra UV con N (o con View --> Properties) e, in basso nel pannello, scegliamo Animated e Tiles.

In Animated, dobbiamo specificare il frame di inizio animazione, il frame di fine animazione e il frame rate, ossia il numero di frame al secondo da visualizzare, il tutto nei campi Start, End e Speed; per questo esempio, per vedere l'animazione lentamente, poniamo ad esempio 0, 9 e 1, cioé un fotogramma al secondo in tempo reale.

In Tiles, specifichiamo 5 per X e 2 per Y: in questo modo, Blender suddividerà in 10 parti l'immagine e prenderà una Sprite per volta, secondo l'ordine dalla prima riga in alto all'ultima in basso, dalla colonna più a sinistra a quella più a destra.

Con l'unwrap, abbiamo fornito anche un Layer UV al Plane, per cui ora non ci resta che assegnare effettivamente questa immagine, con le informazioni sul tiling, ad una Texture.

Aggiungiamo un Material all'oggetto, personalizzando a piacere gli ombreggiatori e le altre caratteristiche proprie del Material, dopodiché aggiungiamo una Texture di tipo immagine all'oggetto.

Qui dobbiamo caricare, ovviamente, la stessa immagine utilizzata per l'unwrap nella finestra UV Editor delle immagini, selezionando la casella Premultiply nella sezione Image e specificando le coordinate di mappatura UV con il layer creato automaticamente nella sezione Mapping; in Influence, lasciamo la voce di default, Diffuse Color con intensità 1, in quanto questa immagine serve a definire l'aspetto dell'oggetto.

Non ci resta che premere P mentre il cursore del mouse si trova in una finestra 3D View per osservare il risultato in real time prodotto dal Game Engine; con le impostazioni date, l'animazione verrà eseguita a 1 frame per secondo, per cui per ottenere un risultato più interessante portiamo Speed (nel pannello Properties nella finestra UV – Editor delle immagini) ad esempio a 10 o 24; da notare che l'animazione verrà eseguita in loop, in maniera ciclica.

*          *          *

Bene, anche per questa puntata è tutto; nella prossima, vedremo finalmente come interagire con l'ambiente virtuale, parlando dello schema logico sensori – controller – attuatori e proprietà nel Game Engine, introducendo il sistema fisico e delle collisioni, eccetera.
A presto!

Tags:     videotutorial      informatica computer      computer grafica      computer graphics      redbaron85      blender 3D      blender 2.6      blender ge      corso      lezioni      game engine      motore di gioco      videogiochi blender 3D
Ultimo aggiornamento Giovedì 12 Aprile 2012 13:10
 

Ti è piaciuto questo articolo ? Condividilo !



RedBaron85.com Forum community banner

Non hai trovato quello che cercavi ?
Ricerca personalizzata
Copyright © 2012 RedBaron85.com: Informatica, CG 2D e 3D, Blender, Python, Java 2D e 3D, 3D Studio e altro ancora!. Tutti i diritti riservati.
Joomla! è un software libero rilasciato sotto licenza GNU/GPL.

Milanese Francesco - Partita IVA: 04950350878

AltroArticoliblog utentiBlueprintsContestenglishProgrammazioneModelliElencoNewsTexturesTutorialsVideotutorials