Bennu Game Development

Foros en Español => Mesa de Ayuda => Mensaje iniciado por: Ikki en Marzo 20, 2017, 01:13:06 pm

Título: Filtro o Shader para efecto de televisor CRT
Publicado por: Ikki en Marzo 20, 2017, 01:13:06 pm
Para comenzar, saludos a todos los miembros de la comunidad. Soy un novato en el mundo de Bennu y un recién llegado al foro.

Estoy empezando a desarrollar un juego que va a intentar capturar el espíritu del software de las consolas de 16 bits (en especial de SEGA Mega Drive/Genesis). Para ello, deseo conseguir un efecto muy particular y estoy teniendo problemas para conseguirlo; la idea es aplicar un filtro o shader al juego para simular la pantalla de un antiguo televisor CRT, de manera similar a lo que se consigue al aplicar el filtro NTSC de Blargg (http://blargg.8bitalley.com/libs/ntsc.html) en los emuladores de consolas clásicas. Estoy utilizando 320x224 como resolución, para luego escalar todo por medio de scale_resolution. ¿Es posible conseguir tal efecto? ¿Se pueden utilizar shaders en Bennu o Pixtudio? De ser así, puede alguien guiarme a un artículo o tutorial con la información de como hacerlo? Si es difícil de lograr, me contentaría con poder aplicar un ligero blur a todo el buffer de video y luego dibujar scanlines por encima, pero desconozco si es posible procesar dicho buffer antes de que sea puesto en pantalla en Bennu.

Agradecería cualquier tipo de ayuda.
Título: Re:Filtro o Shader para efecto de televisor CRT
Publicado por: JaViS en Marzo 20, 2017, 01:24:04 pm
Yo lo que hago es bajarme una de estas imagenes con el efecto scanline y adaptarla al tamaño de mi resolucion:


https://www.google.com.ar/search?q=CRT+layer+png&client=ubuntu&espv=2&source=lnms&tbm=isch&sa=X&ved=0ahUKEwjLh-CTgebSAhVKj5AKHVBDBPcQ_AUIBigB&biw=1440&bih=772#tbm=isch&q=CRT+effect+png&*&imgrc=lJpAWW3c0MBo3M:


La uso colocandola como un proceso encima del resto, con un flag = 32. El efecto no es tan bueno como el de un shader, pero queda bien: https://twitter.com/javisarias/status/817430502529495041
Título: Re:Filtro o Shader para efecto de televisor CRT
Publicado por: Ikki en Marzo 20, 2017, 06:52:38 pm
Yo lo que hago es bajarme una de estas imagenes con el efecto scanline y adaptarla al tamaño de mi resolucion:


https://www.google.com.ar/search?q=CRT+layer+png&client=ubuntu&espv=2&source=lnms&tbm=isch&sa=X&ved=0ahUKEwjLh-CTgebSAhVKj5AKHVBDBPcQ_AUIBigB&biw=1440&bih=772#tbm=isch&q=CRT+effect+png&*&imgrc=lJpAWW3c0MBo3M:


La uso colocandola como un proceso encima del resto, con un flag = 32. El efecto no es tan bueno como el de un shader, pero queda bien: https://twitter.com/javisarias/status/817430502529495041

JaViS, la solución que sugieres parece funcionar bastante bien en tu juego. ¿Que resolución utilizas? ¿Escalas la pantalla con scale_resolution? Puede que me equivoque, pero si usas una resolución muy baja (como en mi caso, 320x224), al poner la imagen de scanlines como un proceso va a escalarse y a pixelarse como el resto de los procesos cuando entre en efecto scale_resolution. Lo ideal sería poder estampar un png con los scanlines (que tenga el tamaño especificado en scale_resolution) justo antes del blit final que dibuje el buffer en pantalla. De todas maneras voy a probar tu sugerencia. Se agradece.
Título: Re:Filtro o Shader para efecto de televisor CRT
Publicado por: JaViS en Marzo 21, 2017, 05:25:47 am
Estas en lo correcto.


Yo uso dos resoluciones, 640x 360, y 1280x720, y tengo dos imagenes, una para cada resolucion, lo que tienen que intentar es que el tamaño del pixel del efecto de scanline sea el mismo que el del resto del juego. En mi juego eso no se nota mucho de todos modos, porque uso un efecto de zoom, y el tamaño de los pixels varía.
Título: Re:Filtro o Shader para efecto de televisor CRT
Publicado por: Ikki en Marzo 22, 2017, 08:06:01 am
JaViS, muchas gracias por tus respuestas. Voy a seguir buscando en el foro, a ver si doy con una forma de hacerlo. Mi intención es utilizar gráficos para una resolución de 320x224, pero en todo caso podría tener varios conjuntos de gráficos pre-escalados en los fpg y emplear desde el comienzo resoluciones mayores, en lugar de trabajar con una pantalla virtual pequeña para luego ampliarla con scale_resolution. De todas formas, dejo el tema abierto por si surge una solución en algún momento.
Título: Re:Filtro o Shader para efecto de televisor CRT
Publicado por: JaViS en Marzo 22, 2017, 11:31:13 am
No entiendo cual es el problema que estas teniendo particularmente.


Si escalas, todos los pixels de la pantalla son escalados, asi que la proporcion del pixel del layer del efecto va a ser la misma que la del juego, no vas a tener un problema ahi
Título: Re:Filtro o Shader para efecto de televisor CRT
Publicado por: Ikki en Marzo 22, 2017, 04:05:57 pm
He hecho un par de capturas para que se entienda mejor lo que tengo ganas de hacer.

Primero, éste es el resultado que obtengo al poner los gráficos en pantalla con el filtro, usando:

Código: [Seleccionar]
scale_resolution=08000600;
set_mode(320, 224, 32);

(https://www.dropbox.com/s/w7683hcjwwmo6sg/captura_01.png?raw=1)

Se puede ver que las scanlines se escalan con el resto de los procesos, y el efecto es un tanto tosco.

La siguente imagen muestra el resultado que me gustaría lograr:

(https://www.dropbox.com/s/l0hlfxzzyql0g9a/captura_02.png?raw=1)

Las scanlines son más sutiles y el ligero difuminado ayuda a esconder el escalado de los pixels de los gráficos en baja resolución.
Título: Re:Filtro o Shader para efecto de televisor CRT
Publicado por: SplinterGU en Marzo 23, 2017, 05:11:10 am
No entiendo cual es el problema que estas teniendo particularmente.


Si escalas, todos los pixels de la pantalla son escalados, asi que la proporcion del pixel del layer del efecto va a ser la misma que la del juego, no vas a tener un problema ahi

lo que dice es que quiere tener el efecto sin que se escale...

He hecho un par de capturas para que se entienda mejor lo que tengo ganas de hacer.

Primero, éste es el resultado que obtengo al poner los gráficos en pantalla con el filtro, usando:

Código: [Seleccionar]
scale_resolution=08000600;
set_mode(320, 224, 32);

(https://lh3.googleusercontent.com/52Z8ZylyeMdTFCYVlY-buhiktpH7EYsWi2nLM5LOWSqhbTpPQ_vPyWhoezk_b3hHR-qRWgpJ4FpxX8vZxYh0-SW9TgxatioOAmv3N7r1ruuwyfd4RyId6e6TMYAey2nhlHRf8_5dAlkMo0ykReGt54-6B90horcHxL8LsrKQRax3vfnRQLfCaR-jgd4b_OLa5yxbNi55XApIAhPPzp0PMTeZDczkctbQXIIQJt1eiKaQTN-vk6PWbC_uA5SXOvvcVhWVxqbnxBy9wMTtTDzL-yclhwrrhYwxnUTdX2LhvlsgGe1DcscQNO4emunYV16c-gENbMqZiAJ63xf_JdU3ZjRpkb0-YiculML_vliX5ZsGXssf6P4K-7nt-Aowhpcn2vCZK7_bnYc8quycRhUbgTd8Oudh1x_cO3snAJlg6Ht0gAp4Tpk8Pfb_tulO85W_8xf5ReZdE9uZSWDlVbKU8mmEEj498ikjViJx6-PehXuKVK5m1QLEjVrJY7dEjHz6IfqepgEsVE7EW_DUxP5t7FRww9nWaPHSFSbX0c2JHqlZUfTDK87A2virGv_ECuHIUV9Es9X-DR1Uv4I5gCG9Qx9N2QyQti7KwkxrzoJzCMX3NSA1pkh1vubRI_fO7RP8y1SYnkGKBpR2WSXhJaKR_BxRq1vnjkpjQK9mRymmCw=w800-h600-no-temp.png)

Se puede ver que las scanlines se escalan con el resto de los procesos, y el efecto es un tanto tosco.

La siguente imagen muestra el resultado que me gustaría lograr:

(https://lh3.googleusercontent.com/U1cdU5iNhQuacdcLTu8Cwb_dlHu6vlbJ34WOPVGSU1Jz1rI45uRpR0k79PNMYexei1tdnWTFBZQqIrrWSM3muiAt3tYCSeg3CoCrfmU2XeQgUFEEK1DgxpiCEAftlY5pKb01fYEjywkdwHtHfXvydJKAmdBF34OZTrSsv9eT4laym4hBAbTp5HGSLczUnryqU7nOK8QiN8GVnRhplUTbFsDgaCLHkXPOxvnW66UCNKxPRFbvf0FNiWHBNvanpfFhA09fm3e-GtPX_fdLL6Z8CuTnDomnWl_cklGuTzakgqTvKWW7crPscUueT0oK6stTQ9r_yotrHXetUq0eZR5OsI65XWYYrzvrc6VtlW1TKXmPlCYE9NQMT_0RrhXil1UyHn1v9FR7FBFaf49VTvo8QtB8IUMkGGtpX6hc3ohYY4A2zLaeNLnEim1SrVzhcDwgBpc16pAKpF-Ii8HBCq3mZM6aW8HMENjTyH6iNHmhWFE8BfmivjRGTpC6A_vDMseS9OFRAFguYl5eqWmWLUrqTgKfClbEdK8MlQPRZHca1DGF1VbRXlpuoj7oL7Kej-aM5fYU2RVrdYgetYdk47FTn_mIkSkTS03RscdzQqkiJnL6l7sk=w800-h600-no-temp.png)

Las scanlines son más sutiles y el ligero difuminado ayuda a esconder el escalado de los pixels de los gráficos en baja resolución.

de todos modos, no deja de verse genial...
Título: Re:Filtro o Shader para efecto de televisor CRT
Publicado por: Drumpi en Marzo 26, 2017, 04:25:03 pm
Si usas scale_resolution, lo escalas todo, filtro incluido.
Bennu no tiene shaders, no al menos en el sentido clásico de la palabra, es decir, efectos de postrocesado. Puedes modificar el buffer de video antes del volcado a pantalla, pero es la imágen a la resolución que tu has puesto, que luego se manda a la tarjeta de video y allí se agranda, pero no tienes control directo sobre lo que pasa allí (a menos que sepas programar para SDL y crees tu propia librería).

Si quieres que las scanlines sean más pequeñas que el tamaño de los pixels de tu juego, tendrás que escalar manualmente con size todos los gráficos (y modificar las posiciones y velocidades). Un pixel es un pixel, no hay nada más pequeño.
Título: Re:Filtro o Shader para efecto de televisor CRT
Publicado por: Ikki en Marzo 27, 2017, 06:12:53 am
Si usas scale_resolution, lo escalas todo, filtro incluido.
Bennu no tiene shaders, no al menos en el sentido clásico de la palabra, es decir, efectos de postrocesado. Puedes modificar el buffer de video antes del volcado a pantalla, pero es la imágen a la resolución que tu has puesto, que luego se manda a la tarjeta de video y allí se agranda, pero no tienes control directo sobre lo que pasa allí (a menos que sepas programar para SDL y crees tu propia librería).

Si quieres que las scanlines sean más pequeñas que el tamaño de los pixels de tu juego, tendrás que escalar manualmente con size todos los gráficos (y modificar las posiciones y velocidades). Un pixel es un pixel, no hay nada más pequeño.

Gracias por la respuesta, Drumpi. Más adelante voy a intentar hacer algo por el lado de SDL, pero por lo pronto estoy enfocado en dominar un poco mejor Bennu (fui usuario de DIV2 en su momento, pero fue hace mucho tiempo y estoy bastante oxidado).
Título: Re:Filtro o Shader para efecto de televisor CRT
Publicado por: La momia que fuma en Marzo 28, 2017, 06:34:57 am
Se me ocurre que en vez de reescalar todo, trabajando a la resolución real deseada, se puede usar un scroll que contenga el juego entero y renderizarlo a un mapa tamaño de la resolución "falsa" del juego. Ese mapa se lo metes a un proceso y lo escalas a tamaño resolución real, y por encima, otro proceso con el efecto CRT también a resolución real.


(De hecho...Me puse a hacer un ejemplo para echar el rato, pero....no consigo que funcione el scroll a mapa...no me acepta los dos parámetros extra de fpg y gráfico de destino. Probé también con un ejemplo de la wiki (http://wiki.bennugd.org/index.php?title=Start_scroll#Example_.28scroll_drawn_on_map.29) y otro de Javis (http://forum.bennugd.org/index.php?topic=3846.msg63231#msg63231) que encontré por el foro y nada, que no me quiere los dos parámetros extra (Probé en Pixtudio y tras los mínimos cambiós de sintaxis necesarios ahí si compilan ambos).....No se, se eliminó esta característica? Iluminadme, please xD)
Título: Re:Filtro o Shader para efecto de televisor CRT
Publicado por: Ikki en Marzo 28, 2017, 04:53:14 pm
Se me ocurre que en vez de reescalar todo, trabajando a la resolución real deseada, se puede usar un scroll que contenga el juego entero y renderizarlo a un mapa tamaño de la resolución "falsa" del juego. Ese mapa se lo metes a un proceso y lo escalas a tamaño resolución real, y por encima, otro proceso con el efecto CRT también a resolución real.


(De hecho...Me puse a hacer un ejemplo para echar el rato, pero....no consigo que funcione el scroll a mapa...no me acepta los dos parámetros extra de fpg y gráfico de destino. Probé también con un ejemplo de la wiki (http://wiki.bennugd.org/index.php?title=Start_scroll#Example_.28scroll_drawn_on_map.29) y otro de Javis (http://forum.bennugd.org/index.php?topic=3846.msg63231#msg63231) que encontré por el foro y nada, que no me quiere los dos parámetros extra (Probé en Pixtudio y tras los mínimos cambiós de sintaxis necesarios ahí si compilan ambos).....No se, se eliminó esta característica? Iluminadme, please xD)

Momia, si podés completar el ejemplo y lo hacés público, sería excelente; si no, igual se agradece la intención.  ;D
Título: Re:Filtro o Shader para efecto de televisor CRT
Publicado por: La momia que fuma en Marzo 28, 2017, 05:48:02 pm
En cuanto algún buen samaritano del foro me aclare por que puñetas no me acepta los puñeteros parámetros extra de start_scroll para renderizar a mapa (Véase en los ejemplos que enlacé antes...no compilan, protesta por el start_scroll), dalo por hecho, que tengo ganas de probar :D


Es raro, recuerdo haber trasteado con eso en su día sin mayor problema, y por si acaso me aseguré de usar la última versión de Bennu, pero ni por esas... :-\
Título: Re:Filtro o Shader para efecto de televisor CRT
Publicado por: JaViS en Marzo 29, 2017, 05:28:19 am
Me parece que le estan dando demasiadas vueltas a algo que es bastante evidente y obvio.


Si queres tener los scanlines a una resolucion mas chica, simplemente haz el juego a la mitad (o menos incluso) de la resolucion del scanline, no hace falta escalar nada por software, simplemente tus graficos deben tener el tamaño (en proporcion a la resolucion) correcta. Es decir, si quieres puedes escalar tus graficos antes de meterlos en los FPG, o simplemente diseñarlos con un tamaño de pixel escalado
Título: Re:Filtro o Shader para efecto de televisor CRT
Publicado por: La momia que fuma en Marzo 29, 2017, 09:53:12 am
Ahí entramos en terreno de gustos....haciéndolo así, los objetos del juego se moverían a mayor resolución de la que aparentan, sin regirse por la "cuadrícula" de pixels que representa gráficamente, cosa que hacen muchos juegos retro, y la verdad queda bien, aspecto de juego "de los de antes" pero con movimiento mas suave aunque pierde un poco de "feeling" retro.


Ahora, si lo que quieres es hacer un juego retro "purista" y escrupulosamente retro esto no vale (o te tienes que preocupar de que se muevan siempre en incrementos de pixel que simulen esa resolución menor, complicándote las cosas).


Javis, igual tú me puedes iluminar en el tema del scroll a mapa...como decía, tu propio ejemplo que enlazo ahí atrás (o el de la wiki) no compila con la última versión....sabes si ha cambiado la sintaxis o algo así? Yo creo que mi solución, una vez montada, es bastante sencilla (trabajar el juego normalmente a baja resolución en un scroll con todos los objetos del juego, renderizar el scroll al mapa de un proceso "pantalla" y ponerlo ampliado con el filtro por encima a resolución real).

(Es que ahora hasta que pueda hacer la prueba yo no me quedo tranquilo jajaja  ;D )
Título: Re:Filtro o Shader para efecto de televisor CRT
Publicado por: JaViS en Marzo 29, 2017, 10:43:34 am

Javis, igual tú me puedes iluminar en el tema del scroll a mapa...como decía, tu propio ejemplo que enlazo ahí atrás (o el de la wiki) no compila con la última versión....sabes si ha cambiado la sintaxis o algo así? Yo creo que mi solución, una vez montada, es bastante sencilla (trabajar el juego normalmente a baja resolución en un scroll con todos los objetos del juego, renderizar el scroll al mapa de un proceso "pantalla" y ponerlo ampliado con el filtro por encima a resolución real).


Pues, tienes razon en eso del movimiento, no lo habia pensado, igual con un poco de esfuerzo extra se puede emular el movimiento pixel a pixel de un juego a baja resolucion.


Por otro lado, yo no tengo problema en renderizar el scroll en un mapa, y estoy usando la última version de Bennu que viene en BennuPack.


start_scroll(0,0,stage_render_source,0,1,0,0,stage_render_map);
Título: Re:Filtro o Shader para efecto de televisor CRT
Publicado por: Ikki en Marzo 29, 2017, 04:39:04 pm
Me parece que le estan dando demasiadas vueltas a algo que es bastante evidente y obvio.


Si queres tener los scanlines a una resolucion mas chica, simplemente haz el juego a la mitad (o menos incluso) de la resolucion del scanline, no hace falta escalar nada por software, simplemente tus graficos deben tener el tamaño (en proporcion a la resolucion) correcta. Es decir, si quieres puedes escalar tus graficos antes de meterlos en los FPG, o simplemente diseñarlos con un tamaño de pixel escalado

Son muchas las ventajas de mantener los gráficos en su tamaño original y escalar la resolución, siendo las dos más importantes el menor tamaño de distribución del juego final y la posibilidad de no limitar la resolución de pantalla a valores prefijados. Además, y esto es una opinión personal, el look retro se ve muy favorecido por la simulación de un display CRT; cuando jugábamos en un Spectrum, la NES o en Mega Drive no veíamos claramente los pixels de los juegos. Incluso los diseñadores aprovechaban las limitaciones de los antiguos televisores para superar las restricciones impuestas por el hardware de los sistemas (el uso de dithering para simular más colores o transparencias, por ejemplo). Y, claro, la nostalgia; las scanlines y los filtros que simulan la señal de TV están presentes en los emuladores casi desde el comienzo porque a mucha gente le gusta vivir una experiencia de juego lo más cercana posible a lo que experimentaron originalmente.
Título: Re:Filtro o Shader para efecto de televisor CRT
Publicado por: JaViS en Marzo 30, 2017, 05:26:56 am
Sisi, estoy totalmente de acuerdo, por eso lo hago en mi juego. A lo que me refería es que puedes hacer tus graficos al doble del tamaño de la resolucion que vas a usar, y de esa forma, el efecto CRT va a quedar con pixeles mas chicos que tus graficos
Título: Re:Filtro o Shader para efecto de televisor CRT
Publicado por: JaViS en Marzo 30, 2017, 05:27:27 am
Sisi, estoy totalmente de acuerdo, por eso lo hago en mi juego. A lo que me refería es que puedes hacer tus graficos al doble del tamaño (escalados) de la resolucion que vas a usar, y de esa forma, el efecto CRT va a quedar con pixeles mas chicos que tus graficos
Título: Re:Filtro o Shader para efecto de televisor CRT
Publicado por: SplinterGU en Marzo 30, 2017, 05:36:00 am
momia

scroll_start( n, fileid, graphid, backid, region, flags, destfile, destid )
Título: Re:Filtro o Shader para efecto de televisor CRT
Publicado por: La momia que fuma en Marzo 30, 2017, 05:47:33 am
Gracias, Splinter y JaVis....hacer lo estaba haciendo bien a nivel código, pero me debí equivocar en algo al actualizar bennu. Ahora hice una carpeta nueva con la última versión (en lugar de sobreescribir la nueva sobre la vieja en mi carpeta de "experimentos") y ya funciona...antes aunque si estaba usando la última versión del compilador seguramente fue que no sobreescribí la mod scroll con la nueva versión o algo por el estilo, jeje...

Ahí va:


Código: [Seleccionar]
program FiltroCRT;


import "mod_key"
import "mod_video"
import "mod_map"
import "mod_scroll"
import "mod_proc"
import "mod_grproc"
import "mod_screen"
import "mod_wm"


global
//RESOLUCIÓN DE JUEGO
    resx= 384, resy= 224;
//GRÁFICO A USAR COMO PANTALLA (SERÁ UN PNG A RESOLUCIÓN DE JUEGO)
    pantalla;
//GRÁFICO DEL FILTRO CRT (SERÁ UN PNG A RESOLUCIÓN REAL)
    crt;
//MAPA AL QUE RENDERIZAR EL SCROLL
    pantallaB;   


begin
//PONEMOS LA RESOLUCIÓN AL DOBLE DE LA RESOLUCIÓN DE JUEGO.
    set_mode(resx*2, resy*2, 16);
//CARGAMOS LOS PNGS DE PANTALLA Y CRT
    pantalla= png_load("./pantalla.png");
//EL GRAFICO DEL CRT ES UNA IMAGEN BLANCA CON LAS SCANLINES (Y UN POCO DE OSCURIDAD POR LOS BORDES) QUE IRÁ CON FLAGS 32.
//TAMBIÉN SE PUEDE HACER UN GRAFICO TRANSPARENTE SIN ESE BLANCO DE FONDO, PERO NECESITARIAMOS PONER COLOR A 32 BITS EN SET MODE (Y NEW MAP) Y NO SERÍA NECESARIO FLAGS 32
    crt= png_load("./crt.png");
//CREAMOS UN MAPA TAMAÑO RESOLUCIÓN DEL JUEGO DONDE RENDERIZAR EL SCROLL
    pantallaB= map_new(resx, resy, 16);
//INICIAMOS SCROLL INDICANDO QUE RENDERIZE AL MAPA QUE HEMOS CREADO   
    scroll_start(0, 0, pantalla, 0, 0, 0, 0, pantallaB);
   
    filtro_crt();
    pantalla();
   
    repeat frame; until(key(_esc))
    exit();
end


process filtro_crt()


begin
//ASIGNAMOS EL GRÁFICO Y LO COLOCAMOS EN EL MEDIO DE LA PANTALLA
    graph= crt;
    x= resx;
    y= resy;
    flags= 32;

//NOS ASEGURAMOS QUE SALGA POR ENCIMA DEL PROCESO PANTALLA Y NO DEBAJO
    z=-99999;    loop
//SI MANTENEMOS CUALQUIER TECLA, SE OCULTA, PARA APRECIAR LA DIFERENCIA
        if(scan_code==0)
            graph= crt;
        else
            graph= 0;
        end       
        frame;
    end


end


process pantalla()


begin
//PANTALLA REAL DONDE TRANSCURRE EL SCROLL. SE LE ASIGNA EL GRÁFICO, SE ESCALA AL DOBLE Y SE COLOCA CENTRADO.
//HAY QUE TENER EN CUENTA QUE TODOS LOS OBJETOS DEL JUEGO DEBEN IR INTEGRADOS EN EL SCROLL CREADO CON CTYPE
    graph= pantallaB;
    size= 200;
    x= resx;
    y= resy;   
    loop
        frame;
    end


end


(Editado: Añado asignarle una Z al filtro que asegure que vaya por encima del proceso que hace de pantalla)
Título: Re:Filtro o Shader para efecto de televisor CRT
Publicado por: Ikki en Marzo 30, 2017, 10:37:57 am
Momia, genial lo tuyo. Ya mismo trato de implementarlo en mi demo y les muestro que sale de eso. ¡Mil gracias!
Título: Re:Filtro o Shader para efecto de televisor CRT
Publicado por: La momia que fuma en Marzo 30, 2017, 03:15:19 pm
De nada, me alegro de que te sirva!  ;)
Título: Re:Filtro o Shader para efecto de televisor CRT
Publicado por: Drumpi en Marzo 30, 2017, 03:17:04 pm
Momia ¿Qué andas tramando? No se sabe nada de ti desde hace tiempo y parece que ya estás preparando otra de tus obras de arte :D
Título: Re:Filtro o Shader para efecto de televisor CRT
Publicado por: Ikki en Marzo 31, 2017, 06:19:58 am
Aquí les dejo un pequeño demo de lo que hice con el código de Momia. Está listo para correr en Windows, pero incluyo el código fuente por si hay algún usuario de Linux. Creo que voy a seguir convirtiendo Minescape a Bennu, ya que di los primeros pasos. Pido perdón por el código fuente, es un auténtico desastre que espero limpiar y mejorar en el futuro, en cuanto le haya agarrado mejor la mano al lenguaje  :P.

Consultas:

1) ¿Es posible que los textos en pantalla (escritos con write o write_var) también se dibujen dentro del scroll, para que se escalen como todo el resto de los elementos?

2) ¿Se puede aplicar algún tipo de blur o filtrado bilineal al escalar el buffer?
Título: Re:Filtro o Shader para efecto de televisor CRT
Publicado por: JaViS en Marzo 31, 2017, 06:28:29 am
Consultas:

1) ¿Es posible que los textos en pantalla (escritos con write o write_var) también se dibujen dentro del scroll, para que se escalen como todo el resto de los elementos?

2) ¿Se puede aplicar algún tipo de blur o filtrado bilineal al escalar el buffer?




1) se puede usar write_in_map, y eso lo usas con un proceso, o lo pintas como mas te convenga dentro del scroll.
2) se puede usar un filtro de blur, creo que de hecho la funcion blur() existe, pero es lenta, quita mucho rendimiento.
Título: Re:Filtro o Shader para efecto de televisor CRT
Publicado por: La momia que fuma en Marzo 31, 2017, 02:59:31 pm
Momia ¿Qué andas tramando? No se sabe nada de ti desde hace tiempo y parece que ya estás preparando otra de tus obras de arte :D


Jeje, desgraciadamente hace tiempo que no hago nada con bennu, pixtudio o similares (por eso me gustó especialmente ayudar con el ejemplillo este para desoxidarme un poco)....pero os tengo vigilados  ;)


Aunque si estoy adaptando y ampliando una cosilla mía que conoces de bennu a otro motor (aunque no como juego-juego sino para venderlo como plantilla en la store del motor en cuestión), ya lo pondré por offtopic cuando este visible.


EDITO (Que se me olvidaba):


Aquí les dejo un pequeño demo de lo que hice con el código de Momia. Está listo para correr en Windows, pero incluyo el código fuente por si hay algún usuario de Linux. Creo que voy a seguir convirtiendo Minescape a Bennu, ya que di los primeros pasos. Pido perdón por el código fuente, es un auténtico desastre que espero limpiar y mejorar en el futuro, en cuanto le haya agarrado mejor la mano al lenguaje  :P .


Hostia! El Manic Miner! (Que ha pegado el estirón)  ;D
Título: Re:Filtro o Shader para efecto de televisor CRT
Publicado por: Drumpi en Marzo 31, 2017, 05:15:21 pm
Pues ya nos contarás, Momia :) No te aficiones mucho al Construct2 que eso es HTML5 y al final vas a tener que usar lenguajes de marcas, y para marca la que te va a dejar en el cerebro :D

