[lnkForumImage]
Download FREE Software.

Confronta i prezzi di migliaia di prodotti.
News Forum Italiano
 Home | Login | Registrati | Ricerca 


 

Forums >

it.comp.giochi.sviluppo

Il deferred lighting è solo un tappabuchi

Gianpaolo Ingegneri

23/12/2011 14:42:16

Il deferred lighting è una tecnica usata per ottenere effetti di luce
avanzati nei motori 3d odierni. La sua ideazione è nata dalla necessità di
avere un numero qualsiasi di luci in una scena altrimenti limitata a sole 3
luci per oggetto renderizzato (o un numero di luci limitato dal numero di
istruzioni disponibili dal fragment shader). Questa tecnica prevede una
prima passata di rendering per ottenere un'immagine con le normali della
scena, un'immagine con le posizioni dei pixel nel world space ed una terza
immagine con i valori di specularità dell'oggetto. Un secondo step consiste
nel calcolare le luci passandole una dopo l'altra come poligoni da disegnare
all'interno di un light accumulation buffer, facendo uso delle precedenti
informazioni su normali, posizioni e specularità processando con un apposito
shader. Come terzo ed ultimo step è necessario ridisegnare la scena per
accedere alle informazioni del light buffer e poterle utilizzare assieme
alle proprietà del materiale per ottenere l'effetto desiderato. Ancora oggi
questa tecnica sembra essere la migliore ed è usata a piene mani dal tanto
osannato CryEngine che addirittura ne ha fatto quasi un marchio di qualità.

Finita questa piccola premessa, mi domando una cosa: ma è possibile mai che
nel 2011 quasi 2012 si debbano usare ancora delle strategie implementative
che potevano andare bene nel 2007 quanto crysis era una novità assoluta?
Possibile che tra le tante fetecchie emergenti non si sia pensato ad una
strategia per risolvere tutti i problemi che derivano dall'uso del deferred
lighting, che altri non è un tappabuchi alle grosse limitazioni dei tanti
shader e compagnia bella? Per farvi capire meglio, vi sintetizzo brevemente
in cosa pecca il deferred lighting:

- Necessità di eseguire due passate di rendering della stessa scena,
eseguendo trasformazioni geometriche inutili e andando a discapito del
fill-rate, peggiorando così le performance di base.

- Non è possibile usare il multisample antialiasing, che oggi è diventato
l'incubo peggiore per chi era abituato ad avere una qualità eccelsa con una
16x. Esisterebbe un multisaple esplicito ma è un'autentica fetecchia, l'ho
già sperimentato e cestinato per via della sua lentezza. Nel calderone dei
tanti post-process effect si è aggiunto un FXAA che esegue un volgare blur
degli edge, facendo da tappabuchi a quello che dovrebbe essere un VERO
algoritmo di antialiasing (questo perchè facciamo tanti passi in avanti).

- Non è possibile renderizzare gli oggetti trasparenti usando la stessa
tecnica. In realtà si potrebbe usare un depthpeeling eseguendo i tre
passaggi che ho elencato per ogni strato, praticamente fate finta che in una
scena degli oggetti trasparenti creano decine e decine di strati diventa
tutto lento da far schifo.

Ecco secondo me come si sarebbero dovute evolvere le schede in questi 4-5
anni, per evitare ancora oggi l'uso del deferred lighting:

- Disegno automatico dell'intera scena con eliminazione degli oggetti e dei
pixel nascosti, per non sovraccaricare il vertex ed il fragment shader.

- Supporto nativo del forward shading con molte luci ed ombre, almeno per le
luci dirette. Questo avrebbe risolto il problema del multisample
antialiasing e consentito di avere un numero di luci qualsiasi anche per gli
oggetti trasparenti.

- Possibilità di accedere al GBuffer nelle fasi successive, così da
permettere gli effetti di post processing.

- Variabili e array anche in output all'interno dello shader, così che
vertici e pixel finalmente possano far parte dello stesso algoritmo.

