Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: CoLSoN2 en 23 de Enero de 2003, 02:46:23 PM

Título: Problemas de rendimiento
Publicado por: CoLSoN2 en 23 de Enero de 2003, 02:46:23 PM
                                Vereis, estoy haciendo un jueguecillo como proyecto de investigación para el cole, y el caso es que en mi casa con un 866mhz y una gf4ti, una malla de 98,000 vertices me va a 80-85 fps (dividido en 64vertexbuffers).
En el cole tienen 2ghz, y tarjetas TNT2(sin T&L), y esa malla iba pos a 10fps o así xD
Así que hice que pudieras elegir el nivel de detalle de la malla, siendo:
- Alta: ~98,000 vertices
- Media: ~24,000
- Baja: ~5,000
- Muy Baja: ~1500
La alta va a unos 10-15fps, y la muy baja, a unos 20fps.. lo cual me hace sospechar que no es la cantidad de vértices lo que hace que vaya tan lento. Además de la geometría en sí, hay un skybox, que son 12 triangulos, y una nave de ~500polys, que renderizada sola va como la seda.
Cada vértice tiene un color, que blendeo con una textura. Todo el terreno utiliza la misma textura (cada quad), para dar un poco de detalle. Es de 256x256, y no uso mipmapping ni nada (más que nada porque no creo que la TNT2 lo soporte).

¿Qué creeis que puedo hacer para optimizar esto? Porqué está claro que así es injugable..

thx                                
Título: Problemas de rendimiento
Publicado por: _Grey en 23 de Enero de 2003, 06:44:31 PM
                                Pues que yo sepa el cambio de vertexbuffers es algo que puede hacer notar una caida de rendimiento es decir que de la misma manera que recomiendan no cambiar mucho de textura tambien recomiendan no cambiar demasiado entre vertexbuffers.

Yo te recomendaria que esa malla tan grande, no este en tantos vertexbuffers, seria mejor que estubiera en un array (o varios) y cuando la tengas que renderizar pases todas esas partes visibles a un mismo vertexbuffer y la dibujes de una pasada, o varias si hay cambios de texturas, pero en el mismo vertexbuffer. Es mas, te recomendaria que lo tubieras todo en arrays y que los pasara al mimo vertexbuffer, pero con hacerlo solo con la gran malla ya se deberia de notar.

Y que yo sepa la TNT2 soporta mipmaping....... tengo que reconocer que no lo se con certeza pero me extrañaria que no fuera asi, por que lo del mipmaping tiene muuuchoooo tiempo.

ya nos cuentaras, saludotes.                                
Título: Problemas de rendimiento
Publicado por: CoLSoN2 en 23 de Enero de 2003, 07:30:38 PM
                                hmm... utilizo VB dinamicos o creo y destruyo uno a cada frame?
¿Los VB tienen limite de vertices? (lo digo por lo de los 98,000, ya que un index buffer de 16bits solo soporta 65,000) ¿un único VB de 98,000 vertices, si se pudiese hacer, no sería demasiado?                                
Título: Problemas de rendimiento
Publicado por: x-alien en 23 de Enero de 2003, 07:35:54 PM
                                el problema es natural k te pase, una tnt2 no puede mover tanto y menos sin optimizar... cuantos triangulos tienes en pantalla??

has metido la malla en vertexbuffer como D3D_MANAGED??... no se ...
si has hecho eso te ira mas fluido...
he visto en este foro gente k dice k no es aconsejable usar el vertexbuffer para cargar modelos...

tambien puedes optimizar usando esto


if( FAILED( m_pMesh->OptimizeInplace(D3DXMESHOPT_COMPACT | D3DXMESHOPT_ATTRSORT | D3DXMESHOPT_VERTEXCACHE,

                       (DWORD*)m_pAdjacencyBuffer->GetBufferPointer(), NULL, NULL, NULL ) ) )

 {

  SAFE_RELEASE( m_pAdjacencyBuffer );

        SAFE_RELEASE( m_pMtrlBuffer );

  return E_FAIL;

 }

