Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: Drácula en 01 de Enero de 1970, 01:00:00 AM

Título: BackFace Culling
Publicado por: Drácula en 01 de Enero de 1970, 01:00:00 AM
                                Se habla mucho aqúí de la optimización BackFace Culling. Sin embargo, en mi primer motor implementé y estudié ampliamente esta opción y...¡no se ganaba tiempo en absoluto!
Y de verdad que estudié mucho el tema, probando diferentes técnicas y en ningún caso, en ninguno, valía la pena.

¿En qué me equivoqué?                                
Título: BackFace Culling
Publicado por: BeRSeRKeR en 01 de Enero de 1970, 01:00:00 AM
                                Supongo que la cosa estará en la carga que le metas al engine...un engine como por ejemplo el de quake3, tengo entendido que realiza muchos calculos para el backface culling así que por algo será...y es que en el caso concreto de quake3 hay que tener en cuenta que se pueden dar más de 4 pasadas por face [textura base + detalles (que pueden ser bastantes pasadas) + lightmap + niebla]...así que ahí supongo que vale la pena el backface culling ya que evitas un gran nº de cálculos.

Conclusión...pues que si el engine no da muchas pasadas por face con distinto tipo de efectos aplicados (scroll, turbulencias, rotaciones, deformación de vértices, etc) pues no se notará pero si es el caso contrario pues puede que si se note un incremento en el rendimiento...pero no te lo puedo asegurar :sonriendo:

Un saludo
                               
Título: BackFace Culling
Publicado por: Drácula en 01 de Enero de 1970, 01:00:00 AM
                                Berserker:

Según lo que tu me dices, lo que hay que hacer no es Back Face Culling, sino Back Vertex Culling!!

Sigo creyendo que el Back Face Culling NO tiene sentido. Yo incluso ordenaba las caras de los objetos para que el BackFace fuera óptimo...¡y ni así se ganaba!                                
Título: BackFace Culling
Publicado por: BeRSeRKeR en 01 de Enero de 1970, 01:00:00 AM
                                Tal vez tenga un concepto equivocado del backface culling...:sonriendo: ¿no se trata de descartar las caras según su orientación con respecto a la cámara?.

Por otra parte...¿que es el back vertex culling?...¿el resultado no es lo mismo que el backface culling?...al fin y al cabo con el backface culling ¿no estás descartando vértices?...

Un saludo
                               
Título: BackFace Culling
Publicado por: Drácula en 01 de Enero de 1970, 01:00:00 AM
                                No es lo mismo el Back Face que el Back Vertex(que es un concepto que me inventado yo después de tu primera respuesta!)

El problema del back face culling es que no sirve para nada si no puedes descartar los 3 vértices que forman la cara. Pero para poder descartar los 3 vértices tienes que RECONSTRUIR la indexación de las caras. Y además tienes que SABER que puedes descartar esos 3 vértices.
Y TOOOOODOOO esto para no pintar una cara que el hardware ya decide por sí solito que NO tiene que pintarla.

Por eso digo que no sirve para optimizar. Sin embargo he leido muchos posts donde parece que sí lo usais para tal acción, y por ello mi pregunta de a ver si el método que utilizais realmente optimiza.                                
Título: BackFace Culling
Publicado por: turrican en 01 de Enero de 1970, 01:00:00 AM
                                Yo creo que el backface culling si es de gran utilidad, por el simple hecho de que te ahorras la rasterizacion de un monton de caras a costa de un simple dotproduct, y eso para cualquier tarjeta grafica es un gran alivio.
Todo depende del tipo de motor, pero tranquilamente puedes llegar a ahorrarte el render del 40% de las caras de la escena!

Lo de que dices Dracula es que la tarjeta ya hace el backface culling por ti. En ese caso (si la tarjeta tiene procesamiento de vertices por hardware) puedes ahorrarte el hacerlo tu, pues ella lo hara mucho mas rapido.
Lo que no debes hacer nunca es hacer el backface culling tu a mano y dejarle a la tarjeta que lo haga tambien. No me extraña que no consiguieras fps, lo que me extraña es que no los perdieras! En conclusion, si decides hacer tu el backface culling es mejor que desactives el backface culling de directx.

Salu2                                
Título: BackFace Culling
Publicado por: BeRSeRKeR en 01 de Enero de 1970, 01:00:00 AM
                                No si realmente yo también lo descarté por lo mismo pero era simplemente por saber si lo que yo hacía era backface culling :riendo:

Ahora bien si ahora llega alguien diciendo que no, que si que se nota el aumento en el rendimiento (por que lo ha comprobado) pues entonces habrá que revisar las cosas...