Come dite esiste il CUDA? Se io propongo di semplificare le cose, il cuda
non fa che complicarle di brutto. I supporti limitati e la complessità di
implementazione rendono questa tecnologia ancora un esperimento da
laboratorio universitario. D'altra parte, se gli autori di crysis non lo
usano, questo già la dice lunga.


5 Risposte

Davide Pasca

26/12/2011 18:40:14

0

Topic molto interessante.
Neanche io sono un amante del deferred.

On 2011/12/23 23:42, Gianpaolo Ingegneri wrote:
> Il deferred lighting è una tecnica usata per ottenere effetti di luce
> avanzati nei motori 3d odierni. La sua ideazione è nata dalla necessità di
> avere un numero qualsiasi di luci in una scena altrimenti limitata a sole 3
> luci per oggetto renderizzato (o un numero di luci limitato dal numero di
> istruzioni disponibili dal fragment shader). Questa tecnica prevede una

Penso che la PS3 abbia involontariamente portato alla popolarita' del
deferred lighting. Perche' la GPU della PS3 non e' molto potente e c'e'
stata una spinta nel cercare di sfruttare il Cell anche per la grafica.
Quindi, mentre la GPU continua a fare rasterizzazione e texture
filtering, il Cell si presta ad applicare lo shading. Il deferred e' una
buona soluzione che permette di fare questo e mi sembra che molti
sviluppatori hanno scelto la via del deferred.

> Ecco secondo me come si sarebbero dovute evolvere le schede in questi 4-5
> anni, per evitare ancora oggi l'uso del deferred lighting:
>
> - Disegno automatico dell'intera scena con eliminazione degli oggetti e dei
> pixel nascosti, per non sovraccaricare il vertex ed il fragment shader.

Alcune di queste cose ci sono gia' ed in alcuni casi si sono fatti passi
indietro (!)
La PowerVR su DreamCast non solo evitava l'overdraw, ma aveva anche il
sort per-sample in modo da supportare traslucenza automaticamente (la
traslucenza si usa relativamente poco, ma quando si usa e' un gran
problema).

L'hardware PowerVR oggi gira su mobile (tutti i devices iOS ed alcuni
Android). Internamente elimina l'overdraw quando puo' (quando non c'e'
traslucenza o trasparenza) e quindi non c'e' da preoccuparsi per il fill
rate in caso di overdraw. Pero' la traslucenza comunque dipende
dall'ordine delle chiamate.
Penso che questa sia una scelta di rimuovere il supporto per l'order
independent translucency (OIT) sia stata fatta per semplificare
l'hardware e ridurre i consumi energetici.

Riguardo all'evitare il rendering di oggetti interi, c'e' un meccanismo
di occlusion query anche in D3D 10. Ma usarli in maniera efficente non
e' sempre chiaro.. anche perche' e' una cosa che comunica con l'engine.

> - Supporto nativo del forward shading con molte luci ed ombre, almeno per le
> luci dirette. Questo avrebbe risolto il problema del multisample
> antialiasing e consentito di avere un numero di luci qualsiasi anche per gli
> oggetti trasparenti.

Ombre e lighting in generale e' un topic molto aperto.. per cui non c'e'
molto che un hardware puo' fare di suo.
Se si passa al global lighting, allora la situazione si fa molto piu'
complessa. Non c'e' una implementazione migliore ed assodata e poi c'e'
sempre un continuo bilanciamento tra quello che si precalcola e quello
che si fa in real-time.