asi eliminas vertices innecesarios, como bien sabes si cargas modelos x, estos estan como trianglelist, por lo cual... hay mas vertices de la cuenta.

un modelo k en el 3dsmax tiene 500 vertices, en dx el mismo modelo tiene + o - 1000 vertices, por culpa del trianglelist, pero es la mejor manera de hacer frustum culling.

yo no uso vertexbuffer para los modelos, no me gusta, por algo esta LPD3DXBUFFER.
puedes hacer como el doblebuffer, front buffer y back buffer.
creas un buffer para el modelo donde hacer los calculos, y otro para meter el resultado, y mostrarlo en pantalla. para esto te hara falta crear 2
LPD3DXMESH, uno para el back y otro para el front. puede parecer complicado al principio pero es una tonteria, con esto ganaras muchos fps asegurado.  :jaja:  :jaja:.

dinos el numero de polgigonos(triangulos) k tienes en pantalla.
usa ->getnumfaces como variable de retorno para mostrar el numero en pantalla de triangulitos

salu2

pd. joder con cataluña!! en la escuela ordenadores de 2 gigas manda webos.. y aki en mi uni el ordenador mas potente es de 266mghz.
joder los andaluces pagamos impuestos para tener contentos a los vascos y los catalanes para k no pidan independencia...                                
Título: Problemas de rendimiento
Publicado por: ethernet en 23 de Enero de 2003, 07:50:35 PM
No se como ira en DX pero yo en opengl lo haria con una display list q segun nvidia es lo mas optimo sin usar extensiones de esas mierdas q tienen ellos XDD. Supongo q DX tendar un simil a display list.

No estan mal los pc's de tu cole pero en realidad se necesita un pc mas rapido para lo q haceis ?.
x-alien: en andalucia los jornaleros han tenido ya la gallina de los huevos de oro con las subvenciones  q el resto de españoles NO teniamos, eso tb cuenta. En cyl no tenemos pc's de 2 ghz por cierto.
Título: Problemas de rendimiento
Publicado por: synchrnzr en 23 de Enero de 2003, 07:56:19 PM
                                2 GHz? Joer, yo también soy de Cataluña y ni siquiera he visto un ordenador de 2 GHz... salvo en los cupones de las tiendas X'DDD

Yo también pienso que es cosa de la TNT2 (más que nada porque tengo una y conozco demasiado bien sus limitaciones ^_^')

sync                                
Título: Problemas de rendimiento
Publicado por: Mars Attacks en 23 de Enero de 2003, 08:00:51 PM
                                En Castellón no tenemos pc's de 266Mghz... por aquí hay aún rulando 486, pero la mayoría son 133  :( (en las salas de libre acceso, en las de prácticas puede que haya algún pII incluso. Los laboratorios son otra historia).                                
Título: Problemas de rendimiento
Publicado por: x-alien en 23 de Enero de 2003, 08:02:47 PM
                                ethernet por lo k veo no ves los telediarios... el bigote aznar debe al pueblo andaluz tal millonada de euros k no podria decir pork da miedo...
ahora mismo el chavesss esta intentando se nos de lo k es nuestro... es decir nuestros impuestos, k pagamos a hacienda... y como dijo chavez en el parlamento andaluz... nuestros impuestos no es para k se lo keden los catalanes y vascos =).
de lo k pagaron los andaluces, solo hemos recibido un 15%, donde esta el resto... como bien sabes el dinero de todas las comunidades va a parar al gobierno central, y este reparte...
las subvenciones son para extremadura y andalucia ya k son las comunidades de mayor agricultura, y ese dinero viene de la comunidad europea... ademas han kitado el per... asi un agricultor se muere de hambre.  :X9:

offtopic total  :jaja:  :jaja:  :jaja:  :jaja:

