ArsLudica.org Forum

Effettua l'accesso o una nuova registrazione.

Inserisci il nome utente, la password e la durata della sessione.
Ricerca avanzata  

News:

Autore Topic: Asset vettoriali o texture?  (Letto 1947 volte)

Ziggybee

  • Administrator
  • Hero Member
  • *****
  • Offline Offline
  • Post: 8.383
  • Gamer Extraordinaire
    • Mostra profilo
Asset vettoriali o texture?
« il: Gennaio 05, 2009, 22:41:08 »

Oggi mentre smanettavo ho notato che piuttosto che starmi a sbattere a creare asset che diventano entità vettoriali costituite da primitive linea (che quando sono molte sono anche un sacco lente), ottengo lo stesso risultato visivo utilizzando delle texture che rappresentano le entità vettoriali che voglio rappresentare.

Siccome ogni entità viene solo traslata e ruotata e mai zoomata, la cosa mi va anche bene. L'utilizzo di shading per motion blur e glow maschera bene anche il leggero flickering che a volte possono produrre le linee a determinate angolazioni su delle texture ed inoltre posso giocare anche meglio con lo spessore e la colorazione delle linee stesse (usando gradienti che vanno oltre il vertex colouring), creando più varietà. Su un televisore a risoluzione SD, inoltre, le texture rendono meglio delle linee.

Prestazionalmente, con migliaia di entità (tra particelle, nemici, proiettili etc...) lo shmup che usa le texture risulta circa 10 volte più veloce di quello che usa le primitive 3D, con il vantaggio che su 360 le prestazioni sono più continue anche in situazioni limite reali.

Ci sono dei problemi che magari sono noti ad altri (ma non a me) nell'utilizzare delle texture per fare fake vector graphics in 3D?

Qualcuno mi ha parlato di una tecnica alternativa che prevederebbe utilizzare dei pixel shader su dei modelli 3D o 2D per farne l'outline della sagoma, ottenendo lo stesso (o quasi) risultato. Vale la pena tentare o con centinaia di entità da shaderizzare ammazzo le prestazioni? Non sono un mago degli shader e visto che non sono una tecnologia focale dei miei progetti, non vorrei investirci troppo tempo dietro.
« Ultima modifica: Gennaio 05, 2009, 22:48:27 da z.e.r.o »
Connesso
Matteo Anelli

Vazkor: "Altro che Apple TV"

Monopoli

  • Hero Member
  • *****
  • Offline Offline
  • Post: 4.296
    • Mostra profilo
Re: Asset vettoriali o texture?
« Risposta #1 il: Gennaio 06, 2009, 10:33:50 »

Hai provato ad usare dei triangoli degeneri invece che delle primitive linea? cioe', dei triangoli che hanno due punti coincidenti.
L'hardware e' piu' allegro se lavora con i triangoli.

La tua soluzione invece non mi e' del tutto chiara, anche perche' non so cosa tu voglia fare :) Mi puoi spiegare meglio?
Connesso
Il mio blog agghiacciante
http://monopoliano.blogspot.com
E' Uscito! Compra qui: http://itunes.apple.com/us/album/crystal/id461134607

"Monopoli hai la voce da frocio ma sei un figo sull'Arsludicast."

Cherno

  • Redazione
  • Hero Member
  • *****
  • Offline Offline
  • Post: 3.829
    • Mostra profilo
Re: Asset vettoriali o texture?
« Risposta #2 il: Gennaio 06, 2009, 11:13:42 »

Nel momento in cui usi una texture ovviamente perdi tutto il vantaggio del disegno vettoriale. Se ho capito bene il pixel shader che ti fa l'outline vorresti usarlo in realtime per ottenere la derivazione vettoriale->texture2d: sono convinto sia un suicidio prestazionale, piuttosto potresti utilizzarlo e salvarti i risultati in load time. Meglio ancora usarlo per creare gli asset 2d direttamente dal programma che utilizzi per vettorializzare, con qualcosa tipo "salva in bitmap"

