Scene senza ombre sembrano poco realistiche. Le ombre aiutano l' occhio umano nel comprendere la struttura tridimensionale dalle immagine bidimensionali visibili sullo schermo. In giochi di horror , le ombre possono contribuire agli effetti drammatici .

Non è del tutto sbagliato vedere in real time shadows casting come un metodo per migliorare la drammaticità del vostro gioco, ma deve essere usato con attenzione per ottenere un buon rendimento. In questo contesto, la lezione più importante è che il real time shadows dovrebbe essere utilizzato solo per gli objects ( oggetti) non statici e per le sorgenti luminose. Per le ombre statiche è possibile utilizzare tecniche di mappatura come la luce, che può essere realizzata in modo più efficente attraverso le funzioni di multi texturing .

Ultimate 3D utilizza hardware accelerata stencil shadows . Non hai bisogno di sapere come queste ombre funzionino, ma è necessario conoscere i seguenti vantaggi e gli svantaggi di questa tecnica.

I vantaggi sono soprattutto l' altissima qualità dei risultati delle ombre, che sono assolutamente precise per ogni pixel, le funzioni hardware necessarie ( nessuna supporto ai pixel shader è richiesto dalla scheda grafica ), l' affidabilità, la mancanza di problemi in combinazione con effetti shader come l' illuminazione pixel e per il fatto che essi sono pienamente fully hardware accelerated , in modo da non utilizzare troppo la CPU .

Gli svantaggi sono :
  • i tuoi modelli devono soddisfare alcune condizioni per avevre delle ombre valide ;
  • Potrebbero stressare molto la GPU ;
  • Le ombre morbidi non sono possibili.


Using real-time shadows

( Utilizzare le ombre in tempo reale )

L' uso del real time shadows in Ultimate3D è molto facile. La prima cosa che devi fare è quella di renderle , in modo che siano supportate. Se lo sono , è possibile abilitare la shadow casting per particolari fonti di luce, settare un particolare modello di oggetti , come shadow casters e settare un modello di objects , objects di terreno o di oggetti primitivi come ricevitori dell' ombra .

La prima cosa che devi fare per essere in grado di utilizzare le ombre, è l' impostazione global.u3d_z_buffer_format a 32 nello script Ultimate3DOptions() .
Per ulteriori informazioni sul significato di questa variabile, si prega di fare riferimento al capitolo delle opzioni su Ultimate3D . Il motivo per cui non ci possono essere ombre senza 32-bit z-buffer è che 8-bit dello Z-buffer vengono utilizzati come buffer stencil , necessario per calcolare le ombre. Se il PC in uso è abbastanza attuale e se lo z-buffer ha il buon formato, la funzione GetShadowSupport() restituirà true ( vero ), il che significa che è possibile utilizzare in tempo reale, le ombre. Altrimenti non sarà possibile. Tutte le funzioni connesse all' ombra non funzioneranno.

Ora che hai fatto in modo che le ombre sono supportate è possibile chiamare la seguente funzione per consentire le ombre , per una particolare fonte di luce.

Questa funzione abilita o disabilita la shadow casting ( ombra di colata ) per la sorgente di luce dell' oggetto che la richiama. Essa deve essere richiamata dopo LightDirectional (), LightPoint () o LightSpot ().

SwitchShadows(Enable );

Enable ( Consentire )
Se si scrive true ( vero ) per questo parametro, Ultimate 3D consentirà la shadow casting ( ombra ) per questa sorgente di luce, altrimenti sarà disattivata.

Accanto è possibile definire quale modello di oggetti di ombre , per le fonti di luce.

Questa funzione abilita o disabilita shadow casting ( ombra ) per il modello object da esso richiamato. Se il modello utilizza la scuoiatura del vertice ( skinning ) non deve utilizzare più di 28 ossa, dal momento che tutte le ossa successive non saranno corrette. La ragione di questo comportamento è il numero limitato di vertex shader costanti disponibili nella versione utilizzata nelle Direct3D.

SwitchShadowCasting(LightSourceID,Enable );

LightSourceID
Il Game Maker id dell' oggetto della fonte luminosa, questo modello dovrebbe creare le ombre.

