Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Dudas sobre portal rendering

Iniciado por Javier, 01 de Enero de 1970, 01:00:00 AM

« anterior - próximo »

Javier

                                Hola a todos:

Me gustaría iniciarme en el tema de portal render, pero tengo algunas dudas que seguramente alguno de los muchos expertos del foro me podría resolver:

Sé que la técnica de portales se basa en subdividir el "mundo" en sectores, conectados entre sí mediante unos polígonos especiales llamados "portales", y que esta tecnología es ideal para renderizar interiores.

Mi duda es, si por ejemplo quiero renderizar el interior de una casa, un sector no tiene por qué equivaler a una habitación de la casa, ¿verdad? Y un portal no tiene por qué equivaler a una puerta o ventana, ¿cierto?

En otras palabras, una única habitación de la casa ¿puede estar dividida en varios sectores unidos por portales? Si es así, ¿no sería redundante poner más de un portal, si de todas formas toda o casi toda la habitación es visible?

Otra duda que tengo es, aplicados al portal rendering, ¿en qué casos se usan octrees y BSP?

Gracias por adelantado,

Javier                                

BeRSeRKeR

                                Hola Javier.

Ante todo decir que no he implementado un engine basado en portal rendering aunque espero en no mucho tiempo hacerlo :sonriendo:

Si he entendido todos los documentos que he leido por ahí la cosa está como sigue.

Un sector siempre equivale a una habitación (un habitáculo mejor dicho). Ahora bien si nuestros sectores deben ser convexos entonces puede ocurrir que nuestra habitación no lo sea por lo que deberemos crear más portales para que al final dicha habitación quede dividida en sectores convexos. En cambio si permitimos sectores cóncavos pues esto no es necesario.

En lo referente a los portales. No necesariamente deben ser puertas, ventanas, grietas...un portal es todo polígono (preferiblemente convexo :sonriendo:) que comunica ya sea geométricamente o no dos sectores. Esto es, una puerta sería un portal que comunica fisicamente dos sectores pero un monitor en el cual se está viendo la imagen que capta una cámara de seguridad sería un portal que comunica dos sectores que no están pegados el uno con el otro, esto es, hay una discontinuidad geométrica entre ellos. Otro caso de portal especial es el espejo, el cual comunica un sector con él mismo (invirtiendo la imagen claro). Como ves los portales son algo que ofrece grandes posibilidades ya que puedes hacer que cada uno de ellos contenga una matriz de transformación que trastoque el sector al que apunta.

Por otro lado, crear un octree o un BSP por sector podría agilizar el proceso de detección de colisiones y el descarte de polígonos...

Un saludo                                
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

BeRSeRKeR

                                Una cosa mas sobre los portales. Si te encuentras con que tienes que crear un portal para por ejemplo una grieta, esa grieta puede que tenga una figura cóncava o que tenga muchos lados así que a la hora de crear el portal lo haces de forma que sea un rectángulo (por ejemplo) que cubra toda la grieta. O si por ejemplo tienes dos grietas o dos ventanas muy juntas que comunican al mismo sector pues creas un portal que cubra las dos. Esto es así porque cada vez que encuentras un portal, tienes que crear un frustum con tantos planos como lados tenga el portal para ver qué objetos del sector al que da paso son visibles desde el punto de vista de la cámara (y bueno también por si decides hacer clipping de los polígonos de dicho sector). Evidentemente esto te ahorrará bastantes cálculos ya que cuantos menos portales mejor (de ahí que utilizar un BSP para crear automáticamente los portales es una mala cosa ya que genera gran cantidad de ellos por lo que lo mejor, hasta que no se encuentre un algoritmo mejor, es poner los portales manualmente).

Un saludo

[ Este Mensaje fue editado por: BeRSeRKeR el 2002-03-18 19:34 ]                                
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Javier

                                Ummmm ajá, creo que te entiendo... lo seguiré rumiando, gracias por responder!!                                

KAKSTAR

                                Hola, yo he implementado una división en sectores y portales basandome en arboles BSP, y la verdad funciona bastante bien.

Un sector no tiene por que corresponder a una habitación, como bien a dicho Berserker (habitaciones concavas) en mi caso por ejemplo, al subdividir de una manera automàtica la escena, resulta que tengo sectores que no corresponden a habitaciones, o una habitación dividida en varios sectores.

Sobre el tema de si es reduntante tener una habitación dividia en varios sectores con sus respectivos portales, diria que no ja que dado la posición de la camara, se renderiza los poligonos del sector actual, si un polígono és un portal se renderiza el sector destino del portal... como mucho diria que és un poco menos eficiente ja que se tiene que crear un nuevo Frustum por cada portal para renderizar el sector destino del portal.

Sobre la pregunta de Javier

-Otra duda que tengo es, aplicados al portal
-rendering, ¿en qué casos se usan octrees y
-BSP?

Se que los BSP se usan para encontrar una ordenación de los polígons del sector de tal manera que si recorremos estos (si no me equivoco en preorden - hoja izquierda, hoja derecha, raiz) obtenemos primero los polígonos más alejados de la camara y por último los de más cerca, para poder renderizarlos correctamente.

