z-buffer

Description

descripción, demás buffer, desventajas, uso
mariangelesp14
Note by mariangelesp14, updated more than 1 year ago
mariangelesp14
Created by mariangelesp14 about 11 years ago
76
0

Resource summary

Page 1

Z-buffer: Hay métodos geométricos (vector) que resuelven el problema de oclusión visual, calculan intersecciones y dividen los objetos y luego renderizan en forma ordenada, pero es muy lento hacer tantos cálculos por eso se suele utilizar un algoritmo de z-buffer o depth-buffer cuando se dispone de suficiente memoria y hardware especializado para la rasterización. El algoritmo consiste en “pintar”el píxel si la distancia del fragmento al ojo(z) es menor que la almacenada en el z-buffer, en tal caso se actualiza además ese buffer con el valor de z recién calculado. El color-buffer es la porción de memoria que almacena los WxH píxeles de cada componente de color (en gral, un byte por cada rgba, seguidos). Ese es el buffer que se pinta o actualiza cuando un fragmento es visible. El depth búferes mantiene en paralelo y consiste en WxH valores de punto flotante, normalmente de 24 o 32 bits.La porción de espacio visible está limitada mediante un plano cercano al ojo znear y uno más alejado zfar del ojo a los planos sirven para cuantizar el rango de profundidades, ya que no hay precisión infinita para almacenar los valores de z El algoritmo:  inicializa el z-buffer con el z máximo(el del zfar). Por cada primitiva del espacio visual: si z,depth(x,y)  {Actualiza el color-buffer: Actualiza el z-buffer} El algoritmo almacena el valor de z entre el near y far convertido en otro que esté entre o y 1, normalmente con precisión de 2-24 Este algoritmo es el que utilizan las placas gráficas actuales y opengl, porque es muy rápido, eficiente y general, no tiene que calcular ninguna intersección, no requiere ningún ordenamiento de los objetos ni subdivisión del espacio porque pasteriza todas las primitivas en cualquier orden. Pero tiene sus desventajas: 1) No puede manejar transparencias múltiples, si el objeto es semitransparente debe combinarse su color con el color actual del píxel. Pero si aparece un tercer objeto intermedio y también semitransparente, ya no se puede calcular bien el color resultante. Cuando hay objetos con transparencias, el resultado depende del orden de la pasterización. Para solucionar esto se puede renderizar primero los objetos opacos y luego los semi-transparentes, pero ordenados desde los más lejanos a los más cercanos al ojo. 2) Precisión con 24 bits, los valores alojados, que son números reales pertenecen [0,1] se cuantizan zalojado=int(2 a la 24 -1)* zcalculado)/(2ala24-1) Debido a esto los planos casi coincidentes o coincidentes suelen resultar defectuosos. Por esto hay que ajustar precisión con los planos z-near y z-far, igual no se soluciona siempre, este defecto se llama z-figthing(pelea de z) 3) No es posible aplicar el antialiasing, con el z-buffer se hace con una fuente, siempre que hay distintos bordes se va pintando con un promedio ponderado de las fuentes. 4) Hay que rasterizar muchas primitivas, realizando muchos accesos no secuenciales a la memoria. Para solucionar esto se realizan técnicas de ordenamiento y/o recorte y descarte masivo(clipping y culling). Las más utilizada es el FACE-culling, dado un objeto cerrado, se descartan las caras cuya normal no apunta al ojo. 3D:derivadas parciales, permite calcular z en cada paso de rasterización y así rellenar el depth-buffer si rasterizamos un segmento, avanzamos de a un píxel en x o y, la coordenada z del píxel actual es igual que la de la anterior más una constante: la derivada parcial de z respecto de x o y. En el loop de rasterización sólo se suma un factor constante. En polígonos u otras figuras planas, que pasterizamos con scan-lines, el proceso es igual: siempre se suma la derivada parcial de z respecto de x, que es constante para el plano.   Frame Buffer: los buffers de opengl forman el frame buffer, los estándares son: Color-buffer: donde se arma la imagen que vemos(front-left,front-right,back-left,black-right y algunos otros auxiliary color buffers).Hay más de un buffer de color Front y back: para renderizar con la técnica double buffering, se renderiza en background mientras se visualiza el front, una vez que la imagen está completa se intercambian los roles de ambos buffer(swap buffers) de esa forma se evita el parpadeo(flickering) que suele aparecer en animaciones con un solo buffer. Left y right:son utilizados para estereoscopía, en cada uno se genera la imagen para cada ojo. El resto de los buffers de color(aux) se utilizan como layers o capas o también se pueden utilizar para almacenamiento temporario de imágenes generadas. Depth-buffer: sirve para oclusiones visuales, como se explicó anteriormente. Stencil-buffer: enmascara la zona del dibujo. Se utiliza para realizar reflejos (simples) y sombras(complicado). Acum.-buffer: acumula datos de color, distintas manos de pintura(borroneado  por movimiento motion blur dando la impresión de velocidad , antialiasing o simular profundidad o para hacer sombras blandas sofá shadows) Este buffer no puede  manipularse píxel a píxel, se le pasa(varias veces) un buffer de color entero y el resultado de las operaciones se transfiere entero al buffer de color. Este buffer suele tener más bits disponibles que el de color, por lo tanto las operaciones de acumulación se pueden hacer con más precisión y se redondean al transferir. La presencia o no de los distintos buffers y la cantidad de bits disponibles dependen del hardware en cuestión. Se solicitan el inicializar y luego se consulta (glGet) cuantos bits hay disponibles. Los datos pueden manipularse logrando una mirada de efectos muy útiles, se trabaja directamente con los píxeles (o fragmentos) en modo raster. Operaciones sobre fragmentos: después de renderizar opengl puede realizar varias operaciones de manipulación de los fragmentos de actualizar un píxel. Pueden dividirse en dos tipos: test y alteración. Por una cuestión de eficiencia los tests se hacen primero. Ya vimos el test del z-buffer el píxel se pinta si pasa el test de z. los tests son; Ownership: verifica si el píxel está tapado por otra ventana, si descarta o no depende de la placa, so y versión opengl. Después de un largo proceso en batch, donde el procesador trabaja mucho y desatendido por el usuario, cuando el trabajo termina, el programa lee los píxeles del color buffer y graba una imagen. En tal caso hay  que leer sobre este test pues puede que ni dibuje, ni trabaje, ni lea bien, los píxeles que no son visibles por estar tapados por otro programa. Scissor:se define un rectángulo dentro del cual se dibuja y por fuera no. Se usa para renderizar por secciones. Alpha y stencil: comparan el valor del fragmento con un valor de referencia, que se define con el test. Alpha se utiliza con texturas efectos de difuminado o tienen visibilidad, para transparencias alpha igual a 1 o menor a 1. Depth del fragmento:se compara con el valor almacenado en el depth- buffer. Todos utilizan el mismo conjunto de comparadores entre valores(GL_ALWAYS,GL_NEVER,GL_EQUAL,GL_NOTEQUAL,GL_LESS,GL_LEQUAL,GL_GREATER,GL_GEQUAL) Defaults para alpha(GL_ALWAYS) pasa siempre, depth(GL_LESS), stencil no tiene default

Nueva Página

Show full summary Hide full summary

Similar

El Agua
Alin Miramontes
Soluciones Buffer
Kevin Andres Zapater
2do examen parcial Computacion Gráfica
Xentinel Romero Pérez
Flip-flops y buffers
Johan Sebastian Macias Zapata
El Agua
Fgyh Rhftyh
ELEMENTOS DE UN SISTEMA DE VISIÓN ARTIFICIAL
Alicia Camilletti