Enable ( Consentire )
Se è shadow casting ( ombra ) sarà attivato in true o disattivato tramite false.

Infine dovete essere in grado di abilitare gli oggetti che riceveranno le ombre , ma ciò è semplice.

Questa funzione trasforma la ricezione delle ombre espresse da una particolare fonte di luce on o off. Si applica al terreno, al primitivo o al modello oggetto che lo richiama.

SwitchShadowReceiving(LightSourceID,Enable);

LightSourceID
La sorgente luminosa che si desidera attivarne o disattivarne la ricezione dell' ombra.

Enable ( Consentire )
Se si passa il true ( vero ) , l' oggetto riceverà le ombre ( shadow ) dalla sorgente di luce, altrimenti non lo farà. Nota , i terreni non riceveranno le ombre a meno che non abbiano chiamato la funzione CalculateTerrainLightMap(...) almeno una volta , dopo aver chiamato questa funzione.

Ora siete in grado di attivare le ombre da fonti di luce , shadow casting ( ombra ) sia come ombreggiature da da modelli 3D, sia come ricezione per i diversi tipi di oggetti ( per esempio i terreni ).

Questo è tutto quello che c'è da sapere per utilizzare le ombre con Ultimate 3D. Tuttavia, nella maggior parte dei casi , i risultati che ci si ottengono con questa conoscenza potrebbero essere molto poveri. La ragione di questo è che stancil shadow richiede una speciale geometria per funzionare correttamente. La geometria , non deve avere nessun foro e dovrebbe avere triangoli che ne rappresentano il bordo.... a meno che non abbia un elevato numero di triangoli. Solo se questa geometria è disponibile si vedranno delle ombre realistiche. Fortunatamente, Ultimate3D contiene una funzione per modificare un modello della geometria in modo che soddisfi queste condizioni. Come al solito non avete un sacco di lavoro con questo, perchè Ultimate 3D fa tutto automaticamente. Non avete che da chiedere per questo servizio.

Questa funzione crea geometria ottimizzata per la shadow casting ( ombra ) per il modello di oggetto che la richiama. Essa dovrebbe essere chiamata dopo LoadMesh() ( e la chiamata alla CreateLODChain(...) se del caso ).

CreateShadowOptimizedGeometry ( LODIndex, CreateConnectionPatches ) ;

LODIndex
Attraverso questo parametro è possibile definire per quale livello di dettaglio si desidera creare l' ombra geometricamente ottimizzata. Spesso è meglio utilizzare bassi livelli di dettaglio per la shadow casting ( ombra ) in quanto le ombre non hanno bisogno di essere precise. Il più alto livello di dettaglio , con l' ombra geometricamente ottimizzata , verrà utilizzato per la shadow casting ( ombra ) . Per questo parametro, 0 si riferisce al più alto livello di dettaglio ( invariato dal modello), 1 si riferisce ad un livello più basso di dettaglio e così via....

CreateConnectionPatches
Se si passa il true ( vero ) per questo parametro, questa funzione creerà una geometria che permetterà di avevre un' ombra assolutamente precisa , ma il prezzo è alto. Essa richiede la creazione di due triangoli per ogni bordo del modello. Se invece si scrive false ( falso ) , le connessione patch non vengono create, il che porta a una maggiore efficienza ma con un ombra meno dettagliata.

Purtroppo, in casi particolari, anche questa funzione non riesce a ottimizzare la geometria correttamente . In questo caso si otterranno brutti risultati . L'ombra non si fermerà dietro al modello , bensì andrà all' infinito con lunghe strisce nere. Quindi qual è la condizione, affinchè il modello eviti questo effetto? E' abbastanza facile da fare, ma un po' difficile da comprendere. Tutti i bordi nel modello non devono essere condivisi da più di due triangoli. Ecco un piccolo esempio per chiarire questo.