salu2 :ojo:                                
Título: Problemas de rendimiento
Publicado por: Zaelsius en 23 de Enero de 2003, 08:18:08 PM
Pues sólo recalcar lo que se ha dicho: tienes que mandar los triángulos a la tarjeta de la manera más eficiente posible, intentando hacer muy pocas llamadas a DrawVertex...(no me acuerdo como se llama la función), y enviando la mayor cantidad de triangulos posibles. Esto suele ser lo más óptimo cuando sabes que la tarjeta aguanta un nº de triángulos por segundo determinado.

Offtopic: Pues en la Universidad de ALicante, el equipo medio en el que suelo realizar las prácticas podría ser un IBM P3-450 con 64MB, aunque suelo utilizar bastante IBM P4-1400/256 MB/TNT Vanta(laboratorios de prácticas libres), y Siemens P4-1500/256 MB/Radeon 7500(salas de informática de libre acceso)(en estos me suelo pegar algun vicio al Wolfenstein o Quake3 de vez en cuando, que complementados con la conexión a RedIris se hacen bastante amenos en el modo multijugador).

Jur jur, venios todos p'Alicante!!!

¿Por cierto, alguien va a venir a la Xplanada Party(se hace en la UA)?
Título: Problemas de rendimiento
Publicado por: _Grey en 23 de Enero de 2003, 08:22:52 PM
                                Utiliza vertexbuffer dinamicos (D3DUSAGE_DYNAMIC), NI SE TE OCURRA CREAR Y DESTRUIR UNO EN CADA FRAME,los creas al inicio de la fase del juego o asi, PERO NUNCA CREES Y DESTRUYAS VERTEXBUFFER CADA FRAME!!!

Un indexbuffer puede ser de 32bits, pero no es muy recomendable usarlo por que muchas targetas no lo soportan...lo mejor es que llenes el vertbuffer (y el indexbuffer si lo usas tambien) con todo lo que puedas y lo dibujes, luego lo rellenas otra vez y asi..... es decir, tienes la malla dibidida en 64 arrays(no vertexbuffer) como comentas al principio del post, pues rellenas ese vertexbuffer con el que rendizaras incluyendo las partes que caben, lo dibujas, y lo rellenas con el resto de partes asta que lo dibujas todo.

Recuerda que cambiar de vertexbuffers hace caer el rendimiento, es algo a evitar en la medida de lo posible, como los cambios de texturas y demas.

[A TODOS]
Ya se que la TNT2 no es una GForce4TI, pero chicos si incluso con la malla "Muy Baja" corre asi....