@Ale: ma usando i triangoli degeneri si possono disegnare linee visibili? Io ricordo che ne facevo largo uso per disegnare delle patch di terreno separate
nonostante spedissi dei triangle strip alla scheda video.

Monopoli

  • Hero Member
  • *****
  • Offline Offline
  • Post: 4.296
    • Mostra profilo
Re: Asset vettoriali o texture?
« Risposta #3 il: Gennaio 06, 2009, 11:38:25 »

Nel momento in cui usi una texture ovviamente perdi tutto il vantaggio del disegno vettoriale. Se ho capito bene il pixel shader che ti fa l'outline vorresti usarlo in realtime per ottenere la derivazione vettoriale->texture2d: sono convinto sia un suicidio prestazionale, piuttosto potresti utilizzarlo e salvarti i risultati in load time. Meglio ancora usarlo per creare gli asset 2d direttamente dal programma che utilizzi per vettorializzare, con qualcosa tipo "salva in bitmap"

@Ale: ma usando i triangoli degeneri si possono disegnare linee visibili? Io ricordo che ne facevo largo uso per disegnare delle patch di terreno separate
nonostante spedissi dei triangle strip alla scheda video.

So che Dd3dxline li usa :D Se li piazzi in wireframe dovrebbero palesarsi.
Connesso
Il mio blog agghiacciante
http://monopoliano.blogspot.com
E' Uscito! Compra qui: http://itunes.apple.com/us/album/crystal/id461134607

"Monopoli hai la voce da frocio ma sei un figo sull'Arsludicast."

Cherno

  • Redazione
  • Hero Member
  • *****
  • Offline Offline
  • Post: 3.829
    • Mostra profilo
Re: Asset vettoriali o texture?
« Risposta #4 il: Gennaio 06, 2009, 11:51:58 »

figata d3dxline mica lo sapevo :D , è stata introdotta con le dx9 a quanto leggo..stando alla guida mi sa che non usa triangoli degeneri bensì dei triangle strips normalissimi, fatti apposta per la dimensione di linea desiderata. Scusa Matteo, ma tu cosa utilizzi per disegnare le linee?

Ziggybee

  • Administrator
  • Hero Member
  • *****
  • Offline Offline
  • Post: 8.383
  • Gamer Extraordinaire
    • Mostra profilo
Re: Asset vettoriali o texture?
« Risposta #5 il: Gennaio 06, 2009, 14:45:45 »

Bella l'idea dei triangoli degeneri, effettivamente è anche molto più veloce (ho fatto un test al volo, non sono a casa mia e non posso provarlo sull'engine). Mi sa che la uso sugli effetti particellari delle esplosioni e del grazing, e forse anche per alcuni proiettili!

Quello che ho realizzato è uno stile grafico vettoriale simile ai classici arcade come Asteroids. Insomma grafica poligonale.

Poiché si tratta di uno shmup maniacale a scrolling verticale, volevo limitare al minimo le rotture di palle non proprio necessarie per la creazione degli asset, perché ce ne sono già tante sul bilanciamento del gameplay. Fare data entry dei vertici a mano per creare gli asset è un ditone nell'ano e mi fa perdere un sacco di tempo che potrei investire meglio a fare il tuning degli storyboard dei livelli...

Per gli sfondi c'è meno problema, lì userò probabilmente dei modelli 3D opportunamente texturizzati o degli effetti di scrolling, a seconda del tema del livello. In realtà anche per i nemici potrei utilizzare modelli 3D opportunamente texturizzati per dargli l'impressione di essere poligonali (stile darwinia, solo con geometrie piane), ma continua a sembrarmi uno sbattimento immenso rispetto a prendere un editor di grafica vettoriale e disegnare gli asset con strumenti più adatti allo scopo e visualizzarli come quad texturizzati.