Respecto al escalado, sé que para el scale_mode (que escala x2) tienes diversos filtros:
http://wiki.bennugd.org/index.php?title=Scale_modes
Pero por la salud de mis ojos, no uses filtros... Bueno, tienes el de scanlines y... no sé por qué no me he acordado de él ^^U
Aparte, para hacer blur, según la wiki tienes los siguientes modos para el comando blur() (hay un enlace a como funciona en esa página):
http://wiki.bennugd.org/index.php?title=Blur_modes

Consejo para novatos: bichea las funciones de la wiki, ve mirando las funciones que te vayan llamando la atención y mira los comandos relacionados, porque puedes aprender muchísimo sin darte cuenta ;)
Título: Re:Filtro o Shader para efecto de televisor CRT
Publicado por: La momia que fuma en Marzo 31, 2017, 06:20:20 pm
Pequeña chorrireflexión, lo que nunca me gustó del filtro scanline es como oscurece la imágen. Se me ocurrió ahora probar a hacerlo al reves, con scanlines tirando a blancas en lugar de negras y da el pego también pero sin dejar la imágen tan tristona y apagada. Da la sensación de que le sube el brillo un poco y queda bien, a mi me gusta más.


(http://i.imgur.com/ElnhNOQ.png)


De izquierda a derecha, scanline clara, oscura, y sin scanline.
Título: Re:Filtro o Shader para efecto de televisor CRT
Publicado por: Ikki en Marzo 31, 2017, 07:48:30 pm
Pequeña chorrireflexión, lo que nunca me gustó del filtro scanline es como oscurece la imágen. Se me ocurrió ahora probar a hacerlo al reves, con scanlines tirando a blancas en lugar de negras y da el pego también pero sin dejar la imágen tan tristona y apagada. Da la sensación de que le sube el brillo un poco y queda bien, a mi me gusta más.


(http://i.imgur.com/ElnhNOQ.png)


De izquierda a derecha, scanline clara, oscura, y sin scanline.


Yo uso scanlines negras, pero con 75% de transparencia en el png, y me gusta bastante como queda. Está bueno que el efecto apenas se note, pero que esté ahí.

Pero por la salud de mis ojos, no uses filtros... Bueno, tienes el de scanlines y... no sé por qué no me he acordado de él ^^U

Sí, los filtros pueden arruinar bastante la imagen. Aunque sé que tiene muchos simpatizantes, nunca me gustó HQ2X aplicado sobre pixel art de baja resolución (lo mismo para Super Eagle. 2xSai y otros similares). El efecto final me parece... no se... anti-natural, por llamarlo de alguna forma.