Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: fiero en 23 de Noviembre de 2002, 03:25:31 PM

Título: Redondeo de vértices al pixel más cercano
Publicado por: fiero en 23 de Noviembre de 2002, 03:25:31 PM
                                hola, a ver si me explico
¿habeis visto como en los juegos de playstation one los triángulos fructuan un pixel arriba o abajo al mover la camara? Es decir, si la posición Y del vértice de un triángulo, al pasarlo de 3D al sistema de pantalla 2D, dá y=10.9, el vértice se dibuja en la fila 10 de la pantalla. Si al mover la cámara, el mismo vértice al pasarlo a coordenadas de pantalla dá y=11.1, el vértice se dibuja en el pixel 11 de la pantalla.

Un ligero movimiento de cámara, hace que el triángulo se renderice 1 pixel arriba o abajo. Esto aplicado a toda la escena hace que los triangulos bailen, produciendose un efecto muy feo.

He pensado en "redondear" los valores de los vértices 2D antes de renderizar el triángulo, cambiando la textura de cada vértice por la que tendria si el vértice estuviera la posición exacta del pixel.

¿Cómo se soluciona esto en los motores software? ¿Cómo se llama a este efecto en inglés? (como no sé nombrar esta cosa, tampoco he leido nada del tema)

saludos                                
Título: Redondeo de vértices al pixel más cercano
Publicado por: ALBSIM en 25 de Noviembre de 2002, 06:32:19 PM
                                Creo que te refieres al problema del "aliasing". Para solucionarlo, busca en la red por "antialiasing"                                
Título: Redondeo de vértices al pixel más cercano
Publicado por: fiero en 26 de Noviembre de 2002, 10:39:44 AM
                                Gracias por contestar.
Bueno, no sé si se podria meter este problema dentro del aliasing. La verdad es que tengo implementados 2 tipos de antialiasing, uno renderizando 2x2 pisels por pixel y otro 4x4 pixeles. Si utilizo el antialiasing el problema disminuye (o se hace inapreciable), ya que en vez de vibrar los triangulos 1 pixel arriba o abajo, vibran 1/4 de pixel (en el caso de antialiasing 4x4) y eso no se nota. Lo que pasa es que el antialiasing por soft es muy costoso y no se puede usar siempre.

Me he fijado que en las aceleradoras 3D no se aprecian estos movimientos de triángulos aunque tengan desactivado el efecto antialiasing , así que harán otra cosa.

De todas formas me has dado una idea, voy a buscar por ahí "antialiasing de vértices" o algo así, a ver si existe...

un saludo                                
Título: Redondeo de vértices al pixel más cercano
Publicado por: Ithaqua en 26 de Noviembre de 2002, 11:03:29 PM
                                En las aceleradoras sí que se da, solo que cuando se trabaja con modos de alta resolución la cosa se nota bastante menos.                                
Título: Redondeo de vértices al pixel más cercano
Publicado por: mac^threepixels en 10 de Diciembre de 2002, 03:55:57 AM
                                Se llama subpixel (o subtexel para las texturas) y solo tienes que hacer lo que tu mismo decias, desplazar las coordenadas de textura desde el vertice hasta el punto de sampleo

Por ej

|
|
|  
|*
|__

Donde * es a donde 'redondeas' el vertice, tendras que interpolar las coordenadas de textura de los 3 vertices para saber cuanto valen en *.

Para las posiciones igual, si usas un DDA para rasterizar el triangulo, tendras que anyadirle al DDA los offsets que usas para redondear                                
Título: Redondeo de vértices al pixel más cercano
Publicado por: fiero en 10 de Diciembre de 2002, 01:01:29 PM
                                ahá, gracias por las respuestas. Voy a intentar hacer el redondeo, a ver si no me consume demasiada cpu...

un saludo