La geometria sulla sinistra potrebbe essere ottimizzata perfettamente, perchè è fatta solo da lati dei bordi (blu) e due lati dei bordi (verde). Ma il pezzo di geometria sulla destra ha due bordi che sono condivisi da tre triangoli (rosso). Per questa ragione il meccanismo di Ultimate 3D ( che utilizza per riempire buchi nel modello di geometria ) non riesce a trovare una soluzione e questo è il motivo per cui la funzione non si tradurrà in una valida ottimizzazione della geometria dell' ombra nel caso specifico. Ecco perchè nessun modello casting shadow nella scena potrà avere una configurazione di triangolo come questa. Tocca a te renderle giuste. Ultimate 3D non può farlo per voi, perchè un meccanismo matematico che porta ad una soluzione unica non può essere trovato in questa situazione. Ma questo è un basso prezzo , per avere realistic real-time shadows.

Un consiglio by civic71 è quello di importare il vostro oggetto 3D su anim8or e selezionarne tutti i bordi (Edges) di cui è composto. Se questi risultano di colore rosso è molto probabile che avrete una geometria dell' ombra che contenrrà degli allungamenti .

Shadow checklist

( Ombra checklist )
Diversi problemi con le funzioni shadow casting ( ombra) sono stati riportati sul Forum di Ultimate 3D. Nella maggior parte dei casi questo è stato il risultato di un uso sbagliato. E' anche abbastanza difficile da eseguire il debug dei problemi relativi allo shadowing, perchè se un solo componente è sbagliato, tutto lo shadowing non funzionerà e non c'è modo di sapere se sia dovuto alla sorgente di luce, alla shadow casting o all' ombra ricevuta non funzionante . Per questo motivo, ecco una lista di controllo , con la quale è possibile capire se le tue ombre funzionino o meno. Questa spiega tutti i comuni errori e come correggerli. Leggete questo prima di postare, sul forum di Ultimate3D , tutte le domande relative al mancato funzionamento delle stencil shadows.

Il più comune errore è che SwitchShadowCasting(...) e SwitchShadowReceiving(...) vengono richiamate prima che sia stata creata ed inizializzata la fonte di luce . In questo caso, il parametro LightSourceID non sono validi e come risultato di questa shadow casting o shadow receiving non funzioneranno. Il modo più sicuro per evitare questo problema è quello d' inserire queste due funzioni nello step event degli objects ( oggetti ). Ciò non intensificherà il tempo di calcolo , per cui le prestazioni non ne risentiranno.

Un altro errore fatto un paio di volte è che CreateShadowOptimizedGeometry(...) non è stato chiamato nella shadow casting del modello ( object ). Si dovrebbe sempre richiamare questa funzione per shadow casters . Senza di essa, si ottengono errori , imprecisioni o nella maggior parte dei casi , nessuna ombra. L' unica eccezione a questo sono i modelli con un altissimo numero di triangoli. Essi funzioneranno senza utilizzare lo script , ma nel caso non fosse così ( e non state utilizzando CreateShadowOptimizedGeometry(...) ) , dovreste cambiare subito la situazione.

Se avete problemi con l' utilizzo di oggetti come terreno shadow receivers si dovrebbe verificare il valore di ritorno di GetSimultaneousTextureCount(...).
Se è inferiore a tre il sistema non supporta terrain light mapping ( mappatura della luce del terreno ) in combinazione con texture splatting. E senza light mapping non è possibile ottenere le ombre. Un' altra cosa che dovreste notare è che i terreni con una light mapping personalizzata non possono ricevere ombre.

Se si dispone del funzionamento delle ombre, ma si ottiene una strana ombra di strisce infinite, leggere la spiegazione dei tre lati dei bordi , sopra. Questi sono di solito la causa di questo problema.
Un' altra possibile causa di questo problema è che non avete richiamato la funzione CreateShadowOptimizedGeometry(...) correttamente.

Un ultimo possibile causa del mancato funzionamento delle ombre è un inopportuna proporzione tra camera.min_range e camera.max_range. Se il risultato di camera.max_range / camera.min_range è estremamente elevato può succedere che errori di arrotondamento rendano la far-clipping plane allungate all' infinito. Dal momento che la far-clipping plane svolge un ruolo importante per shadow casters e shadow casting , in questo caso essa non funzionerà . Per risolvere questo problema dovete semplicemente aumentare camera.min_range e / o diminuire camera.max_range.

Per qualche ulteriore trucco leggi anche Ombre sovrapposte



PAGES and MANUALS
PAGINE e MANUALI




AFFILIATI :