Un saludo                                
Título: BackFace Culling
Publicado por: Drácula en 01 de Enero de 1970, 01:00:00 AM
                                No entiendo bien a Turrican. ¿Dices que el BFC será más rápido si tienes una GPU? Yo creo que no.

Y pensad como funciona una tarjeta:Coge los vértices, los convierte, y empieza a dibujar triángulos. Pero antes de dibujar el triángulo comprueba el BFC...¡a nivel 2D!

Por ello si no eliminas vértices, el BFC no sirve para nada.

Atención:¡esta es la conclusión a la que llegué después de mucho probar y optimizar! Si alguien no está deacuerdo...¡que comparta sus conocimientos con nosotros!                                
Título: BackFace Culling
Publicado por: BeRSeRKeR en 01 de Enero de 1970, 01:00:00 AM
                                Si, creo que es necesario diferenciar entre el backface culling 2D (el que hace OpenGL o Direct3D) y el back face culling que se hace en coordenadas de mundo...                                
Título: BackFace Culling
Publicado por: turrican en 01 de Enero de 1970, 01:00:00 AM
                                Bueno, yo creo que el tema es el siguiente:
El backface culling no me caber duda de que se pueda hacer 2d, seguro que si, pero que yo sepa directx lo hacer 3d. Esto es asi porque al hacerlo tiene que contar con las coordenadas de textura que tienen perspectiva. Una vez en 2d la perspectiva se ha perdido y no es tan facil extrapolar. Esto no pasa con el vertex color que no utiliza perspectiva. No se si me estoy explicando muy bien...
Bueno, el caso es que si tienes el backface culling activado y le pasas a directx vertices ya transformados, este transformara inversamente tus poligonos a coordenadas de mundo (matriz inversa de view*matrix) para testear el backface culling, lo cuel no parece demasiado bueno verdad...
Por eso no es nada bueno tener el backfce culling activado si le pasas caras ya transformadas. Para eso es mejor que hagas el backface culling tu a mano antes.
Otro cantar bien distinto es si tu le pasas a directx caras sin transformar. en este caso el testeara el backface culling antes de transformarlas.

Bueno creo que no se me olvida nada. No se si me explicado bien...
Esta es mi humilde opinion sobre el tema, pero por supuesto no estoy en posesion de la verdad absoluta y me encantaria leer otras opiniones.

Salu22                                
Título: BackFace Culling
Publicado por: Drácula en 01 de Enero de 1970, 01:00:00 AM
                                Turrican:
Me parece que estás equivocado. DX NO hace BFC en 3D. Y el culling que tu dices que se indica, es para que él sepa la dirección del culling y si realmente quieres hacerlo.

El hardware sólo puedo resolverlo en 2D y nunca en 3D, puesto que no tiene ni idea de la matriz de la cámara, aunque haya una GPU!!                                
Título: BackFace Culling
Publicado por: _Grey en 01 de Enero de 1970, 01:00:00 AM
                                Igual peko de tonto... pero despues de leer el 3 msg de Dracula de este post... tengo la impresion de que no ganas velocidad por que dibujas esas caras que no tienes que dibujar por que otras caras usan sus mismos vertices?? y lo dejo en interrogacion por que realmente no se entiende muy bien lo que decias, pero no sera eso??

Cambiando de tema la eliminacion de las caras en 2d....... o tampoco os he entendido o.... es perfectamente factible, de echo se hacia hace tiempo ,pero no salia bien... por que no lo aplicaban bien..... o me e echo un lio al leeros(DIOS ESPERO QUE NO SEA ESO!).

Saludos.                                
Título: BackFace Culling
Publicado por: Emotion en 01 de Enero de 1970, 01:00:00 AM
                                para Dracula:

BACK VERTEX CULLING??? eso no existe!!

lo que tu dices se parece un poco al calculo de Phong para pixeles, donde se obtiene un vector normal por pixel (o en tu caso por vertice), lo que pasa es que si se hiciera como tu dices y en vez de tener 3 vertices para formar una cara tienes 2 (imagina que segun tu esquema desechas un vertice) obtendrias una linea, no un triangulo.

Por otro lado, tal y como dice BeRSeRKeR, el backface culling no es mas que examinar el valor del coseno del angulo que forman el vector de direccion de la camara y la direccion del vector normal de la cara que se examina. Me parece que no entendiste bien el concepto del backface culling...

No obstante, me parece que no tienes bien diseñado tu motor (o una parte de el), ya que si tienes problemas con el backface culling es que tu motor anda muy suelto en la pipeline. deberias mirarlo...

Normalmente el BackFace culling te quita entre un 30% y un 40% de los poligonos de la escena, y si lo combinas con el frustum adecuado, ganas un poco mas.

