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: [PC] Esperimento  (Letto 4480 volte)

Cherno

  • Redazione
  • Hero Member
  • *****
  • Offline Offline
  • Post: 3.829
    • Mostra profilo
Re: [PC] Esperimento
« Risposta #30 il: Gennaio 06, 2009, 01:26:00 »

No non c'entra, non è un problema di sgranamento od altro solo che adesso sono un pò stanco per spiegare. Domani farò la mia richiesta in maniera più chiara :D

Cherno

  • Redazione
  • Hero Member
  • *****
  • Offline Offline
  • Post: 3.829
    • Mostra profilo
Re: [PC] Esperimento
« Risposta #31 il: Gennaio 06, 2009, 12:01:15 »

Adesso sono in condizioni di spiegare:

Ogni piano di parallasse che ho creato non è nient'altro che un rettangolo(2 triangoli quindi :D ) texturizzato. Per dare l'impressione di movimento traslo semplicemente le coordinate di texture ad una certa velocità. Il fatto è che non c'è corrispondenza pixel a schermo->coordinata di texture, quindi il problema è far muovere alla stessa velocità i miei sprite con il piano di parallasse al quale poggiano, dato che gli sprite li muovo in pixel, mentre il piano in coordinate di texture. Dovrei trovare la relazione fra i due, ma proprio non mi viene ed il risultato è che gli sprite che poggiano su un piano di parallasse, quando questo si muove, pattinano.

Ziggybee

  • Administrator
  • Hero Member
  • *****
  • Offline Offline
  • Post: 8.383
  • Gamer Extraordinaire
    • Mostra profilo
Re: [PC] Esperimento
« Risposta #32 il: Gennaio 06, 2009, 14:14:03 »

Puoi usare una striscia di quad con la stessa texture ripetuta invece che uno soltanto.

Per lo scrolling, manipoli il vertex buffer (o ridisegni i quad se usi direttamentre le primitive) che usi per disegnarli per fare in modo che nella direzione in cui il PG cammina, ci sia sempre un quad pronto offscreen. Credo ti basti una striscia con 3 quad, uno offscreen davanti e uno offscreen dietro (se lo scroll è bidirezionale). Non appena entra nella visuale uno dei quad che sono offscreen (diciamo, quando è per metà nella visuale e metà ancora fuori), mofichi gli indici dei vertici così che quello che è offscreen nella direzione opposta diventa il nuovo offscreen nella direzione in cui cammini.
In questo modo inoltre hai il vantaggio che puoi  animare e creare sfondi compositi (con attori o entità che si muovono coerentemenre con le regole fisiche del tuo mondo) tramite l'additività del vettore velocità che usi per la traslazione della parallasse senza troppi problemi.