[x-alien]
Andalucia es un pozo sin fondo......... y detesto ese smile!! :x                                
Título: Problemas de rendimiento
Publicado por: Zaelsius en 23 de Enero de 2003, 08:24:49 PM
Citar
Yo también pienso que es cosa de la TNT2 (más que nada porque tengo una y conozco demasiado bien sus limitaciones ^_^')

Joer, yo creo que una TNT2 tira de sobra para lo que quiere hacer Colson: P3-550, 128MB RAm y TNT2 sacan unos 65 FPS con el quake3 a 800x600, 32 bit. (aproximadamente)

Tambien puede ser que se junte todo:mala optimización, y puede que un modelo de TNT2 del carrefour(una m64 de 16mb, que las hay!!, y son las que solian pinchar en algunos equipos "de marca")
Título: Problemas de rendimiento
Publicado por: Mars Attacks en 23 de Enero de 2003, 08:25:31 PM
                                Mi idea es migrar a Alicante cuando acabe el primer ciclo (el curso que viene si todo me va bien XDDDDDD así que será al otro). ¿Qué es la Xplanada Party?

Y perdón por el offtopic... yo no tengo ni idea de rendimientos pero me curiosean muchas cosas que dicen por aquí...                                
Título: Problemas de rendimiento
Publicado por: synchrnzr en 23 de Enero de 2003, 08:40:22 PM
                                Creo que el Quake III no mueve tantos polígonos... de todas formas la TNT2 que tengo es gay (no sé si de 16 o de 32Mb) y tengo comprobado que cuando te mueves por ese número de polígonos optimizando al máximo (bueno... con display lists de triangle strips creo que conseguía el mejor rendimiento) va petada. Bueno, supongo que ya se supone, me refería en todo momento a más de 65K polígonos.

Mejor que no me meta en esas cosas, que lo mio es el sonido y de lo demás no domino :ojo:

sync                                
Título: Problemas de rendimiento
Publicado por: ethernet en 23 de Enero de 2003, 08:48:37 PM
Colson; q es eso q tiene tantos poligonos?

x-alien: como veo lees El pais xDDDDDDDDDD. Unas preguntas: por q cuando cyl es una comunidad q tiene tanta cantidad de agricultores como andalucia no ha percibido las ayudas q hasta ahora recibian los andaluces y extremeños? cuanto dinero nos deben a cyl (y a otras comunidades)por impago de esas subvenciones ( no las de la comunidad europea) ?: no se si te habras percatado pero la ley de empleo tan famosa va con el fin de eliminar esas extra-mega-ayudas( despues se han pasado un bastante pero eso es aparte, de ahi la modificacion). Nosotros tb queremos estar trabajando 2 meses y cobrando 8. quien no? y tu? En cyl queremos el per para los agricultores q son iguales q los andaluces y extremeños. Me parece q esa politica es la misma q no te gusta con respecto al reparto a los vascos y catalanes.
Título: Problemas de rendimiento
Publicado por: ShAq en 23 de Enero de 2003, 09:22:25 PM
                                OffTopic: bueno ya que mi amigo ZaelsiuS debido a que no tiene tarifa
plana no te ha contestado, te contesto yo mars, la xplanada party, es
una especie de campus party pero a menor escala, que se hace aqui
en la universidad de Alicante, se suele hacer para semana santa, la
uni cede una sala con monitores y la gente se lleva su pc:P,la diferencia
con la campus es que esta es gratis, :enfadado: jaja
sorry por el offtopic, hasta pronto!                                
Título: Problemas de rendimiento
Publicado por: Mars Attacks en 23 de Enero de 2003, 10:13:07 PM
                                Pues ten por seguro que me verás allí, aunque no este año, ni quizás al próximo...
Por aquí tenemos la i-Party, donde la organización de desarrollo de software Aditel monta una pequeña party donde se instala y configura linux a todo aquel que lo quiera, amén de otras muchas cosillas que se suelen hacer en las partys :)
Este año está un poco chunga la cosa, no sé si la harán al final o qué...                                
Título: Problemas de rendimiento
Publicado por: x-alien en 23 de Enero de 2003, 10:24:02 PM
                                no leo el pais  :X9: , solo veo los telediarios, y principalmente los telediarios de mi tierra, canal sur  :X9:...

no se.. pero el aceite oliva k tu tomas es de andalucia =).
cyl no es tan agricola como extremadura y andalucia... y yo no hablaba de ayudas al agricultor... hablaba de los impuestos... pork los ordenadores de las escuelas lo pagamos con los impuestos =)  :jaja:  :jaja:  :jaja:.
si los andaluces pagamos impuestos es para k lo k pagamos se kede para mejorar nuestra tierra y no cataluña y el pais vasco, tal y como dijo el presidente de la comunidad andaluza, chavez.

salu2

pd. andalucia es un pozo sin fondos pork les roban...para otras comunidades :X9:                                
Título: Problemas de rendimiento
Publicado por: CoLSoN2 en 23 de Enero de 2003, 10:50:52 PM
                                Vaya, como se ha animado el post ! Como decía Jack el Destripador, vayamos por partes:

