Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





¿Un simple cuadrado, por ocupar la pantalla entera hace bajar 100fps?

Iniciado por xeex, 30 de Septiembre de 2008, 08:54:21 PM

« anterior - próximo »

xeex

Hola,
Tengo un simple cuadrado cuyas caras( frontal y trasera) son perpendiculares al eje z.
El tamaño del lado de este cuadrado es lo suficientemente grande para cubrir por completo la pantalla.
Cuando le hago render a nada, es decir, tengo la pantalla vacia, me da 290 FPS,
cuando le hago render al cuadrado que ocupa toda la pantalla me da 200 FPS.
¿por que es esto?
siendo que solo son 4 llamadas a glVertex3f(), por que tanto bajan los fps.
Me imagino oviamente que es por que se esta renderizando una superfice tan grande como la pantalla...¿es asi? ¿eso es?
Estoy condenado a perder 90 frames cuando el espacio a renderizar es muy amplio, siendo que hay una cantidad infima de llamadas a
glVertex().
Siempre estuvo en mi cabeza que al final lo que hace lento a un programa en openGL son las cantidad de llamadas a vertex,color,normal,texture,...etc etc. pero que fuera por el area que se muestra, no tenia idea...¿es asi?.
Ayuda, por favor....


Zaelsius

Los FPS no son indicativos de hasta que tienes una cierta carga de elementos en pantalla. Sigue programando tu juego (o motor) y ya te preocuparás más tarde del rendimiento. En ningún caso esperes que vas a perder 90FPS por cada quad en pantalla...


Offtopic: cagüen las cookies  :grrr:

xeex

gracias por responder, en realidad ya termine hace bastante, llevo arto en esto del rendimiento. Se que por cada simple quad no me va bajar 90fps.
Di el ejemplo del cuadrado por ser una superficie simple. Podria a ver sido un triangulo...da lo mismo. Lo que hago incapie es que ocupe toda la pantalla.
Por ejemplo un modelo 3d(*.obj) que tiene ,no se, 5000 caras,bueno la cosa es que si no le hago render a nada obtengo 290fps,
si renderizo el objeto me da 270(mas o menos)...pero si hago crecer el objeto o me acerco a el para que este ocupe toda la pantalla
obtengo 200 o menos...no se si ahora me explique bien.

Osea tengo un simple quad, pero que ocupa toda la pantalla y me da 200fps
Ahora tengo un objeto 3d con miles de caras,5000, que no ocupa toda la pantalla,digamos solo una 4ta parte, y esto me da 270?¡?¡?¡?¡?¡?¡?¡?¡
como puede ser?¡?¡
Es eso lo que no entiendo.

AK47

Los FPS son importantes, sí, pero más o menos cuando tienes todo el tinglado en marcha. Además no es una medida lineal: no es lo mismo bajar de 2000 FPS a 1940 FPS que de 100 FPS a 40 FPS. En ambos casos "pierdes" 60 FPS, pero en el último caso has "perdido" mucho más rendimiento, porque en el primer caso cada frame dura muchísimo menos que en el segundo. Mejor miras cuantos milisegundos tardas en renderizar cada frame, en vez de mirar los FPS.

Aparte de esto, en el rendimiento no sólo influye el número de polígonos, también hay otros factores como el fillrate. Como bien dices, en un caso le cuesta más a la tarjeta dibujar toda la pantalla aunque sean 2 polígonos que 4 pixeles que representan un modelo de miles de polígonos a mucha distancia de la cámara. ¿Nunca te has fijado como en un juego va todo bien, entras dentro de un "chorro" de humo y de pronto bajan los FPS? Eso es porque cada partícula de humo ocupa mucha más pantalla y por cada pixel tiene que hacer cálculos de semitransparencia etc.

Buffon

Cita de: xeex en 01 de Octubre de 2008, 12:04:03 AM
gracias por responder, en realidad ya termine hace bastante, llevo arto en esto del rendimiento. Se que por cada simple quad no me va bajar 90fps.
Di el ejemplo del cuadrado por ser una superficie simple. Podria a ver sido un triangulo...da lo mismo. Lo que hago incapie es que ocupe toda la pantalla.
Por ejemplo un modelo 3d(*.obj) que tiene ,no se, 5000 caras,bueno la cosa es que si no le hago render a nada obtengo 290fps,
si renderizo el objeto me da 270(mas o menos)...pero si hago crecer el objeto o me acerco a el para que este ocupe toda la pantalla
obtengo 200 o menos...no se si ahora me explique bien.

Osea tengo un simple quad, pero que ocupa toda la pantalla y me da 200fps
Ahora tengo un objeto 3d con miles de caras,5000, que no ocupa toda la pantalla,digamos solo una 4ta parte, y esto me da 270?¡?¡?¡?¡?¡?¡?¡?¡
como puede ser?¡?¡
Es eso lo que no entiendo.

