La luce è un elemento fondamentale del mondo che ci circonda. Senza essa non esistrebbe vita in questa splendida roccia che vaga per l’universo chiamata Terra, no?

All’interno di un videogioco chiaramente le luci non hanno il gravoso compito di portare vita dove non esiste (il nostro gioco esisterebbe comunque senza luci, anche se completamente buio e probabilmente impossibile da giocare!), ma rimane un grandissimo mezzo a disposizione dello sviluppatore per poter trasmettere diverse emozioni al giocatore.

Cos’è che rende un tramonto tanto poetico? La luce! Cosa rende un chiaro di luna così romantico? Ancora la luce! Così come avviene nel mondo del cinema o della fotografia, la luce potrà dare ad una scena il giusto feeling!

Una scena con un'illuminazione piatta e brutta
Un vicolo cieco con un’illuminazione piatta e brutta. Oltre ad essere un pugno in un occhio (Il muro! Brrr…), non trasmette alcuna emozione!
Imm01
La stessa scena con un’illuminazione decisamente migliore: l’effetto finale è completamente diverso!

Dopo questa breve premessa, andiamo a vedere nel dettaglio quali opzioni ci offre Unity per gestire l’illuminazione della nostra scena:

Tutte le luci che seguiranno sono degli oggetti a tutti gli effetti, e come tali, potrai trovarli cliccando “Create>Light>…” dall’Hierarchy panel. Gli oggetti light sono caratterizzati da un componente “Light”, che possiamo vedere dal loro Inspector panel. Vediamo brevemente a cosa si riferiscono questi parametri!

  • Type: Si riferisce al tipo di luce (in questo caso una Directional light). Ogni tipo di luce ha alcune peculiarità, di conseguenza i parametri del componente Light variano in base al tipo di luce (vedremo i vari tipi di luce fra pochissimo).
  • Color: Banalmente, questo parametro ti consentirà di modificare il colore della luce. Posso assicurarti che ti ritroverai spessissimo a giocherellare col parametro color. Una piccolissima variazione di colore può fare la differenza in una scena!
  • Mode: Ne parleremo meglio più avanti in questa lezione. Per il momento ti basterà sapere che questo parametro ti permetterà di risparmiare preziosissime risorse hardware precalcolando le luci prima dell’avvio del gioco!
  • Intensity: Il parametro intensity regolerà (neanche a dirlo) l’intensità della fonte luminosa: che la nostra luce rappresenti l’accecante luce solare o un pallido chiaro di Luna, sarà questo il parametro cui dovremo porre attenzione (e anche qui, come nel caso del colore, probabilmente ti ritroverai a modificarne il valore continuamente durante la costruzione della scena).
  • Indirect Multiplier: Nel mondo che ci circonda, ogni oggetto colpito da luce ne assorbe una parte e ne riflette un’altra. Il parametro Indirect Multiplier serve proprio ad indicare quanto i nostri raggi di luce dovranno “rimbalzare” all’interno della scena dopo aver colpito un oggetto.
    Bounce Intensity = 0
    Bounce Intensity = 0: Ogni raggio di luce si ferma dopo aver urtato il primo oggetto
    Imm14
    Bounce Intensity = 8: questa volta i raggi di luce continuano a viaggiare molto dopo aver colpito il primo oggetto (la sfera verde riflette la propria luce su pareti ed asfalto, dando loro una leggera tonalità verde)

    Attenzione: La gestione del parametro Indirect Multiplier è molto dispendiosa per il nostro hardware. Proprio per questo motivo, Unity considera al fine del calcolo solo gli oggetti statici della nostra scena (cioè gli oggetti che non si muovono durante il gioco). Per far sì che un oggetto venga visto come statico, bisogna segnarne la relativa spunta all’interno del suo inspector panel:
    Imm15Nella scena precedente ho segnato come statici sia la sfera che le pareti ed il pavimento! Dopo aver fatto ciò, vedrai apparire una barra di progressione nell’angolo in basso a destra della tua schermata di Unity. Il programma starà calcolando il comportamento delle luci, e rieseguirà questo calcolo ogni volta che sposterai un oggetto della scena.Imm16

  • Shadow Type: Gestisce il tipo di ombre prodotte dalla luce
  • Cookie: Un cookie altro non è che un’immagine da applicare alla luce al fine di proiettare una determinata ombra sugli oggetti colpiti da quella luce (hai presente il Bat segnale? Ecco, proprio quello!) . Nella lezione relativa alle texture ti spiegherò come creare facilmente un cookie ed importarlo nel tuo progetto di Unity!Imm17
  • Draw Halo: Spuntando questa casella, la nostra fonte di luce verrà avvolta da un alone luminoso. Spuntado la casella l’alne verrà creato in automatico, ma esiste un componente che ti permette di gestirne anche il colore e l’ampiezza. Piuttosto che spuntare la casella Draw Halo, ti consiglio quindi di aggiungere il relativo componente alla tua luce (Cliccando su Add component>Effects>Halo dall’Inspector panel).
    Imm18
  • Flare: Il flare è quella distorsione dell’immagine che si verifica quando puntiamo una fotocamera o una videocamera contro un oggetto molto luminoso, a causa di una rifrazione dei raggi luminosi all’interno del gruppo ottico della camera.
    Imm19
  • Render mode: serve a determinare l’importanza della nostra luce. Di default questo parametro sarà impostato su “Auto”, e la luce verrà calcolata in base a quelli che sono gli attuali settaggi grafici per il gioco. “Important” renderà la luce fondamentale per la nostra scena, e Unity la calcolerà ogni volta al massimo delle sue potenzialità. Usa questa impostazione solo quando davvero necessario! “Not important” invece farà sì che la luce venga sempre calcolata nel modo più veloce possibile, risparmiando così risorse hardware.
  • Culling mask: Permette di scegliere quali oggetti debbano essere colpiti dalla luce. Di norma settato su “Everything” (la luce colpirà qualsiasi oggetto).

