Programmazione grafica che replica la transizione da Chrono Trigger all'interno del gate


9

Ho iniziato a giocare a questo gioco per la prima volta ultimamente e questo ha davvero suscitato il mio interesse

Puoi vedere la transizione in movimento a partire da ~ 12: 08

Sembra esserci qualche matematica interessante che si sta svolgendo lì. Sembrerebbe che ci siano due diversi punti di vista combinati insieme. Le increspature blu vengono prima visualizzate sullo sfondo e poi le onde viola oscillanti sembrano essere rese su una sorta di pseudo proiezione 3D.

Come sono arrivati ​​esattamente a questo risultato, tuttavia, è al di là di me e la curiosità ha avuto la meglio su di me.

Non mi aspetto che un sacco di gente saprebbe come questo è fatto in particolare, ma se qualcuno ha fatto una vasta programmazione grafica, forse potrebbero illuminarmi.


2
Sembra 3 piani, uno sopra, uno sotto e uno di fronte alla telecamera.
MichaelHouse

I piani in alto / in basso sono inoltre ridimensionati in modo non uniforme per dare l'illusione della profondità. Non c'è "fotocamera", solo alcune cose di ridimensionamento o meno. Quello "di fronte alla telecamera" è probabilmente solo un'animazione o qualcosa del genere, o una piastrellatura intelligente di un'animazione.
RandyGaul,

1
Dai un'occhiata a questo articolo di Wikipedia: en.wikipedia.org/wiki/Mode_7
Neverender,

Risposte:


11

Ho provato a duplicare l'effetto usando lo shader.

Shader00 Center: https://www.shadertoy.com/view/XsXSz2

Shader01 Lati: https://www.shadertoy.com/view/4sXSz2

:) potresti, come diceva Byte56, installare tre aerei. Un piano rivolto verso la telecamera direttamente in avanti con Shader00, e poi due piani con Shader01, forse come menzionato da RandyGaul, in alto / in basso non uniformemente ridimensionati per dare l'illusione della profondità.

Credo che dovrebbero dare un aspetto 3D sufficiente per essere convincenti.

Entrambi i shader non sono esattamente gli stessi del link di YouTube (inoltre sono più di bozza approssimativa). Tuttavia credo che questi shader possano, spero, darti un posto per iniziare a costruire la tua versione.

Tutorial: come realizzare un semplice motivo a strisce.

Ogni punto nel piano ha coordinate. Il tentativo di creare un effetto shader consiste essenzialmente nel visualizzare la matematica 2D sul piano. Qui lascia che ti presenti un semplice esempio.

//This shader will visualize coordinates 
vec2 uv = gl_FragCoord.xy / iResolution.xy;
gl_FragColor = vec4(uv.x,uv.y,0,1);

inserisci qui la descrizione dell'immagine

Il colore rosso rappresenterà la coordinata x e la tonalità verde rappresenterà la coordinata y. Per ora, vogliamo creare l'effetto shader più semplice; una striscia. Non avremo bisogno del valore uv.y per questo tutorial.

vec2 uv = gl_FragCoord.xy / iResolution.xy;
gl_FragColor = vec4(uv.x,0,0,1);

inserisci qui la descrizione dell'immagine

Puoi vedere che la tonalità rossa diventa intensa quando si dirige verso il lato destro. Questo perché il valore x della coordinata aumenta quando ci si sposta sul lato destro; la coordinata x dell'estremità sinistra inizia da 0 e la coordinata x dell'estremità destra è 1.

Dal momento che abbiamo questa comprensione di base proviamo qualcosa di "intuitivo"

vec2 uv = gl_FragCoord.xy / iResolution.xy;
float color = 0.0;
if(uv.x < .5 ) color= 1.0 ;
gl_FragColor = vec4(color,0,0,1);

inserisci qui la descrizione dell'immagine

Lì hai un motivo a strisce. Aspetta ... non sembra del tutto giusto. Sì, questo è solo rosso e nero. Il motivo a strisce è composto da più di due sole sezioni di colore. Là...!

vec2 uv = gl_FragCoord.xy / iResolution.xy;
float color = 0.0;
if(uv.x < .2 ||(uv.x >.4 && uv.x < .6) || (uv.x > .8 && uv.x <1.0 )) color= 1.0 ;
gl_FragColor = vec4(color,0,0,1);

inserisci qui la descrizione dell'immagine

ma cosa succede se vogliamo creare un numero N di striscia?

Quello che sto tentando di mostrare è che se provi ad avvicinarti alla programmazione dello shader con più della "logica" di programmazione tradizionale, allora probabilmente fallirai. Quando si tratta di shader, si tratta di matematica.

A proposito di matematica, qual è il modello che più assomiglia al modello "a strisce"? In altre parole, qual è l'equazione che sembra strisce? Sì. Y = sin (X). Tuttavia il nostro valore X varia da 0,0 ~ 1,0 Se vogliamo usare Y = sin (X) vogliamo che il nostro valore x sia compreso tra 0,0 ~ 6,28 (che è approssimativamente 2 PI)

vec2 uv = gl_FragCoord.xy / iResolution.xy;
float x = uv.x * 2.0 *PI; 
float y = sin(x);
gl_FragColor = vec4(y,0,0,1);

inserisci qui la descrizione dell'immagine

Ora abbiamo "striscia" in termini di modello generato da un'equazione. Perché dovremmo adottare questo approccio? Questo non solo può essere più veloce, ma elimina anche la necessità di scrivere brutte condizioni "if" per avere N numero di strisce. Se volessimo avere più di una striscia, potremmo semplicemente estendere il motivo aumentando ulteriormente il valore X massimo.

vec2 uv = gl_FragCoord.xy / iResolution.xy;
float x = uv.x * (2.0 *PI * 10.0); //ta dan!
float y = sin(x);
gl_FragColor = vec4(y,0,0,1);

inserisci qui la descrizione dell'immagine

Potresti dire che questo shader non produce la striscia perfetta come dai primi shader, ma in realtà, tutto ciò che devi fare è scrivere un'equazione più adatta!

vec2 uv = gl_FragCoord.xy / iResolution.xy;
float x = uv.x * (2.0 *PI * 10.0);
float y = sin(x) / abs(sin(x) );
gl_FragColor = vec4(y,0,0,1);

inserisci qui la descrizione dell'immagine weeee ~~~

Avanti: Come realizzare un motivo a strisce ondulate.


1
Chrono Trigger è stato originariamente rilasciato per SNES, che non aveva aerei, ma aveva la Modalità 7 . Stesso concetto, solo un dettaglio tecnico.
Icy Defiance il

2
Forse puoi aggiungere una risposta descrivendo come vengono creati gli shader? Altrimenti, se i collegamenti muoiono mai, questa risposta sarà per lo più inutile.
MichaelHouse

Concordato con Byte56, dove qualcuno può imparare le conoscenze per creare shader glsl come questi e qual è il tuo processo di pensiero quando lo scrivi?
oxysoft,

1
@oxysoft Questi tipi di shader sono più varianti rispetto ai tradizionali shader ad effetto di luce. Per quanto siano specifici, non ci sono molte risorse che coprono "come realizzarli". Tuttavia ciò non significa che non sia possibile trovare esempi. Prova shadertoy.com e altri siti Web "fun shader" per vedere molti ottimi esempi di cosa puoi fare con shader. Il metodo migliore, per farti imparare a realizzarli, (penso) è quello di imparare solo pratiche generali di shader e studiare quegli esempi di "shader divertenti" trovati su Internet.
Tofu_Craving_Redish_BlueDragon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.