Autor Tema: Filtro o Shader para efecto de televisor CRT  (Leído 97 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Ikki

  • Newbie
  • *
  • Mensajes: 4
  • Karma: 0
  • Sexo: Masculino
    • Ver Perfil
Filtro o Shader para efecto de televisor CRT
« 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 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.
« última modificación: Marzo 20, 2017, 06:53:46 pm por Ikki »
Hadoken!!!

Conectado JaViS

  • Global Moderator
  • Hero Member
  • *****
  • Mensajes: 1075
  • Karma: 18
  • Sexo: Masculino
    • Ver Perfil
    • Anarkade
Re:Filtro o Shader para efecto de televisor CRT
« Respuesta #1 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
Working on Anarkade. A couch multiplayer 2D shooter.

Desconectado Ikki

  • Newbie
  • *
  • Mensajes: 4
  • Karma: 0
  • Sexo: Masculino
    • Ver Perfil
Re:Filtro o Shader para efecto de televisor CRT
« Respuesta #2 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.
Hadoken!!!

Conectado JaViS

  • Global Moderator
  • Hero Member
  • *****
  • Mensajes: 1075
  • Karma: 18
  • Sexo: Masculino
    • Ver Perfil
    • Anarkade
Re:Filtro o Shader para efecto de televisor CRT
« Respuesta #3 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.
Working on Anarkade. A couch multiplayer 2D shooter.

Desconectado Ikki

  • Newbie
  • *
  • Mensajes: 4
  • Karma: 0
  • Sexo: Masculino
    • Ver Perfil
Re:Filtro o Shader para efecto de televisor CRT
« Respuesta #4 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.
Hadoken!!!

Conectado JaViS

  • Global Moderator
  • Hero Member
  • *****
  • Mensajes: 1075
  • Karma: 18
  • Sexo: Masculino
    • Ver Perfil
    • Anarkade
Re:Filtro o Shader para efecto de televisor CRT
« Respuesta #5 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
Working on Anarkade. A couch multiplayer 2D shooter.

Desconectado Ikki

  • Newbie
  • *
  • Mensajes: 4
  • Karma: 0
  • Sexo: Masculino
    • Ver Perfil
Re:Filtro o Shader para efecto de televisor CRT
« Respuesta #6 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);



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:



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.
« última modificación: Marzo 22, 2017, 07:14:35 pm por Ikki »
Hadoken!!!

Desconectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12359
  • Karma: 365
  • Sexo: Masculino
    • Ver Perfil
Re:Filtro o Shader para efecto de televisor CRT
« Respuesta #7 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);



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:



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...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2