Tipi di luci

andiamo a vedere nel dettaglio tutti i tipi di luci che Unity ci offre, come funzionano e come possono essere utilizzate:

Directional Light

Imm03È la luce che ritroviamo di default all’interno della nostra scena. La Directional light (o per gli amici Sunlight) è un tipo di luce che viene utilizzato per illuminare l’intera area di gioco. La sua peculiarità sta nel fatto che luce emessa non dipende dalla posizione dell’oggetto, ma esclusivamente dalla sua rotazione. Questo perchè la directional light emette dei raggi di luce parallelamente alla sue asse delle z (e ai raggi gialli che possiamo vedere nella scene view).

imm04Tipicamente la directional light viene usata per simulare la luce creata dal Sole, dalla Luna o in genere per dare un’illuminazione uniforme alla nostra scena. Usala quando hai intenzione di dare un “colore globale”, e ricordati di regolarne bene la rotazione; infatti diverse angolazioni creeranno ombre diverse, che ovviamente avranno un differente impatto sull’aspetto finale della scena!

Point Light

imm05

Una point light, come suggerisce il nome, altro non è che un punto luce. Per certi aspetti potremmo vederla come l’opposto di una directional light, poichè in questo caso i raggi di luce emessi dipendono esclusivamente dalla sua posizione e non dalla sua rotazione.Dal centro dell’oggetto point light infatti verranno emessi dei raggi di luce che andranno verso l’esterno dell’oggetto, affievolendosi fino a diventare nulli ad uno specifico range, che ci viene indicato come una sfera gialla che avvolge la nostra luce. Ovviamente è possibile modificare il range della point light, così da aumentare la distanza coperta dai suoi raggi di luce.

imm06

Una point light trova moltissime applicazioni all’interno di Unity. Come è facile intuire potrai usarla per oggetti che emettono luce tutto intorno a loro, a prescindere dalle loro dimensioni : dalle luminose fiamme di un focolare alla debole fiamma di una candela, questa è la fonte luminosa perfetta!

Spotlight

imm07In inglese, il termine Spotlight indica la luce “ad occhio di bue”, cioè quel faretto che emette un fascio di luce di forma conica molto utilizzato nei teatri. Ed è proprio ciò che fa la spotlight di Unity: emette un fascio di luce all’interno di un cono giallo. Dall’inspector panel di questo oggetto potrai regolare sia il range (la lunghezza del cono giallo che indica la lunghezza raggiunta dai raggi di luce, esattamente come per la point light) che lo spot angle, ossia l’ampiezza dell’angolo con cui vengono emessi i raggi luminosi.

imm008La spotlight è perfetta per simulare la luce emessa da un oggetto artificale, come ad esempio una torcia elettrica o (appunto) un faretto.

Area light

imm009

Ultimo (ma non ultimo) oggetto che esamineremo oggi è l’area light. Un’area light crea un piano giallo (che ovviamente è possibile ridimensionare tramite i parametri widh ed height dell’inspector panel) dal quale viene emessa luce. La luce viene emessa da una sola faccia del piano, ma da tutti i suoi punti e verso tutte le direzioni.

imm11

Un’area light è la luce perfetta per creare luci provenienti da cartelloni pubblicitari, porte e finestre, Ma ha i suoi pro e contro: se da un punto di vista estetico un’area light crea una luce bellissima e consistente, essa è particolarmente gravosa in termini di risorse. Per questo motivo attualmente Unity permette di utilizzare l’area light solo ed esclusivamente eseguendone il Baking.

Il baking, come già accennato, ci permette di risparmiare preziose risorse hardware, pochè le informazioni su una luce non verranno calcolate in tempo reale, ma precalcolate e salvate in modo da poter essere richiamate facilmente e “a costo zero”. Per far ciò è necessario settare gli oggetti della scena come oggetti statici (esattamente come abbiamo fatto quando ho parlato del parametro bounce intensity, poco più sopra!) ed attendere che Unity esegua i calcoli. Ovviamente puoi eseguire il baking di qualsiasi luce modificando il relativo parametro dall’inspector panel! Alcune luci permettono di effettuare un baking di tipo “mixed”, che consiste nell’effettuare il baking sugli oggetti statici e nel colpire gli oggetti non statici con una luce diretta ed in tempo reale.

Per quanto riguarda le luci ci sarebbe molto altro da dire, e probabilmente non basterebbe un libro intero per trattare l’argomento in maniera approfondita! Adesso che conosci le basi dell’illuminazione in Unity non ti resta che fare pratica all’interno del software (come si dice? La pratica è il miglior insegnante!) e testare le tue conoscenze con il consueto quiz. Rimani nei paraggi, perchè nella prossima lezione parleremo di materiali e texture!

Back to: Unity Bootstrap: Corso gratuito sviluppo giochi con Unity 3D. Le basi di Unity dalla A alla Z > Unity Bootstrap Lezioni