no estarás reconfigurando la pantalla cada vez que pintas la ventana no ?

supongo que esos errores no los tienes pero por si acaso :P

[EX3]

Esto te pasa en modo ventana o a pantalla completa? Lo digo por que a veces, y a mi me ha llegado a pasar mucho (sobre todo en XNA), en modo ventana me variaba de forma muy exagerada la cantidad de FPS en comparacion a ejecutarlo en modo pantalla completa, de un orden de 30/40 FPS en ventana a 60/80 FPS en pantalla completa con las mismas llamadas. En verdad lo que te debe importar es la carga que le puedas meter al motor con varias llamadas y no por la penalizacion que veas en una sola llamada, es el conjunto lo que te interesa.

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

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

xeex

Muchas gracias por responder.
Quizas mi forma de enternder el rendimiento no es la adecuada.
Con mi programa quiero poder crear un edificio, para ello tengo herramientas de edicion, y otras cosas comunes. Dentro de estas cosas comunes tengo un planta, perfil, elevacion y una vista en perspectiva que la obtengo mediante simular una camara, tal como en los juegos. Para esto tengo 4 viewport, con lo cual el rendimiento disminuye considerablemente. Por eso decidi, dejar mi programa atraz,que aproposito ya lo tengo acabado y empezar desde cero con solo 1 viewport y figuras basicas, renderizarlas e ir comparandolas con otros modelos mas complejos para tratar de cuantificar como es el desempeño de los programas en opengl a medida que uno agrega figuras,ya sean estas simple, grades,chicas,lejanas etc., tratando de ver cuando se sufre una disminucion considerable en los fps. En eso estaba cuando me percate de que si uno tiene una figura, por mas simple que esta sea, al acercarce a ella o al tenerla lejos pero, al hacerla crecer, el rendimiento disminuia. Es por eso que preguntaba, no me cabe en la cabeza que un simple triangulo o cuadrado ocupe la misma cantidad de rendimiento que lo que haria un modelo complejo e iluminado(como dije miles de caras).

Cita de: AK47 en 01 de Octubre de 2008, 08:35:24 AM
...Como bien dices, en un caso le cuesta más a la tarjeta dibujar toda la pantalla aunque sean 2 polígonos que 4 pixeles que representan un modelo de miles de polígonos a mucha distancia de la cámara...

Bueno lo que pregunto no es tan asi, yo digo que tengo un moledo complejo en el cual no es representado por un par de pixeles sino que ocupa una parte importante de la pantalla, como 1/4 o 1/2 de esta y asi me da la misma cantidad de fps que un simple cuadrado que la ocupa en un 100%...es eso lo que no me cuadra.
De todas maneras, de lo que me han dicho:

Cita de: [EX3] en 01 de Octubre de 2008, 10:25:02 AM
En verdad lo que te debe importar es la carga que le puedas meter al motor con varias llamadas y no por la penalizacion que veas en una sola llamada, es el conjunto lo que te interesa.

Cita de: AK47 en 01 de Octubre de 2008, 08:35:24 AM
Los FPS son importantes, sí, pero más o menos cuando tienes todo el tinglado en marcha.

Cita de: ZaelSiuS en 30 de Septiembre de 2008, 11:32:31 PM
Los FPS no son indicativos de hasta que tienes una cierta carga de elementos en pantalla.

...me imagino que el analisis que estoy tratando de hacer no es el correcto, uds. dicen que hay que tener todo lo que uno desearia mostrar en la escena y de ahi preocuparse de acelerar el  rendimiento. Pero ese es el problema, no se la cantidad de figuras que voy a mostrar, esto que trato de hacer es para representar un edificio que tiene varios lados y superficies curvas...etc etc.


Cita de: [EX3] en 01 de Octubre de 2008, 10:25:02 AM
Esto te pasa en modo ventana o a pantalla completa? ...

Me pasa en pantalla completa.

Cita de: Buffon en 01 de Octubre de 2008, 10:17:49 AM
no estarás reconfigurando la pantalla cada vez que pintas la ventana no ?

no te entendi, ¿que quieres decir con reconfigurar la pantalla por cada  vez que pinto?

igual tengo otras preguntas aparte de las anteriores...si me pudieran ayudar..
Trabajo con opengl,dev-cpp,allegro y allegroGL. Mi resolucion de pantalla para el escritorio y aplicacion es de 1280x800,AGL_COLOR_DEPTH=32
Un notebook:toshiba a215 sp-4017,
Procesador: AMD Turion 64 X2 TL-52 @ 1.6Ghz
Caché : 128Kb x 2 L1, 512Kb x 2 L2
HTT : 1600Mhz Full Duplex
RAM : 512Mb x 2 @ 667Mhz Dual Channel
Video : Ati Radeon Xpress 1200 (basado en el X700) con HyperMemory
con eso obtengo, como les dije, 310 fps con la pantalla vacia...¿Esta bien para mi esa cantidad?...siempre he tenido esa duda, creo que es poquisimo. Siempre escucho hablar de que la gente obtiene miles de fps con la pantalla vacia.

