Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Como aumentar la tasa de FPS de manera bestial.

Iniciado por MaSteR, 27 de Junio de 2003, 12:16:47 AM

« anterior - próximo »

MaSteR

                                Bien pues esto trata de lo siguiente:

La idea me surgio para nivelar el caudal de transferencia de red de mi engine, ya q si yo consigo 300 FPS enviaria 300 veces datos sobre mi personaje al servidor el cual enviaria a todos los usuarios.Esto n podia ser, q hay de la gente q va a 30 FPS? y q pasaria si tuviera una linea de 56Kb, m la xuparia entera?.Tenia q hacer algo al respecto.Preguntando en el canal y pensando hasta bloquearme por estar todo el dia liado con el engine, un compañero, Ethernet conocedor y entusiasta de los Open Engine, Quake, Quake 2, unreal !!, me sugirio q me bajara el engine del Q2 ya q este hacia algo parecido sino =, de lo q yo me proponia hacer.Mire el codigo dnd me indico, e intente adaptarlo pero lo haria mal ya q obtenia el resultado q yo tenia anteriormente.Lograba capar el trafico pero n equitativamente sino q a falta de unas decimas de segundo paraba de enviar :(.Total confiando en mis :idea: q me surgian por amor al arte, me dispuse hacer otra cosa, hasta q llego la :idea:, en 3 lineas ya tenia listo un envio indeferente a los FPS.Esta parte es bastante interesante, ya q xupara menos LINEA, y por consiguiente agilizara el trafico tanto de la parte servidor cm la de nosotros.COMO? my sencillo.Si yo voy a 300 FPS en pantalla los demas, si controlamos el caudal online nos iran a 50 FPS (q es un lujo, n ntaremos diferencia ya q nuestro monitor refrescara 70 veces o 60, aki radica el tema ;)).Conseguimos, mas holgura de red, mas holgura de procesos y un rendimiento mejor.

Pero hablando y contrastando ideas con mi querido colega Aureal, el tenia pensado hacer algo asi, pero ahorrarse q tubiera q mirar q tecla pulsaba cada ciclo de reloj.A todo esto pense una locura.Si mi monitor va a unos 60-70 Hz (refresca la pantalla esas veces) para q quiero yo mas refrescos VIRTUALES (se combierten en virtuales pq n los vemos, refrescara frames sin q podamos verlos).Pues bien, PARA NADA es la respuesta.

Pues bien, q FPS puedo llegar a tener? 60 es lo justo, y 50? n se nota. 50 es un buen nº.

Bien, pues procesare el render 50 veces por segungo, me ahorrare cientos de miles de procesos cada segundo, y cm consecuencia se me dispararan los FPS, q se obtiene con 2 variables, q midne el tiempo q tarda desde su proceso hasta q vuelve a el.A esto ahora lo llamaremos CICLOS DEL ENGINE.estos ciclos median antes los 300FPS teniendo q renderizar 300 veces por segundo, haciendo miles de procesos.al ahorrarle eso habra un aumento bestial de ciclos q luego usaremos en nuestro favor.

Hasta aki lo mismo n esta clara la ultima parte.Recordad, tenemos:
-50 FPS y 50 Refrescos de red.
-Tendremos unos 200 000 ciclos con la configuracion q renderiza TODO el mapa, el modelo etc...

200 000 FPS? si pero n son ahora Frame Per Seconds, sino ciclos de reloj, ya q los FPS los limitamos a 50 consiguiendo 200 000 ciclos restantes para procesar datos sin q el Engine se resienta.

Q hacemos con esos 200 000 ciclos, en q los usamos? PARA CONSEGUIR MAS FPS.

Y direis, bueno mi tarjeta ni mi PC son = al tuyo yo antes probe tu engine y me iba a 20 FPS (quien lo ha probado ;) ).Aureal lo ha probado y ha conseguido llegar a tocar 88 FPS :).

COMO?!!!! DIOX.tendremos q tener 1º en cuenta q lo suyo seria 50 FPS renderizando todo el terreno posible ! para q nuestra jugabilidad aumente.

Vamos a bajarnos 1º esta cosa tan rara de:
http://www.aditel.org/~emolina/FPS-NET.zip