Quindi valutavo l'idea di fare fake vector graphics (come fa Warning Forever) per le entità più complesse e dettagliate (come i nemici, proiettili particolararmente complessi ed i boss o pezzi di essi), ovvero usare delle texture dall'apparenza vettoriale create con un editor grafico e colorate dinamicamente, sia per guadagnare in prestazioni (le scene sono belle incasinate ed il framerate deve essere costante), sia per evitarmi la rogna del data enty manuale (o di scrivere da zero un importer per SVG o XAML) per le geometrie, tanto non c'è zooming e la differenza grafica dopo il postprocess è pressoché inesistente.

Per le collisioni continuo ad usare armature geometriche "logiche" che però sono notevolmente più semplici dei nemici più elaborati.

Volevo solo sapere se c'erano dei problemi noti di altra natura oltre alle normali aberrazioni da texturing cheper lo più scompaiono grazie al postprocess e ad una scelta adeguata dello spessore delle linee nelle texture.
Connesso
Matteo Anelli

Vazkor: "Altro che Apple TV"

Monopoli

  • Hero Member
  • *****
  • Offline Offline
  • Post: 4.296
    • Mostra profilo
Re: Asset vettoriali o texture?
« Risposta #6 il: Gennaio 06, 2009, 14:51:34 »

figata d3dxline mica lo sapevo :D , è stata introdotta con le dx9 a quanto leggo..stando alla guida mi sa che non usa triangoli degeneri bensì dei triangle strips normalissimi, fatti apposta per la dimensione di linea desiderata. Scusa Matteo, ma tu cosa utilizzi per disegnare le linee?


ah ok, allora li usavo io e bon :D
Connesso
Il mio blog agghiacciante
http://monopoliano.blogspot.com
E' Uscito! Compra qui: http://itunes.apple.com/us/album/crystal/id461134607

"Monopoli hai la voce da frocio ma sei un figo sull'Arsludicast."

Ziggybee

  • Administrator
  • Hero Member
  • *****
  • Offline Offline
  • Post: 8.383
  • Gamer Extraordinaire
    • Mostra profilo
Re: Asset vettoriali o texture?
« Risposta #7 il: Gennaio 06, 2009, 14:55:30 »

figata d3dxline mica lo sapevo :D , è stata introdotta con le dx9 a quanto leggo..stando alla guida mi sa che non usa triangoli degeneri bensì dei triangle strips normalissimi, fatti apposta per la dimensione di linea desiderata. Scusa Matteo, ma tu cosa utilizzi per disegnare le linee?

DrawIndexedPrimitives
con Line o LineList a seconda dei casi.
Connesso
Matteo Anelli

Vazkor: "Altro che Apple TV"

Monopoli

  • Hero Member
  • *****
  • Offline Offline
  • Post: 4.296
    • Mostra profilo
Re: Asset vettoriali o texture?
« Risposta #8 il: Gennaio 06, 2009, 15:06:10 »

figata d3dxline mica lo sapevo :D , è stata introdotta con le dx9 a quanto leggo..stando alla guida mi sa che non usa triangoli degeneri bensì dei triangle strips normalissimi, fatti apposta per la dimensione di linea desiderata. Scusa Matteo, ma tu cosa utilizzi per disegnare le linee?

DrawIndexedPrimitives
con Line o LineList a seconda dei casi.


Che teoricamente andrebbe benissimo, con una scheda tipo quelle specializzate per il cad sarebbe un missile. Pero' le schede video per i videogiocatori sono davvero veloci solo coi triangoli :D
Connesso
Il mio blog agghiacciante
http://monopoliano.blogspot.com
E' Uscito! Compra qui: http://itunes.apple.com/us/album/crystal/id461134607

"Monopoli hai la voce da frocio ma sei un figo sull'Arsludicast."

Ziggybee

  • Administrator
  • Hero Member
  • *****
  • Offline Offline
  • Post: 8.383
  • Gamer Extraordinaire
    • Mostra profilo
Re: Asset vettoriali o texture?
« Risposta #9 il: Gennaio 06, 2009, 15:06:49 »

Infatti, poi devi vedere la Xbox come arranca!
Connesso
Matteo Anelli

