Generacion de una imagen 3D
-
Ojalá hubiese mas posts como este en el foro, ya apenas respondo (no se si os habreis dado cuenta) pq las preguntas repetidas mas de cuatro veces me sacan de quicio… enhorabuena por el post Sergiman
-
Antes de la serie 6 de nVidia y las X1000 de ATI, el color que tenia un determinado píxel se representaba por tres componentes que representaban los colores Rojo, Verde (G) y Azul (B); cada uno de ellos era un entero de 8 bits de precision. Los ingenieros se dieron cuenta que esta no era la manera mas idonea de representar el color pues no se corresponde a la interpretacion que hace el ojo humano. Empezaron a utilizar un formato que provenia de la industria del cine, el HDR. Con este nuevo formato se utilizan numeros de punto flotante de 16 bits. Conseguimos tener mas precision y representar de manera mas fidedigna y real el color, ademas de responder como hace el ojo humano.
Date cuenta que el ojo humano tiende a oscurecer las imagenes muy claras (se cierra la pupila para que entre menos luz), y a aclarar las imagenes muy oscuras (se abre la pupila para permitir meyor paso luz). Esto se puede representar mucho mejor con numeros en punto plotante que con enteros, los primeros tienen un rango mucho mas grande y podemos jugar con el exponente para tener mas precision.Un par de anotaciones. El HDR no depende del formato que se utiliza. Puedes tener HDR con enteros (p.ej. con el formato 10-10-10-2, o el 16-16-16-16 que utiliza 64 bits para cada pixel) o con punto flotante como el HDR FP16 (un ejemplo es el OpenEXR) El HDR simplemente es extender el rango desde el LDR (8-8-8-8 que son los 32 bits de color normales) para permitir mayores transiciones de color.
El efecto de emulación del comportamiento del ojo humano no es obligatorio para el HDR, pero es uno de los efectos que mejor quedan al aplicar una extensión del rango.
-
HDR con numeros enteros????? No sabia de su existencia.
La mejora que aporta el HDR es pasar de los 32 bits que comentas a 48 bits, pero en punto flotante para tener mayor rango de representacion y realismo.Gracias Forenaits, haber si conseguimos entre todos hablar de cosas un poco mas interesantes.
-
Se está llamando HDR a cualquier aumento de el número posible de colores desde los famosos 16 millones. El formato 10-10-10-2 utiliza seis bits del canal alfa que los reparte entre los otros tres canales para aumentar el rango a 1073 millones, el 16-16-16-16 (serían 64 bits de color) aumenta a 281 billones… La verdad es que un formato en coma flotante siempre es mejor que utilizar enteros, pero tiene una carga computacional muy superior trabajar en flotantes que trabajar en enteros, además de que el FP16 utiliza 8 bytes para cada pixel. Este formato requiere una componente fp16 por cada canal, por lo que tendríamos el doble de consumo de ancho de banda que en un formato RGB 24 (32) clásico, con la consiguiente reducción de rendimiento por este motivo. Un compromiso entre calidad y rendimiento sería el formato que usa Xenos, el chip gráfico de la XBox360, que es un fp 10-10-10-2. Lo malo es que ningún chip para pc's lo implementa para el render target, todavía.
-
El HDR que yo menciono es el proviniente de OpenEXR. Se utilizan 48 bits por pixel frente a otros formatos (por ejemplo LBNL utiliza 32). Tambien he de decir que no es que sea el mejor formato ya que por ejemplo LBNL tiene un rango de entre 10 elevado a -38 y 10 elevado a 38; muy superior al HDR de OpenEXR.
Por cierto, ahora que lo mencionas ¿cuantos bits se utilizan en HDR para el canal Alfa???
Con respecto a la carga computacional, es indudable que operar con una representacion de punto flotante es mucho mas compleja; pero la arquitectura de la GPU tiene muchas cosas buenas. Una de ellas es un bus de 256 bits frente a los 64 de la CPU. Ademas no creo que la potencia sea un problema para la GPU, com mas de 100 GFLOPS puede permitirse trabajar con aritmnetica en punto flotante.
-
Depende, hay formatos que utilizan solo dos, como el fp 10-10-10-2 de xenos, hay formatos que utilizan 16, como el OpenEXR… Hay mucha gente que asocia HDR con OpenEXR, ya que este formato es el que utilizan las gamas 6 y 7 de nVidia para su HDR fp16, pero es únicamente una forma de hacerlo. En verdad OpenEXR tiene como opciones 64 bits por pixel y 48 bits por pixel para fp16, y 128 bits por pixel o 96 bits por pixel para fp32 o int32.
Hay una cosa que está clara, si tiene mayor rango en el exponente, estás utilizando bits que deberían ir a la mantisa, por lo que la resolución será mucho menor. No se yo que solución es mejor, la verdad. Yo creo que siempre es mejor tener menor rango exponencial, pero tener mucha mayor resolución.
Con respecto a la carga computacional, es indudable que operar con una representacion de punto flotante es mucho mas compleja; pero la arquitectura de la GPU tiene muchas cosas buenas. Una de ellas es un bus de 256 bits frente a los 64 de la CPU. Ademas no creo que la potencia sea un problema para la GPU, com mas de 100 GFLOPS puede permitirse trabajar con aritmnetica en punto flotante.
Perdón, saqué algo a la conversación que no es correcto, ya que internamente las tarjetas ya trabajan con una precisión FP32 (nVidia FX, 6 y 7, y ATI X1) o FP24 (ATI pre X1), lo que varía es la precisión del render target. Es más una cuestión de ancho de banda que otra cosa.
-
Me acabo de acordar de una cosa que tal vez os parezca interesante:
Un prefesor de mi facultad hizo unas pruebas de rendimiento para comparar la arquitectura de una CPU actual frente a la arquitectura de una GPU. Ejecuto un codigo que definia una malla irregular de nodos y aristas de conectividad media (no me pregunteis que es poruqe no lo se) definida por un codigo de Euler. Los datos que obtuvo es que el tiempo que empleo un PIV a 3.2 era 32.447 milisegundos y una 6800 tardo 12.128 milisegundos.
Esto no quiere decir que la GPU sea mejor que la CPU, sino que en ciertas condiciones tiene mucha mayor potenca. Con este caso de la malla de Euler pretendia anular la mejor baza que tiene las CPU actuales: la cache. No olvidemos que la GPU no tiene cache (tiene, pero muy muy pequeña); pero tiene un bus 8 veces mas grande con lo que se consigue no solo suplir la falta de cache sino que obtiene mayor rendimiento. -
Quizás te interesen estos hilos de Beyond3D sobre GPGPUs (general purpose GPUs, o utilizar las GPUs para más cosas a parte de para gráficos como para folding at home)
-
Ejecuto un codigo que definia una malla irregular de nodos y aristas de conectividad media (no me pregunteis que es poruqe no lo se) definida por un codigo de Euler.
Creo que se refiere a configuraciones intermedias entre estrellas y anillos, con cierta redundancia para evitar aislamientos en el caso de que se caiga una línea. Es un tipo de configuración muy típica en telecomunicaciones, no es tan cara como la estrella y es mucho más fiable que los árboles puros o los anillos.
-
Lo de la malla de Euler no se que es, pero hizo esto porque el algoritmo que definio hacia multiples saltos que anulaban por completo la cache del procesador (para luchar en igualdad de condiciones ).
Los enlaces que me has dado los leere mas adelante, ahora estoy un poco liado y mi nivel de ingles no es que sea como para tirar cohetes. De todas formas gracias.
-
Hacia tiempo que no disfrutaba tanto leyendo una rama, gracias a los dos Sois unas máquinas
-
Tengo entendido que el número de colores que puede mostrar un TFT es bastante limitado comparado con un CRT y a pesar de ello se están imponiendo. Si esto es así ¿porque siguen las tarjetas gastando tantos recursos en aumentar el número de colores, o la precisión en estos?
O dicho de otra forma ¿se aprecian estas mejoras en la precisión de los colores en un TFT de gama media?
Saludos. -
Actualmente no hay dispositivos que sean capaces de aprobechar el nuevo formato HDR; asi que en cierto modo toda la mejora que se obtiene no sirve de nada. Lo que pasa que dentro de muy poco empezaran a salir dispositivos que si aprobecharan esta nueva tecnologia.
Es algo parecido a lo que ocurrio con el PCI-E, inicialmente era muy muy dificil encontrar targetas para dicho bus hasta que con el tiempo los fabricantes llenaron el mercado con targetas PCI-E.
Los TFT se han impuesto a los CRT simplemete porque han bajado de precio, la calidad es muy similar y ocupan muy poco espacio. -
Mmmm es un tema espinoso. Es cierto que hay TFTs que solo muestran unos doscientos mil colores (mi benq FP767-12 es uno de ellos) y los normales muestran 16 millones, pero también es cierto que los efectos que permite el HDR si se notan. El aumento del contraste si se puede notar, aunque no sea con los colores que calcula realmente la gráfica sino con los que el monitor interpreta que debe mostrar por aproximación.
-
Estaba leyendo sobre las nuevas definiciones de pixel pipeline y como trabajan las nuevas GPU y me preguntaba si esto de separar las unidades de mapin de texturas (TMU) o las operaciones de trama (ROP) afecta solo a las operaciones sobre píxeles o altera el proceso entero de generación de la imagen.
¿Podremos seguir hablando de gráficas de x pipelines, o cual será el elemento que determine la potencia de la gráfica y nos permita estimar su potencial con facilidad?
Saludos. -
Ojalá hubiese mas posts como este en el foro, ya apenas respondo (no se si os habreis dado cuenta) pq las preguntas repetidas mas de cuatro veces me sacan de quicio… enhorabuena por el post Sergiman
Totalmente en lo cierto, da gusto un post donde todos aprendemos, joe. Y es lo que hace falta, francamente. Eso si, yo me quede algo perdido con la complejidad del tema, jeje, pero…me releere de nuevo el hilo, que por tieno no sera.
Saludos!!
-
Si queréis profundizar un poco más en el tema, en GPUMANIA hay un artículo bastante bueno bajo mi punto de vista sobre este tema.
-
Gulp lo que comentas supongo que afecta a las etapas de pixeles pero tiene su repercusion en la imagen final.
Hoy en dia se necesita mucha mas multiplicidad en las etapas de pixeles que en las de vertices y por eso vemos que las unidades dedicadas a estos menesteres crecen en mucha mayor medida que las dedicadas a vertices; de echo una imagen definida con unos cientos de vertices puede dar lugar a otra con millones de pixeles.Por cierto Kynes, muy buen enlace :sisi:
-
Sergiman está muy bien :sisi: , pero me temo que aun simplificando puede haber mucha gente a la que no le quede claro… yo lo que veo es que no se sabe muy bien de dónde vienen las etapas, así que intentaré explicarlo a ver si ayudo a que se entienda mejor
Para renderizar una imagen en 3D, utilizamos vértices para dibujar primitivas de dibujo con ciertas propiedades, para que le "sea cómodo" a nuestra tarjeta gráfica. Esto de "primitivas" son los típicos triángulos (también pueden ser puntos, líneas, polígonos con más caras no cóncavos, etc.) que conforman las "mallas poligonales" de los modelos de los juegos (los mapas, los personajes, las armas, ...). Aquí un link un poco raro pero en el que se ve una malla poligonal:
http://www.iberisa.com/soporte/cosmosm/accustress.htm
Los vértices serían los 3 puntos que conforman un triángulo (u otro polígon, también podría ser un cuadrado). Así que los personajes son miles y miles de triángulos! Para dibujar estos triangulos, le decimos a nuestra tarjeta gráfica lo siguiente:
1. Ey! tienes que dibujar un triángulo.
2. Los 3 puntos del triángulo son: "coordenadas de los vertices".Y cómo le decimos qué textura queremos que tenga? Pues en medio de estos pasos. Algo así como:
1.a. Este polígono tiene esta textura: "textura_de_pared".
Y nuestra amada tarjeta gráfica le pegará la textura al triángulo. Luego existe la multitextura, que es el hecho de poder pegarle varias texturas a un triangulo y mezclarlas entre ellas de distintas maneras.
En un juego, básicamente se hacen los puntos 1,1.a y 2 un montón de veces (esto sólo en la parte gráfica!).
Finalmente, estos pasos se descomponen como bien ha explicado Sergiman al llegar a la tarjeta gráfica.- “Operaciones sobre píxeles”. Esta etapa realizará multitud de funciones sobre los píxeles, normalmente cuanto mayor sea la versión del verter shader mayor será la funcionalidad y por tanto podremos hacer más cosas.
Aquí no será el "pixel shader"?
Lo último es que para entenderlo mejor yo usé este tutorial:http://www.lighthouse3d.com/opengl/glsl/index.php?pipeline
Me gusta mucho y ha sintentizado muy bien el pipeline de las tarjetas graficas ;D
No se si al final he aclarado alguna duda que pudiera haber :S pero si teneis alguna disparad
P.D.: lol que antigua que es esta rama, me sabe mal reflotarla