SDL Win32 Binary:
http://www.libsdl.org/release/SDL-1.2.5a-win32.zip

SDL_Net Win32 Binary:
http://www.libsdl.org/projects/SDL_net/rel...1.2.5-win32.zip

Bien abrimos el archivo ini.scp.
IPSERVER 127.0.0.1

NICK Prompt

//FPS -0.000000001 //a toda pastilla

FPS 0.015000000 //50

//FPS 0.000000000 //100



RENDERDIST 1000.0 //distancia max de render (antes estaba a 500.0)

SCREENWIDTH 800 //ta claro

SCREENHEIGHT 600 //esto sin problemas

FULLSCREEN 0 //y aki si queremos pantalla completa



EOF //simplemente el final del script


dnd pone FPS controlaremos nuestros FPS cada segundo, cm queremos 50 pondremos 0.015000000 o 0.010000000(asi obtengo yo 50 y pico).Bien esto en mi caso con mi tarjeta esq lo pongo a 100 FPS y me sobran cientos de ciclos asi q me pondre en el caso de Aureal, por ejemplo, para q veais cm lo hizo cuando le dije cm configurar esto, q es muy facil.

Pues bien tenemos capado a 50 FPS, si cuando arranquemos el engine los FPS-NET y los ciclos tienen paridad, o sea q son = quiere decir q hemos tocado techo con nuestra tarjeta y el PC.Joer! y ahora q ? para eso esta la instruccion del archivo ini.scp llamada RENDERDIST, esta a 1000.0.Esto renderiza TODO el mapa entero asi q bamos a ir bajandolo hasta q veamos q tenemos una jugabilidad buena en cuestion de vision. unos 150 o 200 estara bien, si a esto le sumamos q con la tecla numerica 8 y 2 podemos inclinar la vista y asi n ver siempre todo renderizado.ESTUPENDO!!, ahora vemos q hemos ganado unos miles de FPS.Q hacemos con ellos? disminuimos a instruccion FPS para pescar mas FPS, ahora podremos hacerlo ya q nuestro PC va olgado !! ;).

ALA, aureal consiguio tocar 88 FPS con un RENDERDIST de 100.0. Quiero q lo probeis y me digais q tal os ha ido.Q posteeis los Cilos y FPS-NET pliz.

*Aun n tengo subido el engine n tengo FTP :( toi intentado q me suba el archivo, si alguien se ofreciera... es 1 MB de nada.Podeis encontrarme con el nick Prompt en el IRC hispano en el canal #stratos y pedirme q os lo pase. Ah decir q si disminuimos el tamaño de pantalla ganamos mas :P.

Espero q os haya gustado esto y q os ayude a TODOS ;), y q se haya entendido pq yo se q me emociono escribiendo y a veces n veas... cualquiera me entiende lo q pongo :P.


************************************************************
Abstenerse criticas sobre el engine, este post solo se refiere al apartado de FPS y ciclos por segundo de proceso del engine.El engine es bastante puñetero y ta a mi MODO por si os pasa algo raro. Espero q os haya gustado el post.
************************************************************

PD:A lo q yo llamo aki ciclos de reloj del engine es en realidad interacciones del bucle, Aureal ;)                                

Mars Attacks

                                Aunque no me he enterado ni una mierda del proceso (véase post anterior sobre lo que me ocurre a estas horas), me gusta tu entusiasmo. Me piro a dormir, si mañana sigues sin tener dónde meter el mega de camy, mándamelo por mail y le haré un huequito en andor (si el servidor chuta).
A reveure.                                

ethernet

Yo tp me he enterado de nada  XD y eso que me parece q aparezco arriba del todo xDD

tiutiu

                                Yo me he enterado un poco d la primera parte, todo el proceso me ha dejado un poco asi :-?

Por cierto, yo tengo configurado el monitor a 80-85Hz Me parece una muy buena idea eso de capar solo la funcion de renderizado ya q chupa un huevo xD Podrias reescribirlo todo cuando hayas dormido bien y hacer una especie d articulo (aunq creo q necesitara una gran revision por la RAE xDDDDD es broma jejeje)                                
b>:: Pandora's Box project ::
Notas e ideas sobre desarrollo de engines para juegos