Per le luci dirette comunque, si puo' approssimare con le spherical
harmonics. E' una cosa abbastanza facile che permette di avere
"infinite" luci dirette in real-time (paper classico ->
http://www.cs.berkeley.edu/~ravir/pape... di un sistema che usa
le SH per integrare una irradiance env map anche in tempo reale ed una
mia vecchia implementazione -> http://kazzuya.com/s... ).

> Come dite esiste il CUDA? Se io propongo di semplificare le cose, il cuda
> non fa che complicarle di brutto. I supporti limitati e la complessità di
> implementazione rendono questa tecnologia ancora un esperimento da
> laboratorio universitario. D'altra parte, se gli autori di crysis non lo
> usano, questo già la dice lunga.

Purtroppo "gli autori di crysis" devono essere pragmatici e sviluppare
qualcosa che funzioni bene con l'hardware che c'e' e che ci sara'.
Io sono un fautore della architettura Reyes (usata in RenderMan).. e
questa architettura un po' di cose le migliorerebbe, ma c'e' molto poco
interesse di cambiare il mondo del real-time.
La situazione attuale dell'hardware e' troppo ben definita e sicura per
rischiare. Gli sviluppatori non rischiano, chi fa l'hardware non
rischia.. l'ultima compagnia che ci ha provato e' stata la Intel con
Larrabee ed e' finita molto male.
Quindi anche se compagnie come la NVidia fanno tanta ricerca, nessuno ha
il potere di cambiare nulla (oltre a non essere facile, ovviamente).

La speranza e che sperimentando con CUDA/Compute Shaders/OpenCL, piano
piano si arrivera' a dei cambiamenti oltre la rasterizzazione corrente e
il deferred.. ma se e' quando avvera' e' difficile prevederlo.
Sarebbe bello provarci, ma e' difficile ottenere supporto sia economico
che di visibilita' 8)

- Davide

--- Posted via news://freenews.netfront.net/ - Complaints to news@netfront.net ---

Gianpaolo Ingegneri

26/12/2011 21:51:22

0

Mah, diciamo che quando ho scritto quel messaggio ero un po' disgustato per
i risultati ottenuti dal multisample esplicito, che mi ha fatto capire il
perchè dell'FXAA. Mi è sembrato assurdo che andando avanti si fosse tornati
un po' indietro. Diciamo che in un engine alla Crysis l'antialiasing si fa
sentire molto meno vista la presenza di grafica fotorealistica, motion blur
e depth of field, per la serie, ubi maior minor cessat. Pensavo che dal 2007
in poi si fosse fatto parecchio invece è stato fatto molto poco. Leggendo il
paper degli autori di Crysis ho visto che molte tecniche sono state
introdotte proprio da loro per risolvere tutta una serie di limiti hardware
e mi meraviglia che questi limiti esistano ancora.

Comunque, ho deciso di liquidare velocemente la questione antialiasing con
un approccio ibrido di mia invenzione, e di passare ai problemi più seri di
un engine per poi finalmente concludere (spero in tempi brevi). Per quanto
riguarda le trasformazioni geometriche inutili ho scoperto che potrei
rivolgermi al transform feedback, anche se non ho fatto molte prove,
vedremo. Come primo step in avanti vorrei avere un aspetto decente almeno
sulle ambientazioni esterne che coprono un'ampia gamma di applicazioni. Per
la simulazione dell'acqua sto studiando il paper di tessendorf, che
rappresenta un po' lo stato dell'arte, alla luce anche degli ottimi
risultati. Non avrò alcun problema ad introdurre un discreto atmosferic
scattering vista l'enorme quantità di materiale ormai a disposizione e la
facilità dell'argomento. Poi metterò in piedi qualche effetto di post
processing e finalmente chiuderò una prima versione del mio lavoro, anche
perchè lo scopo principale non era neppure la grafica avanzata. In questi
anni ho operato una connessione agile di diverse librerie all'intero di un
unico framework, tra cui OpenGL, FreeType, ZLib, DevIL, Assimp, OpenCV,
OpenAL, Bullet, per cui ci sarà molto da mostrare.

>Penso che questa sia una scelta di rimuovere il supporto per l'order
>independent translucency (OIT) sia stata fatta per semplificare l'hardware
>e ridurre i consumi energetici.

Può darsi. Forse non poteva essere garantito nelle schede di fascia
medio-bassa, ma d'altra parte, ci sono giochi che su quelle schede si
limitano a partire, ma sono a dir poco ingiocabili. Secondo me potevano
supportarlo solo in un certo range di fascia alta e renderlo opzionale per
evitare il depth peeling che dal mio punto di vista è improponibile su
qualsiasi configurazione.

>La situazione attuale dell'hardware e' troppo ben definita e sicura per
>rischiare.

Sono d'accordo, oggi si preferisce il riciclo ed il guadagno sicuro. Tanto
la gente compra lo stesso. Basta vedere le console che escono oggi, il
nintendo 3ds è un nintendo ds pochino più potente con lcd ad
autostereoscopia, la psp vita è una playstation 2 portable, di successori
dei vari xbox360, ps3 e wii mi pare che non ne vedremo per molto ma molto
tempo.


Davide Pasca

27/12/2011 09:01:17

0

On 2011/12/27 6:51, Gianpaolo Ingegneri wrote:
> Mah, diciamo che quando ho scritto quel messaggio ero un po' disgustato per
> i risultati ottenuti dal multisample esplicito, che mi ha fatto capire il
> perchè dell'FXAA. Mi è sembrato assurdo che andando avanti si fosse tornati
> un po' indietro. Diciamo che in un engine alla Crysis l'antialiasing si fa
> sentire molto meno vista la presenza di grafica fotorealistica, motion blur
> e depth of field, per la serie, ubi maior minor cessat. Pensavo che dal 2007
> in poi si fosse fatto parecchio invece è stato fatto molto poco. Leggendo il
> paper degli autori di Crysis ho visto che molte tecniche sono state
> introdotte proprio da loro per risolvere tutta una serie di limiti hardware
> e mi meraviglia che questi limiti esistano ancora.

Io invece credo che l'AA sia molto importante.. e FXAA semplicemente non
e' AA 8)
Concordo che cose come il mio blur siano piu' evidenti, ma per fare un
vero salto di qualita' AA non puo' essere ignorato. L'MSAA aiuta solo se
i poligoni su schermo sono abbastanza grandi e gli shaders abbastanza
semplici.
Con delle bump/normal map dettagliate e con geometria molto fina, l'MSAA
non aiuta e FXAA.. continua a blurrare.

Ma bisogna essere realisti e l'hardware attuale e' questo quello che offre.

> perchè lo scopo principale non era neppure la grafica avanzata. In questi
> anni ho operato una connessione agile di diverse librerie all'intero di un
> unico framework, tra cui OpenGL, FreeType, ZLib, DevIL, Assimp, OpenCV,
> OpenAL, Bullet, per cui ci sarà molto da mostrare.

Hai in mente uno sbocco di business o sempre comunque al livello di hobby ?

> Può darsi. Forse non poteva essere garantito nelle schede di fascia
> medio-bassa, ma d'altra parte, ci sono giochi che su quelle schede si
> limitano a partire, ma sono a dir poco ingiocabili. Secondo me potevano
> supportarlo solo in un certo range di fascia alta e renderlo opzionale per
> evitare il depth peeling che dal mio punto di vista è improponibile su
> qualsiasi configurazione.

Il fatto e' chela PowerVR ha smesso di fare schede per compututer, anzi
non ha mai iniziato (si vociferava di una scheda 3D per PC molti anni
fa). Pensavo fosse morta con il DreamCast ed invece ora ha una buona
fetta di mercato mobile.
Penso abbiamo anche diversi brevetti e soprattutto il known-how.
Compagnie come la NVidia invece hanno i loro brevetti, il loro known-how
e continuano a giocare in casa con il rendering "classico".
C'e' da dire che l'approccio deferred di PowerVR complica l'uso di
texture dinamiche perche c'e' sempre e comunque una fase di "resolve".

Buon lavoro 8)
Davide