Como ya dije en otro mensaje (aunque no en este topic), el esquema ideal de procesamiento geometrico es:

INPUT > VSD > HSR > VS > OUTPUT

El backface culling, logicamente, esta en la fase HSR (Hidden Surface Removal)

Saludos
_________________
Julio Meca
ALPHA SOFTWARE

[ Este Mensaje fue editado por: Emotion el 2002-03-21 09:22 ]                                
Título: BackFace Culling
Publicado por: Drácula en 01 de Enero de 1970, 01:00:00 AM
                                A ver, me gustaría deciros que SE PERFECTAMENTE lo que es el BACK FACE CULLING y como expliqué un poco más arriba, LO ESTUDIE DETENIDAMENTE E IMPLEMENTE DIFERENTES OPCIONES. La verdad es que es difícil expresarse usando sólo texto y algunas veces se da pie a cierta confusión.
Y ahora Julio, si dices que ahorras muchísimo tiempo, me gustaría que me explicaras el algoritmo que utilizas para ahorrar tanto tiempo, porque yo HE PROBADO MUCHOS Y CON NINGUNO HE GANADO TIEMPO.
¿a ver si los que perdeis fps sois vosotros porque utilizais BFC?
¡Atención, sólo estoy compartiendo mis conocimientos con vosotros! No me gustaría que nadie se molestase. Estos mensajes los he puesto porque CREO que os equivocais, y como yo lo estudié mucho, me gujstaría ayudaros(o que me ayudeis vosotros diciendo DONDE me equivoqué yo!)
Pensad que mi motor es MUY MUY rápido, comparado con otros motores que existían en la scene de características similares. Así que se un poco de lo que hablo...

Y esto del Back Vertex Culling ya lo he explicado un poco más arriba! Por favor, que nadie siga comentando esto....                                
Título: BackFace Culling
Publicado por: Emotion en 01 de Enero de 1970, 01:00:00 AM
                                A ver, Dracula:

En primer lugar, no me he molestado. ni mucho menos :sonriendo:

Lo que pasa es que me cuesta entender como es que no ganas nada de velocidad con el BFC, pero tampoco se como lo estas implementando... quiero pensar que lo estas haciendo por hardware, pero si no es asi, no tiene lugar esta discusion. Por otra parte, el codigo que yo uso para el BFC es tan sencillo como escribir 2 lineas de codigo:

glCullFace(GL_BACK);
glEnable(GL_CULL_FACE);

El resto lo hace el hardware, ya que yo, para esos menesteres, ni me molesto en implementarlo en software... Seria muy lento y mi motor no tendra opcion de render por software.

Espero que con esto se disuelvan todos los humos... :sonriendo:

Saludos y, en caso de haberte ofendido, Disculpas
                               
Título: BackFace Culling
Publicado por: Drácula en 01 de Enero de 1970, 01:00:00 AM
                                ¡No me he molestado en absoluto! Pero muchas gracias por las disculpas, dicen mucho por tu parte ( ante todo seamos respetuosos unos con otros)

Bien, es decir, que por lo que me cuentas, lo único que haceis es BFC por hardware. Perfecto, esa es la conclusión a la que llegué. Hacerlo por software es contraproducente.
Y ahora que parece que la cosa se va aclarando..¿hay alguien que lo haga por software que crea que vale la pena?                                
Título: BackFace Culling
Publicado por: _Grey en 01 de Enero de 1970, 01:00:00 AM
                                Ahora se aclaran las cosas, si Dracula tienes razon, pudiendo hacer BFC por hardware, no hay por que hacerlo por soft, es mas , hacerlo por soft es mas lento que por hard.

Otra cosa es que por soft implementemos los octrees y demas algoritmos para ahorrar polis, pero es ya otro tema.

BFC por soft pudiendo usar hard? ni con una pistola apuntando a mi cabeza!

Saludos, y disculpas por mi post , creo que lo lie mas :lengua:.

Chao!.                                
Título: BackFace Culling
Publicado por: Emotion en 01 de Enero de 1970, 01:00:00 AM
                                De todas formas, Dracula, creo que podrias considerar (si tienes a bien hacerlo) otra alternativa, que es la siguiente:

Podrias procesar todo el tema poligonal por software (como tu quieres) y dejar el tema del BFC al hardware (ya que, si mi memoria no me falla, cualquier tarjeta ACELERADORA soporta el BFC por hardware).

Siempre es una manera de ahorrar codigo y ganar en velocidad, claro que si lo que quieres es hacerlo enteramente por software, pues en ese caso no puedo decir nada al respecto.