Pensa ad un nemico volante che si muova sullo sfondo del terzo layer ad una velocità X (che poi è la stessa che ha quando lo hai sul layer in cui si svolge l'azione di gioco). Se il vettore velocità che usi per la parallasse del terzo layer è Y, la sua velocità apparente sarà X + Y.

Si usano trucchetti simili anche quando nei simulatori spaziali vuoi dar l'impressione della velocità facendo vedere dei punti o delle point texture che si muovono verso la camera: prepari una matrice 3x3 di 27 cubi con il "rumore" che simula la velocità attorno alla camera e aggiorni gli indici man mano che la camera si muove. Poi disegni la scena.

In questo modo utilizzi la stessa unità di misura anche per lo sfondo ed eviti molti bug (in particolare sui chip integrati economici) che alcuni chipset o driver hanno sulla manipolazione delle texture coordinates. Mi sa che guadagni anche qualcosina prestazionalmente (modificare un vertex buffer dovrebbe costare meno di animare texture) ma non penso faccia una differenza significativa se non sui chipset più scarsi!
Connesso
Matteo Anelli

Vazkor: "Altro che Apple TV"

Monopoli

  • Hero Member
  • *****
  • Offline Offline
  • Post: 4.296
    • Mostra profilo
Re: [PC] Esperimento
« Risposta #33 il: Gennaio 06, 2009, 14:18:19 »

Come dice Matteo funziona, pero' anche l'idea dell'UVshift mica e' brutta. Non basta fare 1.f/PixelDelloSchermo per avere il numerello che equivale al pixel?
Mi ricordo che su PC c'e' qualcosa tipo lo shift di un pixel, che nelle skybox rompe le balle. Se vedi che c'e', compensa :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: [PC] Esperimento
« Risposta #34 il: Gennaio 06, 2009, 14:51:25 »

Come dice Matteo funziona, pero' anche l'idea dell'UVshift mica e' brutta. Non basta fare 1.f/PixelDelloSchermo per avere il numerello che equivale al pixel?
Mi ricordo che su PC c'e' qualcosa tipo lo shift di un pixel, che nelle skybox rompe le balle. Se vedi che c'e', compensa :D

Eh, ma molto spesso c'è shifting anche nelle implementazioni dei driver (o magari sono errori di approssimazione per eccesso o difetto in alcuni calcoli? Boh) e quello nn c'è modo di leggerlo dai capbits.

Ne sanno qualcosa i tuoi colleghi di LOTRO cosa gli sta facendo penare NVIDIA con gli ultimi driver per Vista con le modifiche all'UV mapping sulle DX 10! :)
Connesso
Matteo Anelli

Vazkor: "Altro che Apple TV"

Cherno

  • Redazione
  • Hero Member
  • *****
  • Offline Offline
  • Post: 3.829
    • Mostra profilo
Re: [PC] Esperimento
« Risposta #35 il: Gennaio 06, 2009, 15:40:29 »

Si effettivamente la strada indicata da matteo era la prima che volevo percorrere, poi però mi son detto: "fanculo, i buffer write only sono fatti apposta per essere veloci" e quindi mi è venuta in mente l'idea dell'uv shifting. :sisi:

La storia dello shift del pixel non è il famoso 0.5f per la storia texel/pixel? :D

Cherno

  • Redazione
  • Hero Member
  • *****
  • Offline Offline
  • Post: 3.829
    • Mostra profilo
Re: [PC] Esperimento
« Risposta #36 il: Gennaio 06, 2009, 21:00:51 »

Come dice Matteo funziona, pero' anche l'idea dell'UVshift mica e' brutta. Non basta fare 1.f/PixelDelloSchermo per avere il numerello che equivale al pixel?
Mi ricordo che su PC c'e' qualcosa tipo lo shift di un pixel, che nelle skybox rompe le balle. Se vedi che c'e', compensa :D

Sono proprio un pollo :D ...e dire che la stessa cosa la faccio anche per animare gli sprite :D

Ziggybee

  • Administrator
  • Hero Member
  • *****
  • Offline Offline
  • Post: 8.383
  • Gamer Extraordinaire
    • Mostra profilo
Re: [PC] Esperimento
« Risposta #37 il: Gennaio 06, 2009, 21:40:13 »

In realtà nel tuo caso il fatidico pixel traslato che potresti incontrare nell'UV Mapping su PC non ti fa né caldo né freddo, perché se gli sfondi sono ciclici semplicemente partiranno traslati di 1px rispetto alle coordinate UV che usi, senza artefatti.

Ti rimane un problema solo se vuoi aggiungere qualcosa di più dinamico sui layer di sfondo ma fino a che devi scrollare un'immagine sono soluzioni pressoché equivalenti.
Connesso
Matteo Anelli

Vazkor: "Altro che Apple TV"

Cherno

  • Redazione
  • Hero Member
  • *****
  • Offline Offline
  • Post: 3.829
    • Mostra profilo
Re: [PC] Esperimento
« Risposta #38 il: Gennaio 07, 2009, 01:41:50 »

Piccolo update: oggi ho revisionato il codice, ho commentato le classi descrivendone il funzionamento ed ho implementato un sistema di parallasse, come si usava fare tanti anni fa su console e su amiga. Ecco uno screen:



Dallo screen non si vede, però ci sono 10 livelli di parallasse. Niente di straordinario però in movimento fanno il loro lavoro :D

Mi fa ridere pensare che oggi anche 100 livelli di parallasse sarebbero tecnicamente una bazzecola da far gestire all'hardware, mentre ai tempi si sarebbe gridato al miracolo diddio di fronte all'affermazione "10 livelli di parallasse" :D

Già proprio l'altro ieri ho parlato con un developer che sta per lanciare un editor open source molto potente per giochi 2D per XNA che ha un limite di 6 layer di paralasse mentre tutte le altre dimensioni sono customizzabili, memoria e piattaforma permettendo.
Al che gli ho domandato il perché potessi fare una mappa lunga 10 milioni di pixel e non profonda 500 layer.

Perchè probabilmente ha fatto come me ora: ha hardcodato il layering. Io conto di parametrizzare il tutto a breve, forte anche del fatto che ho risolto il mio precedente problema pixel/coordinate uv :sisi:
 

Pagina creata in 0.017 secondi con 15 interrogazioni al database.