Grugnorr

                                Cuando tenga algo de tiempo intentaré descifrar lo que has puesto, Master ;). Si has dicho que vas a capar los FPS a 50 para evitar mandar mucha información por la red o para la IA.... lo que se suele hacer es lo contrario  :D.

Aquí tienes un artículo de Jare:
http://www.iguanademos.com/Jare/docs/FixLoop.htm


A ver si te sirve :idea:                                
hat the hells!

MaSteR

                                Pues si lo q se hace es el libre alvedrio, es una burrada.

Veamos lo de arriba resumido:

El monitor mio va entre 60-70Hz, osea, nos refrescara la pantalla 60 veces por segundo (60 por poner un nº).Si tengo 300 FPS, renderizo 300 veces,240 veces n se ven cada segundo.(todo esto en mi caso claro).

Estos 240 render, son inutiles ya q n los vemos y nos consumen MUCHO.Tonces vamos a aprobecharlos en nuestro favor.En mi caso me interesa tener Ciclos de bucle del engine, o lo q es lo mismo, las pasadas q hay cada segundo para hacer procesos.Contra mas tenga mas olgado ira mi makina para los demas procesos.En mi caso inmediato el microprocesador se pone al 100% y pasa poca informacion a la GPU de la tarjeta y esta va facil.A mi n me hara falta tener mas FPS, pero a la gente q vaya con 20 o 30 cm Aureal, Si q le hace falta para poder llegar a tener una jugabilidad importante, y q n le meta tirones.Vamos q le vaya suave (y con baelina :P).

El pilla pongamos 30 (anque creo q me dijo 20 pero da=, tienen una tnt2 y cuando yo la tenia iba a 24 por ahi, en fin 20!!) a toda pastilla intentando renderizar cada milesima de sugundo etc.Ahora lo q hacemos es q cada segundo solo renderice 50 veces.(aki se le puso a 48 FPS o por ahi).
y le sobraron unos 1500 ciclos.Hay q tener en cuenta q si los ciclos de bucle son = a los FPS esq hemos tocado techo con la tarjeta y tendremos q tirar de disminuir la distancia de render para tener mas ciclos, y con estos "cangearlos", por FPS.Esto es lo q hizo.El muy burro xDDDDD se puso 100.0 de disancia de 1000.0 q tenia (500.0 es perfecto, y si bajamos de ahi, pulsando en el teclado numerico el 8 y el 2, ponemos la camara de forma q n veamos el pop-up, la distancia dnd renderiza) pues puso q le renderizara 100 FPS y los ciclos q le sobraron de renderizar el mapa pudo alcanzar 88 FPS con una tnt2 q antes pillaba solo 20 o 30 y de chorra.weno aunque la comparacion seria cuando n disminuyo la distancia de render. seria ANTES 20-30 y despues con esta tecnica 48.(renderizando 5000 poligonos q tiene el mapa con textura y el modelo).

Esta tecnica ahorra procesos inutiles q n nos valen y nos dan mas FPS :).

Y el resultado es bastante bueno. ^^.

PD:Ethernet a ver si te paso lo del control de la NET con esto ok? q ayer n te vi en el IRC                                

Mars Attacks

                                Pues ahora que lo explica de una forma más clara (aunque canjear es con j), me parece que tiene mucha razón. Eso si hz=fps, que no vi yo muy convencido a Colson.
Sería la misma filosofía del frustum aplicada a los fps. Si no se van a ver, ¿para qué calcularlos?                                

TurMach

                                A ver si he entendido lo que cuentas. En mi caso, acostumbro a separar la logica del juego del render puro. Entendiendo como render todo aquello que dependa de GPU.

Entonces, supongamos que la logica tarda 5 mili-seg y el render otros 5 mili-seg

1seg / ( 5 mseg + 5 mseg) = 100 fps

esto significa que haremos 100 pasadas por el bucle de logica y otras 100 pasadas por el bucle de render. Si tenemos un monitor que refresque a 50 HZ (una mierda de monitor, pero los numeros salen mas facil), significa que no apreciaremos los cambios en la mitad de los renders. En definitiva desperdiciando CPU.