En fin, de cualquiera de las maneras, espero que lo consigas :sonriendo:

Saludos
                               
Título: BackFace Culling
Publicado por: ethernet en 01 de Enero de 1970, 01:00:00 AM
                                Cuando no tenia aceleradora creedme q el BFC si se notaba..xD
En un msg he leido algo sobre el pipeline. No tengo mucha idea de como trabaja (me refiero en una tj grafica no en un procesador aunque supongo q sera algo parecido)  y como se puede optimizar un programa para q se adapte al maximo al pipeline, no estaria mal q comentaseis algo.
Saludos                                
Título: BackFace Culling
Publicado por: Emotion en 01 de Enero de 1970, 01:00:00 AM
                                para ethernet:

Pues mira, la pipeline de una tarjeta, es como tu bien has dicho, parecida a la pipeline del micro. No es mas que una 'via' por la que circular los datos que vas a procesar, aunque la definicion de la pipeline es mas amplia.

Que como puedes optimizar su uso? pues depende de muchas cosas, del tipo de hardware que tengas, de lo que quieras hacer con ese hardware... Aqui resultaria imposible explicar de una sola pasada el concepto completo de la pipeline y sus criterios mas basicos de optimizacion, pero algo se puede comentar, lo que pasa es que hay mucho que decir en lo de la pipeline... basicamente puedes entenderla como te he dicho antes, es como una via por la que circulan datos para PROCESO.

Ahora, si quieres informacion mas especifica, pues debes formular la pregunta con datos mas especificos.

Un saludo
                               
Título: BackFace Culling
Publicado por: Loover en 03 de Julio de 2003, 02:40:17 AM
 ¡Qué bien! ¡Los nuevos foros tienen sistema de búsqueda! (lo mismo los antiguos tb, a lo mejor es que no me molesté en buscarla bien).

Bueno, pues mis dudas sobre backface culling han sido disipadas :) y encima he recordado los tiempos en que emotion estaba entre nosotros.

Un saludo!

Por cierto, ¿qué es de drácula y su motor? ¿cuál era la web?
Título: BackFace Culling
Publicado por: BeRSeRKeR en 03 de Julio de 2003, 03:59:02 AM
 Resulta que ahora su nick es Haddd y la web de su motor es http://webs.ono.com/usr033/dracular/ :)

Saludos.
Título: BackFace Culling
Publicado por: MaSteR en 03 de Julio de 2003, 01:43:47 PM
 Off Tipic:Emotion!! xDDDDDDD hace tiempo hablaron de ti, q si habias desaparecido O_o.Por aki por el foro te buscan :P.(Para saludarte y saber de ti claro)
Título: BackFace Culling
Publicado por: ethernet en 03 de Julio de 2003, 01:52:18 PM
Obviamente es un topic antiguo, debe ser un problema de la migracion ;)
Título: BackFace Culling
Publicado por: Loover en 03 de Julio de 2003, 03:33:49 PM
 No es ningún problema de la migración, como digo más arriba, busqué "backface culling" en el motor de búsqueda de los foros.
Y por cierto, el motor de Haddd sigue sin funcionarme en su nueva versión y con directx 9 :(

Un saludo
Título: BackFace Culling
Publicado por: Mars Attacks en 03 de Julio de 2003, 03:47:50 PM
 Loover, el foro antiguo también tenía sistema de búsqueda, más o menos en el mismo lugar que éste XD
Será que como estos son nuevos los estamos investigando más que los otros  ;)
¿Y esto es un guiño? ¡Si parece más bien una paraplejia!
Título: BackFace Culling
Publicado por: Loover en 03 de Julio de 2003, 04:55:07 PM
 Jajajajaja :D
Si es que en realidad no me molesté en buscarlo, xD
Título: BackFace Culling
Publicado por: ethernet en 04 de Julio de 2003, 07:12:53 AM
 quiero ser elite como mars :!
Título: BackFace Culling
Publicado por: Mars Attacks en 04 de Julio de 2003, 09:24:03 AM
 Yo preferiría que quitaran esas "categorías". Yo élite... ya, claro. De qué, ¿de los payasos?  :angry:
No es una clasificación nada justa. ¡A la hoguera con ella!
Título: BackFace Culling
Publicado por: ethernet en 04 de Julio de 2003, 09:25:10 AM
 mola, soy del grupo coders XD ademas soy el señor del codigo de la semana 0:)
Título: BackFace Culling
Publicado por: Loover en 04 de Julio de 2003, 01:50:06 PM
 ¡Pero que le pongan tildes! Que "fanatico" suena como "perrico". Y no como fanático.
Y "elite" más de los mismo.

:P