Citar
el problema es natural k te pase, una tnt2 no puede mover tanto y menos sin optimizar... cuantos triangulos tienes en pantalla??  
en el primer post digo los vertices, divide por tres y ya lo tienes.

Citar
has metido la malla en vertexbuffer como D3D_MANAGED??...  
sip

Citar
tambien puedes optimizar usando esto  
Código:  

if( FAILED( m_pMesh->OptimizeInplace(D3DXMESHOPT_COMPACT | D3DXMESHOPT_ATTRSORT | D3DXMESHOPT_VERTEXCACHE,  
                       (DWORD*)m_pAdjacencyBuffer->GetBufferPointer(), NULL, NULL, NULL ) ) )  
   {  
      SAFE_RELEASE( m_pAdjacencyBuffer );  
        SAFE_RELEASE( m_pMtrlBuffer );  
      return E_FAIL;  
   }  

asi eliminas vertices innecesarios, como bien sabes si cargas modelos x, estos estan como trianglelist, por lo cual... hay mas vertices de la cuenta.  
Pero esto es un método de ID3DXMesh, no? yo uso un vertex buffer sin mas

Citar
joder los andaluces pagamos impuestos para tener contentos a los vascos y los catalanes para k no pidan independencia...
jaja, ui si, tamos tol dia pidiendo independencia XD

Citar
Utiliza vertexbuffer dinamicos (D3DUSAGE_DYNAMIC), NI SE TE OCURRA CREAR Y DESTRUIR UNO EN CADA FRAME,los creas al inicio de la fase del juego o asi, PERO NUNCA CREES Y DESTRUYAS VERTEXBUFFER CADA FRAME!!!  
oki, doki

Citar
Colson; q es eso q tiene tantos poligonos?  
un terreno :P

OFFTOPIC: lo de los ordenas del cole, es que es uno de los mas grandes de Catalunya. Tenemos 5 salas de ordenas. Hasta hoy, había una con ordenas entre 1500 y 2000 mhz (aunque tarjetas suckers TNT2), y 256RAM, otra de infografía de unos 1000-2000 (no se que tarjetas), otra de unos 400-700mhz, otra de 133-300 y otra con X86 XD
Sin embargo, hace un par de días nos llegó una nueva remesa de ordenas "cutting-edge"+ploters y demás pijaditas, hoy los estaban instalando, a ver si tienen tarjetas decentes..                                
Título: Problemas de rendimiento
Publicado por: CoLSoN2 en 24 de Enero de 2003, 12:13:18 AM
                                Estoy mirando como usar VB dinamicos en el SDK y en un momento dice que el metodo mas rapido para crearlos y renderizarlos es:


for loop()

{

   pBuffer->Lock(...D3DLOCK_DISCARD...); //Ensures that hardware

                                         //doesn't stall by returning

                                         //a new pointer.

   Fill data (optimally 1000s of vertices/indices, no fewer) in pBuffer.

   pBuffer->Unlock()

   Change state(s).

   DrawPrimitive() or DrawIndexedPrimitive()

}


Veamos,
1) el loop(), que condicion debería tener?
2) que significa "doesn't stall by returning "?
3) Cuando dice "optimally 1000s of vertices/indices, no fewer", a cuantos 1000s se refiere ? pueden ser 98,000? :P
4) El "Change state(s)." que se supone que hace?
5) He leído que no se puede usar D3DPOOL_MANAGED con los dinamicos. uso default, pues?
6) A la hora de hacer el dev->CreateVertexBuffer, el número de vertices que alojará que pongo? el máximo que es posible que aloje?

bye                                
Título: Problemas de rendimiento
Publicado por: _Grey en 24 de Enero de 2003, 03:13:04 AM
                                Bueno ese ejemplo de la documentacion esta en seudo-codigo por eso ese loop() o ese Change state(s) y demas.

Las preguntas:
1) Lo que quieren decir con el loop es que rellenes el vertexbuffer lo renderizes y despues lo hagas otra vez y asi las veces que sean necesarias,basicamente lo que queria yo queria decir con:

"mejor es que llenes el vertbuffer (y el indexbuffer si lo usas tambien) con todo lo que puedas y lo dibujes, luego lo rellenas otra vez y asi.."

Es una manera de no cambiar de vertexbuffer para no bajar el rendimiento, y creeme que suele funcionar

2) Pues la verdad...... ahora no se si dice que el puntero que retorna puede ser distinto en cada llamada que hagas o todo lo contrario......diria que lo primero... :-?

3) Sencillamente miles,algunas veces se ha discutido por estos foros cual es el bloque mas grade que se pueda enviar con un resultado bueno en rendimiento, parece depender del hardware que tengas pero basicamente te lo dicen para que no vallas triangulo a triangulo, como hacian algunos en antaño! :ojo: 98000? puede ser pero si usas indexbuffer seguras necesitando 2 llamadas al DrawIndexedPrimitive() y escrivir 2 veces en el indexbuffer.

4) Los SetRenderState() que te sean necesarios antes del Draw(Indexed?)Primitive().

5) Como tu dices D3DPOOL_DEFAULT, no lo hace todo el mundo? :ojo:

6) Pues claro!  :D si piensas que almacenara 30mil pues 30mil(recuerda el punto 3 sobre lo de los 98000 vertices), y recuerda "Size of the vertex buffer, in bytes" :ojo:

Saludotes y espero que chute rapido :D                                
Título: Problemas de rendimiento
Publicado por: CoLSoN2 en 24 de Enero de 2003, 07:37:14 AM
                               
Citar
puede ser pero si usas indexbuffer seguras necesitando 2 llamadas al DrawIndexedPrimitive() y escrivir 2 veces en el indexbuffer.  
Ya usaba index buffers antes de VB solamente, pero en el PC del cole se veían cosas raras (en el mío se veía de lujo), así que lo pasé todo a VB y ara va bien (se ve bien, pero muy lento xD).

Entonces no me ha quedado claro si 98,000 pueden entrar en un vb, o debería llenarlo y renderizar 2 o 3 veces ... mejor 2 o 3 , no?                                
Título: Problemas de rendimiento
Publicado por: BeRSeRKeR en 24 de Enero de 2003, 01:16:43 PM
                                En nVidia tienes documentos que hablan sobre el tema del correcto uso de los vertex buffers. El tema no es para tomárselo a broma ya que del buen uso o no de los VB dependerá el rendimiento de tu aplicación :-?

Aquí tienes uno sobre cómo utilizar los VB adecuadamente

http://developer.nvidia.com/view.asp?IO=Ef..._Vertex_Buffers

y aquí tienes unos templates para el manejo de VB & IB dinámicos y estáticos que puede que te sirvan para hacer un uso adecuado de ellos:

http://developer.nvidia.com/view.asp?IO=dynamic_vb_ib

Saludos                                
Título: el tema de la tnt2 xD
Publicado por: Aureal en 31 de Mayo de 2003, 04:49:41 PM
                                Bueno yo he tenido una TNT2 y queria decir que tiene mipmapping, filtro bilineal, trilineal, 32 bits de color y he ejecutado Unreal Tournamet 1 a 1024 a 32 bits de color a 30 fps en mi amd k6-3 a 400 mhz con 128 mb de ram, asi que ya os podeis hacer una idea de lo k vale este chip.

Tambien quiero hacer una aclaracion: el Unreal Tournament iba asi de rapido pq tenia los drivers originales especificos de TNT2 anteriores a los Detonator de NV k son una mierda, pq hoy mismo en el mismpo hardware el mismo juego va mas lento, a 800x600x16 va bien pero ahi ahi, y lo k estoy diciendo es usando d3d de renderizador que por aquellos entonces iba por la version 7 y por supuesto con el juego actualizado con el ultimo parche.

Una vez aclarado esto, nada mas, hasta la proxima.