Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Rarezas con VSync

Iniciado por SkyNetBCN, 12 de Octubre de 2008, 07:52:35 PM

« anterior - próximo »

SkyNetBCN

Qué tal compañeros... Aquí estoy una vez más para ver si alguien me puede echar un cable con, esta vez, más que problema, duda; ahí va:

Sigo liado con mi pequeña aplicación (DirectX 9.0C) de novato en el que de momento, se ven unos cuantos objetos en pantalla, algún sprite y algo de iluminación... El problema (dije duda??  :P) es que cuando renderizo a pantalla completa con sincronización vertical activada, todo se ve perfecto, sin embargo, cuando desactivo la vSync (obviamente pasa de unos 55fps a unos 2000fps) los sprites y los objetos afectados por las luces se ven con una especie de "defectos"  ???horizontales nada agradables.

Supongo que a alguien le ha pasado lo mismo alguna vez.. si alguien me pudiese explicar por qué pasa esto o como evitarlo, me haría un favor...

Muchas gracias de antemano,
Salu2,
SkyNetBCN

[EX3]

"Horizontales nada agradables"? Me da que le problema que tienes es que renderiza demasiado rapido y como no hace espera de sincronismo se te pisa el renderizado de un frame con el siguiente. Deberias implementar un control de maximo de frames a renderizar (que pongas un limite de n y no se renderizen mas de n frames por segundo).

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

SkyNetBCN

Pero en los videojuegos profesionales ( obviamente, no es mi caso  :P ) puedes desactivar la sincronización vertical sin que eso priduzca ningún tipo de efecto indeseado...

El tema de limitar el número de fps no me convence, porque, a cuanto lo limito? más o menos a ojo calculo un número en el que se vea bien el render? y si lo limito por ejemplo a 100, y la aplicación renderiza esas 100 imagenes, pongamos en .3 segundos, los otros .7 segundos que quedan no renderizo nada? no sé, si me lo pudieses explicar un poco más...
:-[
Muchas gracias

kbks

Cuando limitas el número de fps no tienes que contar el numero de frames y cuando llegues al límite dejar de renderizar, eso es algo así como ir con el coche a 200 durante 20 minutos y despues parar una hora para no ir demasiado rápido. Lo que tienes que controlar es el número de milisegundos que pasan entre cada renderizado y si no son suficientes meter un bucle de espera activa al final del bucle principal que termine cuando haya pasado el tiempo suficiente, es decir, tienes que esperar un cierto tiempo entre frames consecutivos.

[EX3]

Cita de: SkyNetBCN en 13 de Octubre de 2008, 03:04:02 PM
Pero en los videojuegos profesionales ( obviamente, no es mi caso  :P ) puedes desactivar la sincronización vertical sin que eso priduzca ningún tipo de efecto indeseado...
Juega al Halo o al Bioshock por ejemplo con el vSync desactivado y me dices si no se nota cuando haces giros bruscos :P Lo que no hacen los juegos profesionales es dejar el render ejecutando libremente si no que limitan el numero de FPS, generalmente a 60/30 que es el rango estudiado que se adapta mejor al ojo humano haciendo que las transiciones sean suaves a la vista.

Cita de: SkyNetBCN en 13 de Octubre de 2008, 03:04:02 PM
El tema de limitar el número de fps no me convence, porque, a cuanto lo limito? más o menos a ojo calculo un número en el que se vea bien el render? y si lo limito por ejemplo a 100, y la aplicación renderiza esas 100 imagenes, pongamos en .3 segundos, los otros .7 segundos que quedan no renderizo nada? no sé, si me lo pudieses explicar un poco más...
Como te decia antes, esta estudiado que de 30 a 60 fps es lo idoneo, mejor si son 60. Piensa que el vSync lo que hace es renderizar tantos fps como el refresco del monitor lo permita (en verdad es que renderiza un fotograma y no renderiza el siguiente hasta que se haya refrescado la pantalla completo) pero si ejecutas el juego en un monitor con baja frecuencia de refresco limitaras mas de lo necesario el render del juego. Desactivando el vSync y limitando manualmente el numero de fotogramas consigues el maximo idoneo sea cual sea la frecuencia de refresco del monitor ya que renderizas cada fotograma en cuanto puedes, pero claro, al no esperar el refresco del monitor y pintar en el momento, en algunas ocasiones notaras ese solapamiento de los fotogramas aunque no sera tan brusco como si renderizaras 2000fps.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.