1

Topic: Sobre exactitud en hz de los modelines

Ante todo dar las gracias a Calamity por su gran trabajo y por el cual puedo disfrutar de los juegos de consola y arcade que jugué en el pasado con máxima calidad.

Para estos menesteres tengo una tv sony kv-29fx30e y un pc con placa base msi h81m-e33, procesador pentium G3258, 4 gigas de ram, windows xp 64 y una ati hd 4550 pci express, junto a la última versión de los drivers CRT EMUDRIVER. Como emulador uso principalmente retroarch.

He observado que en concreto el core correspondiente al emulador de super nintendo higan/bsnes en su versión accuracy, si bien me funciona al 100% de velocidad, tengo un input lag considerable, y según he leído puedo reducirlo si desactivo el vsync y activo la opción de "hard gpu sync" e indico el número de frames a 0.

Efectivamente al usar esas opciones el input lag se reduce considerablemente pero la imagen presenta un "tearing" importante, que *creo* es debido a que por mucho que intento usar modelines con los hz exactos de la consola, 60.0988 según he leído, en las opciones de vídeo de retroarch me aparece un "estimated monitor framerate" que varia sensiblemente de lo que intento conseguir.

He leído en la configuración del vmmaker la opción de "iterations" que según se indica en la documentación se puede usar junto a una ati 9250 para obtener mayor precisión en los modelines.

Si uso esa tarjeta en concreto (tengo una placa con su micro core2duo con ranura agp, y podría conseguir una 9250 facilmente) podría conseguir jugar sin vsync con refrescos exactos, o no notaré la diferencia respecto a mi configuración?

No se si me he explicado bien, espero que se entienda. Gracias de antemano y un saludo a todos los foreros.

2

Re: Sobre exactitud en hz de los modelines

Bienvenido Vlad, vamos por partes:

La discrepancia con el refresco original no se traduce en "tearing" sino en saltos o "hipos" en el scroll. En principio, teóricamente un emulador debería ajustar la velocidad de emulación al refresco de pantalla cuando activamos la opción de sincronización vertical. De esta manera se podría llegar al caso extremo de correr un juego NTSC (60 Hz) sobre un modo de vídeo PAL (50 Hz) manteniendo un scroll totalmente suave, a costa de modificar la velocidad original del juego. Lo que ocurre es que la gran mayoría de emuladores tratan de mantener la velocidad original además de esperar al refresco vertical, lo que hace que la sincronización sea problemática y aparezcan hipos intermitentes.

Hago esta introducción para subrayar que no es necesario buscar una precisión obsesiva con los refrescos hasta el tercer decimal, porque un emulador bien programado debería poder absorber estos pequeños errores, además de que hablamos de valores nominales que con toda probabilidad ni siquiera serán los realmente existentes en el hardware original, ya que los cristales de cuarzo a fin de cuentas están expuestos a variaciones de temperatura que alteran sus propiedades.

Respecto al problema que expones, si lo que observas es "tearing", es que la sincronización vertical no está funcionando en absoluto. Para lograr la sincronización vertical, el emulador recurre a OpenGL o DirectX, que por su parte se comunican con el driver del fabricante de la tarjeta, que es el que en última instancia proporciona las funciones de hardware correspondientes. Si algo falla en la cadena, la sincronización vertical no funcionará, y lo que es peor: el emulador ni siquiera lo "sabrá". Los diferentes fabricantes no implementan OpenGL de la misma manera, desgraciadamente. En mi experiencia con OpenGL y tarjetas ATI, la sincronización vertical sólo funciona correctamente si se fuerza externamente desde el panel de control de la tarjeta. Con tarjetas Nvidia esto no es necesario. Los resultados con DirectX son mucho más predecibles que con OpenGL. En tu caso, probaría a usar DirectX (Direct3D) en las opciones de Retroarch.

Habría que decir que las opciones de sincronización de Retroarch son algo extravagantes. Que el usuario tenga que introducir el refresco del monitor como dato conocido no deja de ser pintoresco. Dicho esto, hasta donde yo sé, Retroarch sí que permite absorber una cierta desviación del refresco, ajustando la velocidad de emulación y el audio. Si bien inicialmente había un límite pequeño a la desviación permitida, creo haber leído en algún sitio que ahora ya permite una desviación arbitraria.

Finalmente, si quieres mejorar la exactitud de los refrescos, mejor hacerlo manualmente que con la opción "iterations", ya que puede haber variaciones incluso entre las 9250 (rizando el rizo uno podría crearse su propia tabla de dotclocks para su tarjeta específica). Lo que te sugiero es que cargues la resolución que usas para Higan en Arcade OSD, y desde ahí midas el refresco (botón "5"). Prueba tras ello a desactivar la opción "lock vfreq" para poder modificar el valor de dotclock, en principio usa los valores inmediatamente superior e inferior al que tengas, y realiza de nuevo la medición del refresco. Por último, puedes añadir líneas en blanco al "vertical back porch": esto rebajará el refresco de golpe, lo que te obligará a incrementar el dotclock para compensar y volver al valor original. En muchas ocasiones, tras añadir una o más líneas y compensar el dotclock, el refresco resultante es más exacto que el original (esto es lo que hace la opción "iterations"). Yo, francamente, no me calentaría la cabeza.