Por tanto en el rendering en sectores se usa los BSP para la ordrenación de los polígonos de dentro del sector. Los polígonos de los perímetros de los sectores, si el interior de los sectores está vacio no necesitan que se ordenen ya que seguro que no hay solapamiento.

diria que me he explicado muy mal... :sonriendo:
si algo no te ha quedado claro, preguntame y intentaré responderte. Supongo que entre Berseker y Yo te aclararemos un poco las cosas...

hasta lugo

                               
akstar

Existen 10 tipos de personas, las que entienden binario y las que no.

Javier

                                Dices que el BSP se usa para determinar el orden de pintado de los polígonos, ¿eso no es lo mismo que el z-buffer?
¿Es mejor hacer el z-buffer por hardware o por software?

Gracias por vuestra ayuda.
                               

fiero

                                Por los pocos conocimientos de 3D que tengo yo diria que si programas con una API como DirectX el ZBuffer es por hardware y solo por hardware, ya que la GPU se encarga de realizar los cálculos de ZBuffer al renderizar los polígonos. Aunque seguramente sepan más los expertos....
Pues junto a la pregunta de Javier añado una duda mia. Estoy haciendo un motor software y para pasar los valores Z, de cada vértice, a valores de 16 bits, multiplico el float por una constante, mas o menos a ojo, y si el resultado es mayor de 16 bits pues lo dejo en 7FFF. Creo que no es una forma muy "pofesional" de hacerlo, hay una forma mejor?

un saludo                                
www.videopanoramas.com Videopanoramas 3D player

KAKSTAR

                                Respecto a la pregunta de Javier:

-Dices que el BSP se usa para determinar el  
-orden de pintado de los polígonos, ¿eso no
-es lo mismo que el z-buffer?
-¿Es mejor hacer el z-buffer por hardware o
-por software?

ÉS otra técnica para determinar al final en que orden se tiene que pintar los polígonos para que el último en pintar sea el más pròximo a la camera. O sea lo mismo que el zbuffer, pero en lugar de trabajar por pixel se trabaja por polígonos....

hasta lugo



                               
akstar

Existen 10 tipos de personas, las que entienden binario y las que no.

Emotion

                                Para fiero:

Lo que haces es un metodo correcto. Se denomina "Hash Table", ya que organizas tus valores Z con un 'señuelo' o chivatillo.

Ese metodo es el que usa la PSX para ordenar los poligonos (ya que la PSX no tiene Z-Buffer ni unidad de coma flotante).

Hay metodos mejores, aunque el tuyo esta bien. Ademas, si tras hacer ese ordenamiento mandas los poligonos a la aceleradora, la ganancia en velocidad de proceso es bastante grande.

Saludos.

Para Javier:

El BSP es como dice KAKSTAR, lo que pasa es que el BSP salio a la luz cuando las aceleradoras aun no existian o, simplemente, no tenian Z-Buffer por hardware, ya que el BSP, basicamente es una tecnica de Z-Buffering, aunque despues se le han sacado muchas mas aplicacion, pero esa es la mas basica. Si lo que quieres es ordenar tus poligonos, la tecnica de la Hash Table es mas eficiente, aunque si quieres algo en la cresta de la ola, prueba con los Octrees, ya que si la gente de Silicon Graphics los utilizan para casi todo, por algo sera :sonriendo:

No obstante, hay mas metodos. Solo has de encontrar el documento apropiado.

Saludos.
                               
G3: Get the Power!

Drácula

                                Yo no he implementado todavía nada con portales, sin embargo los he estudiado mucho para poder implementar algo que sea realmente potente.
Aquí viene la explicación:
Usas portales sólo para ganar velocidad, eso que te quede muy claro. Por tanto el nº de portales que decidas colocar ya no es tan importante. Hoy en día un sector tiene muchos polígonos, por lo que ahí entra la necesidad de "subdividir" el propio sector. Esto puede hacerse con portales, con lo que tienes que un portal te divide dos sectores y sectores dentro de sectores(es un poco lioso!) Sin embargo, yo te aconsejo que le des facilidad al grafista y le pidas que te haga el menor número de portales posible, y si tienes sectores con muchos polígonos utilices un octree.                                
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías

Gunder

                                Buenas,

yo aportaria la idea de q un portal es simplemente el indicador de si una parte del mapa se debe de pintar o no. Me explico, si veo algo del portal, esto me indica q estoy viendo a traves de el y por consiguiente toda la parte del mapa asociada a este. Si ademas el portal me vale para reducir mi area de clipping y mi area de render pues mucho mejor.

Ale,
Gunder.                                
riticar, critica hasta el mas tonto.

turrican

                                Hola.

Me interesaria sacar un tema que hay que preguntarse antes de iniciar el desarrollo de un motor basado en portales. Que tipo de portales usar: Convexos o concavos?

Para aclarar lo que entiendo por "convexo" (no se si me equivoco) es cuando todos los poligonos de la estancia estan dentro de cualquiera de los planos que definen estos poligonos, y concavo cuando no tiene porque ocurrir esto (espero haberme explicado algo....).

El caso es que un sistema de portales convexos es poco mas o menos un bsp, y un sistema de portales concavo me parece algo un poco inutil por los dificil que es todo el tema de colisiones, ordenacion, pvs, etc...

Alguien por aqui que haya implementado algo de esto y quiera comentarlo?

Salu2                                






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.