--- Posted via news://freenews.netfront.net/ - Complaints to news@netfront.net ---

Gianpaolo Ingegneri

27/12/2011 15:19:01

0

Sono d'accordo, l'FXAA non è decisamente antialiasing.

> Hai in mente uno sbocco di business o sempre comunque al livello di hobby
> ?

Dopo che ci ho lavorato tanto vorrei farne un business, possibilmente
interessando molti utenti online con qualcosa di originale. Il problema più
grande è la visibilità. Se io ad esempio facessi una serie di dimostrativi
sul lato tecnico del mio lavoro, non otterrei che un centinaio di visitatori
occasionali. Questo spiega perchè non mi sono mai cimentato a fare demo da
mettere online nonostante il gran materiale che ho prodotto in tutti questi
anni, non ne vale semplicemente la pena. Per il momento sto cercando di
raggiungere una versione stabile e purtroppo mi sono arenato nella computer
grafica, anche se spero di uscirne presto. Ormai ho capito che non ci sono
più grafici o musicisti che vogliono rischiare su di un progetto anonimo.

A me sarebbe bastato un grafico ed un musicista poi tutto il lavoro lo avrei
fatto da solo ed in tempi brevissimi, ma non c'è niente da fare, gli
interessi sono cambiati troppo in questi anni. Se in passato c'erano degli
artisti vogliosi di cimentarsi in un progetto qualsiasi, oggi gli stessi
utenti rivolgono le loro attenzioni su fenomeni passeggeri, tra forum, blog,
youtube, skin, mod, blender, zbrush, etc, c'è stata una frammentazione dei
talenti a favore del puro cazzeggio online, per cui l'unica cosa da fare se
non si hanno a disposizione delle risorse è quello di focalizzare
l'attenzione con una buona idea per farsi produrre del materiale senza manco
chiedere (stile Mugen tanto per intenderci). Dal mio punto di vista non
esiste altro modo per far affermare un proprio software e farlo girare in
rete senza un grosso budget di partenza, anche a livello hobbistico, non si
può punto e basta perchè non se c'è la visibilità tutto quello che fai cade
nel dimenticatoio e diventa inutile dopo 1 secondo.