Por el hecho de tener 4 viewport, como es la curva de rendimiento? o no hay algun tipo de formula o aproximacion. Me refiero a que si tengo solo uno y muestro una figura me da x fps, entonces mostrando la misma figura con 4 viewports me debera dar x/4 fps o algo asi? ¿o no?¿o como es?.
gracias y saludos.

[EX3]

Cita de: xeex en 01 de Octubre de 2008, 08:14:07 PM
con eso obtengo, como les dije, 310 fps con la pantalla vacia...¿Esta bien para mi esa cantidad?...siempre he tenido esa duda, creo que es poquisimo. Siempre escucho hablar de que la gente obtiene miles de fps con la pantalla vacia.
No te quemes mucho la cabeza con conseguir cuantos mas fps. 60 es lo idoneo y 30 lo minimo aceptable para que se vea suave el renderizado de la escena en movimiento. Lo que no tiene sentido es medir la velocidad de un programa tomando de base sus fps con la ventana vacia. Como te decia, preocupate mas por los fps que obtengas renderizando una escena completa que por un simple poligono. A la tarjeta le cuesta apenas lo mismo dibujar un triangulo que una lista de ellos ya que en los dos casos sera una sola llamada y un solo envio de datos a la tarjeta, de ahi que midas mas en cantidad de objetos (listas de triangulos y los respectivos calculos de transformacion y/o fisica) a que midas un solo triangulo.

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

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

xeex

Gracias [EX3].
Si, no tiene mucho sentido preocuparse por las velocidades de lo que no se muestra, pero, era para comparar..., para descartar un problema de driver de targeta, de version de allegro,de mala inicializacion,etc etc... era para eso...sigo teniendo la duda.
De vuelta al programa entonces...a ver que se puede hacer.
Si alguien me ayuda con las otras dudas...

gracias y saludos.

Buffon

Me refería al tipo gazapo que te enseñan al empezar a hacer programación gráfica, tipo práctica 1.

void reshape(int w, int h)
{
   glViewport(0, 0, w, h);
   glMatrixMode(GL_PROJECTION);     // Select The Projection Matrix
   glLoadIdentity();                // Reset The Projection Matrix
   // Calculate The Aspect Ratio And Set The Clipping Volume
   if (h == 0) h = 1;
   gluPerspective(80, (float)w/(float)h, 1.0, 5000.0);
   glMatrixMode(GL_MODELVIEW);      // Select The Modelview Matrix
   glLoadIdentity();                // Reset The Modelview Matrix
}

y luego la típica DrawScene que vaya llamando todo el rato a reshape.

Esto te lo cuento por que hace ya unos 5 años que toqué por primera vez OpenGL y mi compañero de aquella práctica la llamaba ... no preguntes por qué xDDD

De todas maneras te veo muy avanzado así que no creo que sea ese el problema.

wereoffs

Es mas costoso el ca´lculo de rasterizado y operaciones de fragmento que la del cálculo de vértices. Si renderizas un quad a pantalla completa, la soperaciones de vértice son mínimas, pero las de rasterizado no, hay que pintar todos esos píxeles en pantalla, supongo que por eso se te ve afectada la tasa de frames.

xeex

gracias a todos, tuve que bajarle la resolucion sino no me daba mas....gracias

DiegoBM

Creo que tu problema es lo que dice wereoffs. Mira a ver que shader estas aplicando al modelo, si estas aplicando normal mapping o per-pixel lighting donde se calcula la iluminacion para cada pixel, cuando el objeto esta lejos de la camara la iluminacion solo se calcula para unos pocos pixels de la pantalla, pero cuando el quad esta tan cerca como para ocupar toda la pantalla, la luz se calculara tantas veces como puntos de resolucion tenga tu modo de video. Es decir que si tienes un modo de video por ejemplo a 1024x768, se calcularia la ecuacion de phong 786432 veces por frame y yo diria que eso es una buena cifra.

No se si me he explicado correctamente, pero mira a ver si van por ahi los tiros.

Un saludo.

rijkaard

xeex, una pregunta, cuando pones el cuadrado a pantalla completa, ¿es posible que una buena parte del cuadrado se te vaya fuera del "monitor"? ¿que pasa si ese cuadrado lo muestras a la mitad, o algo más pequeño que la ventana?







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.