Vazkor: "Altro che Apple TV"

Cherno

  • Redazione
  • Hero Member
  • *****
  • Offline Offline
  • Post: 3.829
    • Mostra profilo
Re: Asset vettoriali o texture?
« Risposta #10 il: Gennaio 06, 2009, 20:21:13 »

figata d3dxline mica lo sapevo :D , è stata introdotta con le dx9 a quanto leggo..stando alla guida mi sa che non usa triangoli degeneri bensì dei triangle strips normalissimi, fatti apposta per la dimensione di linea desiderata. Scusa Matteo, ma tu cosa utilizzi per disegnare le linee?

DrawIndexedPrimitives
con Line o LineList a seconda dei casi.


Giusto, dx8 aveva quello però openGL a quei tempi con le linee aveva molte più possibilità. Tanto e vero che in dx9 hanno messo la d3dxline che fa le stesse cose di gl. :sisi:

Ziggybee

  • Administrator
  • Hero Member
  • *****
  • Offline Offline
  • Post: 8.383
  • Gamer Extraordinaire
    • Mostra profilo
Re: Asset vettoriali o texture?
« Risposta #11 il: Gennaio 06, 2009, 21:30:25 »

No, non fa le stesse cose, perché OpenGL con le sue Line API fa riferimento ad hardware dedicato per CADStation che sulle schede consumer DX non c'è.   

D3DXLine è un wrapper per emulare le funzioni OpenGL in DirectX ad uso dei produttori di software 3D che in questi ultimi anni sono stati obbligati a fare il porting visto il livello osceno di supporto OpenGL sulle schede mainstream. La puoi usare anche nel gaming ma fa degli assunti che non sono saggi per un gioco, compresa l'enumerazione di alcune capabilities che in realtà non danno garanzie sull'affidabilità prestazionale delle funzioni enumerate! Tutto quello che fa è disegnare una linea come un quad texturizzato di ampiezza variabile sulla base delle tue preferenze.

E' facilissimo replicarne le funzionalità algoritmicamente ed hai molto più controllo dell'utilizzo di D3DX. In DX10\XNA è ancora più semplice.

L'implementazione D3DX ha un sacco di limiti, tra cui l'incapacità di applicare alcune trasformazioni ed effetti alle linee stesse per via del codice di rendering che è del tutto incapsulato. In alcuni casi l'assenza di mitering e la discontinuità di resa col bilinear filtering sulle linee in movimento di spessore arbitrario creano artefatti, in particolar modo se usi l'alpha blending o risoluzioni basse (tipo SDTV) dove quel pixel in più di spessore che a volte aggiunge si nota eccome.

Come ho detto, fai prima a scriverti una funzioncina di poche righe che disegna una triangle strip con mitering fatta come si deve! Tanto sempre triangoli spammi. :)
Connesso
Matteo Anelli

Vazkor: "Altro che Apple TV"

Cherno

  • Redazione
  • Hero Member
  • *****
  • Offline Offline
  • Post: 3.829
    • Mostra profilo
Re: Asset vettoriali o texture?
« Risposta #12 il: Gennaio 06, 2009, 21:51:48 »

Infatti io ho sempre fatto così, in directx :D

Monopoli

  • Hero Member
  • *****
  • Offline Offline
  • Post: 4.296
    • Mostra profilo
Re: Asset vettoriali o texture?
« Risposta #13 il: Gennaio 06, 2009, 22:57:52 »

Beh, fanno tutti così :D In generale D3dxline e le funzioni per scrivere vengono usate fondamentalmente in debug, per disegnare velocemente delle linee o per scrivere del testo, tanto in quei casi non ha importanza che lo si faccia in maniera ottimizzata.
Connesso
Il mio blog agghiacciante
http://monopoliano.blogspot.com
E' Uscito! Compra qui: http://itunes.apple.com/us/album/crystal/id461134607

"Monopoli hai la voce da frocio ma sei un figo sull'Arsludicast."
 

Pagina creata in 0.015 secondi con 15 interrogazioni al database.