6/2/2020
Premessa
Eccoci giunti ad un argomento non molto trattato, l'attivazione degli shader basati sulle opengl, ovvero nel Mame identificati come GLSL.
Devo dire che, a parte l'iniziale difficoltà nel settarli e modificarli, per via del linguaggio di programmazione degli shader, fortunatamente ben commentato, una volta provati si ottengono dei risultati davvero interessanti.
Ho trovato, ma questo sarebbe da verificare tra gli utenti, una velocità di esecuzione più veloce rispetto all'utilizzo degli HLSL basati su direct3d. Nonostante una curvatura dello schermo più complessa.
Lo scanline del glsl plain è molto "crisp", marcato e contrastato e la resa dei colori è superba.
Ma questo dipende dal tipo di shader utilizzato, come potete vedere dalle foto.
È possibile settare la distanza di visione dal monitor, simulando una sorta di prospettiva di visione dall'alto in stile cab di un tempo, con i monitor fissati in basso e non frontalmente, per la gioia dei nostri occhi.
qualche esempio, taglio lo screen a 1280x1024 anche per evitare effetto moiré.
Devo dire che, a parte l'iniziale difficoltà nel settarli e modificarli, per via del linguaggio di programmazione degli shader, fortunatamente ben commentato, una volta provati si ottengono dei risultati davvero interessanti.
Ho trovato, ma questo sarebbe da verificare tra gli utenti, una velocità di esecuzione più veloce rispetto all'utilizzo degli HLSL basati su direct3d. Nonostante una curvatura dello schermo più complessa.
Lo scanline del glsl plain è molto "crisp", marcato e contrastato e la resa dei colori è superba.
Ma questo dipende dal tipo di shader utilizzato, come potete vedere dalle foto.
È possibile settare la distanza di visione dal monitor, simulando una sorta di prospettiva di visione dall'alto in stile cab di un tempo, con i monitor fissati in basso e non frontalmente, per la gioia dei nostri occhi.
qualche esempio, taglio lo screen a 1280x1024 anche per evitare effetto moiré.
glsl plain, con scanline più marcato, direi in stile crt vga
Qui, invece, la resa del glsl bilinear, davvero molto arcade.
Anche se devo dire che con i giochi con risoluzioni più basse, non rende bene, sfoca troppo.
Anche se devo dire che con i giochi con risoluzioni più basse, non rende bene, sfoca troppo.
Come attivare gli shader glsl
Per prima cosa dobbiamo scaricare la cartella con gli shader e fare essenzialmente 4 cose:
1) Copiare la cartella OSD decompressa
1) Copiare la cartella OSD decompressa
osd.zip | |
File Size: | 28 kb |
File Type: | zip |
(quindi non zippata, per intenderci) e posizionarla nella directory principale del mame;
2) Nel mame.ini nella riga video cancellare d3d e scrivere opengl;
# OSD VIDEO OPTIONS
#
video opengl
3) Nelle righe glsl del mame.ini abilitare 1 su queste due voci
gl_glsl 1
gl_glsl_filter 1
4) Settare, sempre nel mame.ini il precorso corretto degli shader che vogliamo utilizzare, in questo caso, ad esempio
glsl_shader_mame0 "C:\mame\osd\shader\glsl_plain"
glsl_shader_mame1 "C:\mame\osd\CRT-geom"
Mi raccomando, settate bene il percorso dei file, andate in proprietà del file e copiatelo, se necessario, perchè in caso di errore poi il mame non vi parte e rimane bloccato.
2) Nel mame.ini nella riga video cancellare d3d e scrivere opengl;
# OSD VIDEO OPTIONS
#
video opengl
3) Nelle righe glsl del mame.ini abilitare 1 su queste due voci
gl_glsl 1
gl_glsl_filter 1
4) Settare, sempre nel mame.ini il precorso corretto degli shader che vogliamo utilizzare, in questo caso, ad esempio
glsl_shader_mame0 "C:\mame\osd\shader\glsl_plain"
glsl_shader_mame1 "C:\mame\osd\CRT-geom"
Mi raccomando, settate bene il percorso dei file, andate in proprietà del file e copiatelo, se necessario, perchè in caso di errore poi il mame non vi parte e rimane bloccato.
Come variare la curvatura dello schermo all'interno dello shader
Se volete variare la curvatura dello schermo fate in questo modo.
Con un editor di testi aprite il file CRT-geom.vsh e cambiate questi parametri evidenziati in rosso:
// simulated distance from viewer to monitor
d = 2.0;
// radius of curvature
R = 1.5;// tilt angle in radians
// (behavior might be a bit wrong if both components are nonzero)
const vec2 angle = vec2(0.0,-0.15);
// size of curved corners
cornersize = 0.03;
Volendo, quindi, potete anche eliminare la curvatura dello schermo e beneficiare soltanto dell'effetto scanline.
È possibile anche variare l'overscan tramite questa riga
// overscan (e.g. 1.02 for 2% overscan)
overscan = vec2(1.01,1.01);
Con un editor di testi aprite il file CRT-geom.vsh e cambiate questi parametri evidenziati in rosso:
// simulated distance from viewer to monitor
d = 2.0;
// radius of curvature
R = 1.5;// tilt angle in radians
// (behavior might be a bit wrong if both components are nonzero)
const vec2 angle = vec2(0.0,-0.15);
// size of curved corners
cornersize = 0.03;
Volendo, quindi, potete anche eliminare la curvatura dello schermo e beneficiare soltanto dell'effetto scanline.
È possibile anche variare l'overscan tramite questa riga
// overscan (e.g. 1.02 for 2% overscan)
overscan = vec2(1.01,1.01);