Comunque, dopo una prima fase diciamo di promozione, se ci dovessi riuscire,
mi vorrei spostare su diversi settori, tra cui produzione di software per la
computer grafica e diffusione del framework su vari sistemi operativi.


Gianpaolo Ingegneri

27/12/2011 15:19:01

0

Sono d''accordo, l''FXAA non è decisamente antialiasing.

> Hai in mente uno sbocco di business o sempre comunque al livello di hobby
> ?

Dopo che ci ho lavorato tanto vorrei farne un business, possibilmente
interessando molti utenti online con qualcosa di originale. Il problema più
grande è la visibilità. Se io ad esempio facessi una serie di dimostrativi
sul lato tecnico del mio lavoro, non otterrei che un centinaio di visitatori
occasionali. Questo spiega perchè non mi sono mai cimentato a fare demo da
mettere online nonostante il gran materiale che ho prodotto in tutti questi
anni, non ne vale semplicemente la pena. Per il momento sto cercando di
raggiungere una versione stabile e purtroppo mi sono arenato nella computer
grafica, anche se spero di uscirne presto. Ormai ho capito che non ci sono
più grafici o musicisti che vogliono rischiare su di un progetto anonimo.

A me sarebbe bastato un grafico ed un musicista poi tutto il lavoro lo avrei
fatto da solo ed in tempi brevissimi, ma non c''è niente da fare, gli
interessi sono cambiati troppo in questi anni. Se in passato c''erano degli
artisti vogliosi di cimentarsi in un progetto qualsiasi, oggi gli stessi
utenti rivolgono le loro attenzioni su fenomeni passeggeri, tra forum, blog,
youtube, skin, mod, blender, zbrush, etc, c''è stata una frammentazione dei
talenti a favore del puro cazzeggio online, per cui l''unica cosa da fare se
non si hanno a disposizione delle risorse è quello di focalizzare
l''attenzione con una buona idea per farsi produrre del materiale senza manco
chiedere (stile Mugen tanto per intenderci). Dal mio punto di vista non
esiste altro modo per far affermare un proprio software e farlo girare in
rete senza un grosso budget di partenza, anche a livello hobbistico, non si
può punto e basta perchè non se c''è la visibilità tutto quello che fai cade
nel dimenticatoio e diventa inutile dopo 1 secondo.

Comunque, dopo una prima fase diciamo di promozione, se ci dovessi riuscire,
mi vorrei spostare su diversi settori, tra cui produzione di software per la
computer grafica e diffusione del framework su vari sistemi operativi.