Si he entendido bien. La idea seria, por ejemplo, ejecutar el render una vez si otra no. De esta manera dedicariamos mas tiempo al bucle de la logica. Luego los FPS aumentarian, pero hay un poco de fraude pq en realidad se esta dibujando 50 veces por segundo.

en promedio el render pasa a costar 2.5 mseg

luego, queda 1seg / ( 5 mseg + 2.5 mseg) = 134 fps

Lo que no tengo claro es si el resultado queda bien, o si hay que sincronizar de alguna manera. Ya lo probare, y a ver que tal funciona.
:P                                

MaSteR

                                SI ya probaras ;).

Lo q hacemos es ahorrar procesos q n podemos ver para pillar mas FPS.

de 300 FPS n veo 240 de ellos por las caracteristicas de mi monitor.Lo q hago en mi caso es aumentar el rendimiento q tu llamas logico y n meterle tanta caña a la tarjeta.

En el caso de alguien q tiene 20 FPS.Con esto logra 48 FPS.Todo esto depende de la tarjeta y demas claro.                                

Loover

                                A ver, resumiendo es limitar los FPS a los Hz del monitor. Y como ahora dibujas menos frames por segundo, pues tienes más tiempo para la lógica.

Eso no es algo raro ni nuevo. Cuando los fps gráficos superan los Hz del monitor se convierten en unos meros indicadores de potencia de tu ordenador. De ahí que las benchmarks no los limiten.
Mucho juegos (quake, unreal, etc) tienen la opción vsync. Que es justo esto, limitar los fps al refresco del monitor.

Aunque no recuerdo porqué, creo haber leído que esto no era recomendable. A ver si viene alguién que lo sepa y nos lo aclara.

De todos modos, si decides hacer vsync, direct 3d lleva una función para hacerlo. Y opengl tb, mediante una extensión. No hace falta que lo hagas por fuerza bruta. Además, así de paso te ahorras hacer una función que mire los Hz del monitor del usuario, etc, etc.

Repito, esto NO es algo nuevo.

Un saludo.

PD: Master no te metas nunca a profesor, que madre mía tus alumnos no se iban a enterar de un pijo, jajaja. Tu sigue haciendo juegos. :)                                
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

TurMach

                                Creo que el sincronizado vertical (vsync) no es lo mismo. El sincronizado vertical, si no voy equivocado, realiza una espera activa. Es decir detiene el proceso a la espera de que la targeta haya terminado de enviar los datos al monitor.

Pero como no estoy del todo seguro, seria interesante que alguien que conozca el tema nos lo aclare.                                

Loover

                                ¿Detiene el proceso? ¿Seguro?

No lo sé yo tampoco con seguridad.                                
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

MChiz

                                El retrazado vertical lo que te hace es sincronizarte con el monitor. Cuando el haz de electrones llega abajo a la derecha, este ha de volver arriba a la izquierda. Es entonces cuando se aprovecha para volcar el backBuffer al frontBuffer.
Creo que no es lo mismo que Master esta explicando.

Un saludote                                

Mars Attacks

                                No os preocupéis. Estoy haciendo un compilador que traducirá de lenguaje Master a castellano. De momento tiene las funciones contrarias a las del winsms. Es decir, cambia los "n" por "no", los "=" por "igual", etc. Os tendré informados.

P.D.: Es coña, pero si alguien se aburre, por favor, le suplico de todo corazón que lo haga, que se me parte el alma y me lloran los ojos cuando tengo que leer algo del engendro del demonio éste  :llorando:

Algo que me pregunto (por hablar del tema) es qué ocurre cuando en el ordenador ya te va por debajo de los fps que buscas. Es decir, si quieres limitarlos a 40 pero en el ordenador te va a 20, o en mi caso a 2 ¿también se obtiene un beneficio?                                

MaSteR

                                Se obtiene beneficios si los ciclos son mayores a los FPS, si son = (iguales xDDD) los FPS y los ciclos y has aumentado FPS, ya has conseguido mejor rendimiento.

PD:Mars ya te mandare esto al mail.                                






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.