PROGRAMACIÓN EN 3D LA GPU PRINCIPIOS BÁSICOS PARA NO PROGRAMADORES, NI INGENIEROS

–ACERCA DE LA GPU-CPU,  LOS ALGORITMOS UN RELATO SIN CÓDIGO

Bienvenidos a esta entrada de introducción de temas de tecnología al publico general. Por favor  consideren que esta es una  entrada  para los no programadores ni ingenieros, ni mucho menos matemáticos. Estaré seguro que algunas personas que pretenden ingresar al mundillo podrían encontrar una introducción un tanto interesante, mientras que los expertos y profesionales del tema no encontraran mayor profundidad. Pero, sin importar su nivel de conocimiento les invito a enviar sus comentarios o correcciones,   siempre serán bien recibidas.

3d para todos sin programacion

Una mano animada por computadora de 1972, por Ed Catmull y Fred Parke  Universidad de Utah, USA. Funadores de PIXART.

Advirtiendo que si bien ya escrito sobre el tema, no tendré mayor reparo en repetir ideas de entradas previas si es necesario con el fin de construir una entrada solida.

Los curiosos no encontraran un conjunto de  “Tips” para comprar lo ultimo en GPU  y CPU, pero tal vez podrían llegar a entender como llegamos a esta locura.

MAQUINA DE COMPUTO Y EL PROBLEMA ALGORÍTMICO – DESCAFEINADO…

Durante muchos siglos siempre como humanos hemos prestado un desbordado interés de ser creadores de  artefactos mecánicos automáticos, en especial una afortunada obsesión   para construir una maquina que nos permitiera resolver cualquier tipo de problema. La opción clara durante estos largos milenios fue construir esta  maquina mediante engranajes, correas y piñones, el ejemplo mas notable fue la  “maquina analítica” en el siglo XIX,  varios siglos atrás ideada por el Sr. Babage y  la Srta. Ada Lovelance.


Maquina de calculo basada en las ideas del Sr. Babage. Fuente de la imagenpinimg.com

Gracias a la maquina de Babage podríamos en resumen dividir arbitrariamente el problema de la maquina de Computo en dos (2):

El primero es claramente construir la maquina, que abordaré superficialmente  en el siguiente apartado .

El segundo problema es cómo comunicar a la maquina  los problemas a resolver y nos permita obtener respuesta al problema especifico.  Aun cuando nos parezca extraño fue lo primero que se logro resolver.; Ada Lovelance  en el caso de la maquina de analítica retomó la vieja idea del “algoritmo” o la de  dividir todo problema en pequeños pasos a  manera de optimar los problemas e insertarlos en la maquina, y es lo que conocemos como solución algorítmica. 

Esta es la solución o ALGORITMO permitió a cualquier maquina de computo resolver  problemas matemáticos Fuente de la imagen wordpress.com

Visitar:

LENGUAJE DE MAQUINA Y LA MAQUINA..O ..LA BRUJERÍA DE LA COMPUTACIÓN

Debemos repasar por lo menos dos soluciones para construir  una buena maquina de computo: Turing y Neumann.

La primera solución del siglo XX fue propuesta por el Sr Alan Turing, muy brevemente es una forma muy avanzada de maquina de estados como una cinta transportadora. Visitar en Wikipedia la Maquina de Turing

Turing machine 1.JPG

La segunda propuesta y exitosa fue dada por el Sr. Von neumann, desde donde surge todo cuanto  conocemos como computación.  La maquina de Neumann no es distinto de una fabrica en donde se aseguran ciertos espacios de ingreso la información , ciertos espacios para almacenar, lugares para procesar y ademas de los mecanismos para su traslado.

Esquema del la computadora de Von Neumann (1940). Fuente de la imagen Wikipedia.

El trabajo del Sr.Von Neumann fue el de centrar el trabajo de la maquina en una calculadora mediante una ALU o UNIDAD ARITMÉTICO LÓGICA a la cual se le podían dar algunas instrucciones. Como consecuencia se debían generar pequeños espacios de entrada para el almacenamiento a los que denominaron REGISTROS

alu
Fuente de la imagen: http://fundamentos-infor-matica.blogspot.com.co/

Las  INSTRUCCIONES para la maquina de Neumann son las de la calculadora o ALU (operaciones aritméticas), a las que sumamos las que afectan el movimiento de datos de los registros (que incluyen una diversidad de opciones como adulterar los bits individuales), ademas las de generar saltos condicionales entre lineas del programa.

Existen muchos aspectos físicos en la electronica de la CPU, pero  no entrare en estos detalles.
Fuente de la imagen: slidesharecdn.com

Estas instrucciones  son en realidad secuencias de variaciones de voltaje (tensión) y que  hicimos similares a los números binarios. Para almacenar los números binarios la primera opción para almacenar y entregar estas instrucciones  fue rescatar las maquinas perforadas de los viejos  telares como la forma de comunicar las instrucciones (TARJETAS PERFORADAS), posteriormente cinta magnética y luego los discos ópticos.

telar-de-jacquard

Fuente de la imagen: http://www.roboprosl.com

Antes de continuar, existe un problema con el ábaco tipo ALU y es que las operaciones solo suman números enteros (como los tomates y las manzanas que no son fraccionarias ni irracionales), un ejemplo son los procesadores 486 del fabricante INTEL en los cuales ya  se habían integrado procesadores adicionales de mayor precisión numérica o coma flotante. En este caso un numero en coma flotante la “,”  puede variar para dar mayor precisión al numero.

mantisa se refiere a la diferencia entre un número y su parte entera. http://itm201511.webnode.es/arquitectura-de-computadores/punto-flotante/
Co-Procesador matemático encargado de la matemática compleja en los primeros procesadores. Procesador Intel 80386DX CPU + Cooprocesador intel 80387DX. Fuente de la imagen: Wikipedia

EL RELOJERO LOCO……BOTELLAS Y SUS CUELLOS ELEGANTES..

Casi lo paso por alto el tema de los MEGA HERCIOS (MHz = millones de oscilaciones por segundo). El procesador lee las instrucciones a una velocidad de reloj, dependiendo de la complejidad de la instrucción pueden tomar de 1 CICLO a 3 CICLOS de reloj,  depende de los semiconductores y los arreglos internos de transistores que lo componen.

ImagenLa analogía kindergarten del reloj es el tipo  que nos da látigo cada segundo para que te muevas más rápido. Si no te da látigo pues paras pero  a mas látigo mas rápido.

 

Esta analogía funciona aun a pesar del un pequeño problema en nuestro mundo moderno cada parte del computador quiere ir a su ritmo y con diferente ancho en sus autopistas (buses de datos), cuando cada uno de los componentes trabajan a una frecuencia diferente es posible que se produzcan “trancones/embotellamiento/atascos” entre los datos que cruzan de lado a lado, lo que podríamos llamar como cuello de botella.

Fuente de la imagen: Taringa

Visitar:

VÍDEO CONSOLA COMO COMPUTADORA Y VÍDEO JUEGO COMO SOFTWARE…  EL RETORNO AL ALGORITMO

Repasemos este enredo con el tema en cuestión, tenemos una maquina que es una computadora y le llamamos vídeo consola, a este se le introduce un software especializado que llamamos vídeo juego. La computadora solo entiende números binarios  como instrucciones aritméticas y modificaciones de los registros. A esta particular maquina le ingresamos datos por medio de interruptores (botones) y potenciometros (sticks) y como resultado obtenemos lineas de vídeo y sonido.

LENGUAJE DEL VIDEO JUEGO

Regresamos a la maquina y su lenguaje, si lo pensamos detenidamente la verdad no tiene mucho sentido escribir en lenguaje  en niveles de tensión (0 o 5 voltios)  y de paso obviaríamos el uso del lenguaje de manipulación de los registros (BAJO NIVEL o ENSAMBLADOR).  Bien no se preocupen, esto sea ha solucionado, dado que la misma teoría de la maquina permite construir un lenguaje un poco  similar al nuestro o de ALTO NIVEL.

El uso de un lenguaje de ALTO NIVEL resolvía el dilema y requerimos un software que hace la vez de  traductor (COMPILADOR) para resolver la traducción a la maquina. Estos lenguajes de alto nivel permitieron construir un software base  para comunicar nuevo software a cada solución de hardware  y administrar los recursos, es lo que conocemos como SISTEMA OPERATIVO.

Fuente de la imagen: aprenderaprogramar.com

En resumen, un lenguaje parecido al de los humanos nos permiten  comunicar a la computadora las instrucciones mediante cortas palabras, podemos asimilar este como lenguaje humano, pero recuerden esto no es una clase de programación es sobre el relato del software lúdico.

MARKETING ó SOBRE LA SUPERSTICIÓN Y MISTICISMO DE LA MAQUINA ..

Me gusta pensar que lo que se nos vende muy superficialmente como un vídeo juego moderno es la filosofía del producto experiencia  que promociona la idea de  la potencia computacional y su derivado de la potencia gráfica.

misticismo tecnologico.jpg

Si continuamos a este paso terminaremos creyendo que las computadoras fueron inventadas por extraterrestres, tal como creemos lo fue con las pirámides.

Les invito a resolver este tema del misticismo y superstición en los temas abordados por el marketing y el vídeo juego mirando los dos siguientes síntomas.

  1. La perdida de conexión entre la tecnología y las personas que la adquieren, a tal grado que muchos países han abandonado la producción de tecnología y ciencia en favor de un pequeño pero seguro retorno de las inversiones económicas, entre otros interesantes dilemas modernos.
  2. El vídeo juego no es REALMENTE como una caja cerrada o sistema emergente, o por lo menos desde esta perspectiva “material” la idea no se ve como muy prometedora. Debiendo meditar que el proceso de planteamiento de la maquina es como tal un conjunto finito de posibilidades.  Por consiguiente es imposible mantener la idea de que existen infinitos caminos para resolver el problema de construir una  maquina computacional del cualquier tipo, incluidas las especializadas en los  vídeo juegos.

En resumen todo esto de la computación y los vídeo juegos es solo un conjunto de soluciones estandarizadas. De igual manera  los algoritmos o software  son soluciones tipo paradigmas, por tanto tampoco se aceptan en un numero infinito y realmente son derivadas de  las técnicas aceptadas por las maquinas.

Esto también me lleva a otra cuestión, todo esto que les deseo contar no tiene nada que ver con desarrollar vídeo juegos, pero si son problemas intermedios que van en esa dirección.

BUCLE DE JUEGO PRINCIPIOS BÁSICOS….

Bucle de juego moderno (un solo hilo): Iniciar, Cargar contenido, Dibujar+Actualizar Bucle de juego de Anatomy of a XNA project, http://iloveshaders.blogspot.com.co/

El algoritmo base de todo vídeo juego es un bucle, el bucle se completa cuando el usuario da fin al programa o en casos muy primitivos o cuando el mismo completa los objetivos programados.

Antes de esta locura de las gráficas los video juegos era usual se escribieran por sus propios usuarios a partir de largos listados como los descritos en “101 Great Game To play” del año 1978. Fuente de la imagen: http://www.visualnews.com

Un  vídeo juego simple como el de  “101 Great Game To play”   de no parece ser el interés de muchos de los usuarios modernos, y podrían tener problemas con algo tan minimalista; sin gráficos ni sonido.

Debemos complementar la idea del bucle de juego si separamos el trabajo del hardware (perifericos) y software (código):

  • HARDWARE ESPECIALIZADO (PERIFERICOS):  Dibujar, Generar sonido y almacenar información
  • SOFTWARE EN LA MAQUINA DE COMPUTO:  Verificar los estados y metas, mover adversarios, físicas.

 

LA MAQUINA DE VÍDEO..EL GRAN ALIADO..

Cuando el Sr. Babbage pensó en una maquina no hubiera pensado siquiera en que estas pudieran generar imágenes,  incluyendo al Sr. Turing, Von Neumann y el largo etcétera de los pioneros en el campo.

Construir una maquina para la generación de gráficos requiere el desarrollo de los  tubos de rayos catodicos (CRT) y la TELEVISION (TV). Igual nos lleva a otro punto, las computadoras no escriben directamente en el CRT!! en principio podemos entenderlo con el hecho que los MHZ en un computador primitivo no tienen suficiente velocidad para dibujar figuras distinguibles, no quiero decir que no sea posible con un mayor numero de MHZ solamente fue una solución que se paso completamente por alto debido a limitaciones del hardware primitivo.

tv-cathode

Una opción fue entonces para esta primitivas computadoras fue la de construir otro elemento que hiciera de intermediario entre el procesador principal y el CRT, se orientaba generalmente a generar CARACTERES.

Steve_Russell_and_PDP-1.png

Fuente de la imagen de Spacewar! for the PDP-1  en https://archive.org/

Ahora bien, si investigan a fondo la computadora como la  PDP-01  en la que se programó el primer vídeo juego conocido como SPACE WARS! del año 1976 encontrarán que se dio la opción de modificar la informacion enviada al CRT, pero considérenlo como un ejemplo en extremo primitivo y rudimentario.

borrar
Mediante el bus de datos se puede conectar un nuevo circuito electrónico (periférico) que colabore con el trabajo de dibujar informacion en una pantalla.

Para acortar el relato debo resumir de manera arbitraria los cuatro (4) tipos de tecnologías o paradigmas para dibujar gráficos: Modos de texto, TILES/SPRITES, MATRICES DE VIDEO y GPU

TEXTO..Y MÁS TEXTO ..MODOS DE TEXTO..

En los modos de texto se escriben caracteres en pantalla mediante un numero fijo de columnas y filas,  estas maquinas no pueden generar gráficos pero pueden dibujarse formas primitivas con ayuda de caracteres especiales.

Cada uno de los caracteres se guardan en una pequeña ROM y a estos se asocian unos BITS de representación  (Codigo ASCII)  y se van dibujando cuadro a cuadro los bits contenidos en memoria.

Character generator scheme.svg.

Fuente de la imagen Wikipedia.

TILE MAPS y SPRITES..

Con la técnica de SPRITES-TILES, usada en el mundo de las vídeo consolas primitivas, las imágenes observadas se componen a partir de espacios de memora muy pequeños como si se tratada de un rompecabezas y en donde no se  pueden dibujar nada diferente los citados dos recursos.

Los TILESy los SPRITES  generalmente se guardan en la ROM y el procesador gráficos encarga de dibujar  los recursos que la CPU le ordena. La ultima consola en usar esta primitiva técnica fue la Game Boy Advance (GBA).

IMAGEN MATRICIAL ..HEGEMONÍADE DE LA  VRAM

 Esta locura proviene del mundo de los computadores personales (PC, mini y micro computadoras). Cualquier elemento que queramos dibujar tenemos que dibujarlo en una memoria intermedia. Es desde donde proviene toda esa locura de los PIXELES. Lo primero fue usar  la vídeo memoria principal como espacio para el dibujo, al no ser eficiente fue necesario trasladarlo a un espacio separado  o VÍDEO RAM (VRAM).

earlyvideo

Es un gran avance en ciertos aspectos, que conllevó a muchas limitaciones  para los juegos clásicos en PC ATX  obligaba a programar lineas para cargar los dibujos desde el disco a la memoria principal y de paso cientos de lineas de código adicional de CPU para asimilarlos como TILES o SPRITES. En otras palabras  no solo perdemos  grandes cantidades de RAM, ademas perderemos mucho de nuestro tiempo en solventar los problemas de cargar desde imágenes de los  archivos y llevarlos a la RAM.

Ahora bien, en los sistemas modernos es prácticamente imposible acceder a la escritura de la RAM a favor de construir nuevas estructuras llamadas polígonos, de los cuales hablare un poco adelante,  por tanto realmente es un plano intermedio que simula un viejo sistema 2D pero que no facilita la representación como TILES o SPRITES y se implementan como texturas en pequeños polígonos.

 

Un paso intermedio se vio con el bum! de los entornos gráficos, recuerdo que cuando programaba para las versiones primitivas de los sistemas de ventanas como MS-Windows (3.1) encontraba que el espacio de dibujo no se resolvían mediante la escritura en RAM,  sino como una pizarra de dibujo llamado CONTEXTO DE DISPOSITIVO, aunque se ahorraban temas de carga de imágenes el manejo del contexto era tan lento que no permitía componer imágenes fluidas.

SkiFree por Chris Pirih un video juego popular para OS Windows 3.1.  Fuente de la imagen staticflickr.com

NOTAS SOBRE EL COLOR…RAM Y PALETAS

Las memorias  RAM  desde siempre han tenido un costo  económico considerable, lo mejor siempre es ahorrar tanta como es posible por tanto los primeros modos de vídeo  dibujaban un pequeño numero de colores a la vez con la ayuda de un recurso llamada la “PALETA”. En otras palabras, construíamos una paleta de todos los colores a usar ejemplo clásico del VGA son 256 colores y solo con ellos podíamos dibujar las imágenes.

Fuente de la imagen: http://webstyleguide.com

En los esquemas modernos de color cada componente Rojo, Azul y Verde (RGB) se almacenan en bits independientes y son costosos en espacios de memoria

Referencia: Muchas de las imágenes e informacion son tomadas de http://www.scratchapixel.com/ pagina que invito a visitar.

VENGAN PASEN!! 3D PARA TODOS!!!

Antes de iniciar quiero separar los temas en gráficas 3D. Advierto amablemente que solo abordaré la introducción a estos temas en técnicas  “en tiempo real” o  propias de uso en  los vídeo juegos, esto queridos amigos es una gran limitación referente al universo de técnicas y algoritmos 3D en computadoras, ademas de ser  muy favorable para delimitar el tema. También comprenderán que existe un limite temporal de la entrada y es justo al borde del inicio de las GPU con sombreadores programables.

RESUMEN: realmente esta bujería es una aplicación practica de matemática de matrices en un espacio tridimensional ( ejes X,Y,Z). Cada punto en el espacio 3D es transformado a un nuevo plano de pantalla de vídeo, no distinto a una pintura que usa perspectiva. Así que toda esta locura se puede entender como el dibujo de mallas o lineas a partir de solo información de puntos o  VÉRTICES que son coloreados y modificados para mostrarlos en una pantalla.

Fuente de la imagen: Image synthesis and OpenGL: graphics pipeline

COORDENADAS Y MATRICES..

El Sr. René Descartes en el siglo XIV propuso dividir el espacio físico real en un sistema de coordenadas, en otras palabras como conjunto de puntos separados entre ellos por una distancia idéntica y con un punto de origen [0,0,0].  El dilema no es tanto que exista este espacio 3D, el dilema esta en reducir el problema de “trasladar” cada punto 3D en un “lienzo”  (CANVAS/VIEW PORT)  o la pantalla de un ordenador.

Sistemas de coordenadas

Fuente de la imagen: https://msdn.microsoft.com

Vamos a ver si puedo explicar esto de las matrices sin mucho texto, espero que los matemáticos me perdonen!!

Esto no es una clase de matemática, pero si pretendo hacer una buena introducción debo dedicar las siguientes lineas a explicar superficialmente de que va todo esto de las matrices. Las matrices parten realmente del ÁLGEBRA LINEAL, si  la recuerdan es  aquella matemática en donde tenemos varias ecuaciones con varias variables de las cuales deseamos obtener una solución.

{\displaystyle \left\{{\begin{array}{rcrcrcr}3\,x_{1}&+&2\,x_{2}&+&\,x_{3}&=&1\\2\,x_{1}&+&2\,x_{2}&+&4\,x_{3}&=&-2\\-\,x_{1}&+&{\frac {1}{2}}\,x_{2}&-&\,x_{3}&=&0\end{array}}\right.}  FI.Wikipedia

Para obtener una MATRIZ lo que debemos hacer es deshacernos de todas esas letras (variables) y quedarnos con los números (coeficientes).

{\displaystyle {\begin{bmatrix}a_{11}&a_{12}&\cdots &a_{1n}\\a_{21}&a_{22}&\cdots &a_{2n}\\\vdots &\vdots &\ddots &\vdots \\a_{m1}&a_{m2}&\cdots &a_{mn}\end{bmatrix}}{\begin{bmatrix}x_{1}\\x_{2}\\\vdots \\x_{n}\end{bmatrix}}={\begin{bmatrix}b_{1}\\b_{2}\\\vdots \\b_{m}\end{bmatrix}}}  FI.Wikipedia

Lo que descubrieron muchos inquietos matemáticos es que al usar solo las matrices era posible transformar la información entre varios espacios dimensionales, en nuestro caso  el 3D y el 2D. Esto quiere decir que si tenemos un punto 3D definido mediante P [x,y,z]   se puede definir  una matriz T de transformación y la idea es que al multiplicar estas matrices tenemos una nueva matriz P’ .

Con el uso de matrices Reducimos increíblemente plantear los problemas en 3D, y la moraleja por ahora es un tanto que deberíamos aprender a multiplicar matrices pero este NO es el blog adecuado para ello.

¿Cómo se relaciona esto con la GPU?
Aunque pareciera complicado, solo debemos implementar una vez las operaciones con matrices como un nuevo tipo de instrucción. Es posible claro construir estas operaciones en  lenguajes  de programación de alto nivel,  sin embargo sinceramente es absurdamente ineficiente y solo se deben considerar a nivel académico.

Las matrices T de  transformacion son útiles para  MOVER, ROTAR, ESCALAR y TRASLADAR puntos en el espacio 3D   y cualquiera que sea la matriz que queramos pueden definirse mediante estas operaciones.

Fuente de la imagen: http://math.hws.edu/graphicsbook/c3/s5.html

Mediante matrices de 4 filas por 4 columnas podemos realizar todas las operaciones en el espacio 3D.

 

CÁMARA, FROSTUM Y PROYECCIÓN….

La solución para trasladar un punto 3D a una pantalla 2D  (plano) es construir una cámara imaginaria, palabras mas palabras menos, si tenemos un punto en el espacio 3D y nuestros ojos están en el centro (foco)  este punto puede ser proyectado en un punto de un plano frente a nuestros ojos o LIENZO (VIEW PORT). Esto es lo que  podríamos interpretar como  PERSPECTIVA, herramienta usada desde tiempos inmemoriales en la pintura.

Perspective transform diagram.svg
.  Fuente de la imagen Wikipedia 

Para encontrar los nuevos puntos en el plano usaríamos usualmente trigonométria, o de la relación entre los lados de triángulos y sus ángulos

Fuente de la imagen Wiikipedia

Si recuerdan un poco sus clases de dibujo, es posible definir un punto (fuga) en donde convergen imaginariamente todas las lineas de un objeto observado.

La matriz que nos permite pasar del mundo 3D al pantalla 2D es la MATRIZ DE PROYECCIÓN. Podríamos entender esta matriz como aquella que ubican unos puntos 3D para que este simule el fenómeno de la perspectiva. Ahora bien, como la idea es simular los elementos que captura la cámara virtual, se simplifica el modelo si imaginamos una escena encerrada dentro de una  figura 3D denominada FRUSTUM, una pirámide a la cual hemos recortado en su lado puntiagudo,  la punta realmente es donde ubicaríamos uno de nuestros ojos y el corte se asimilaría como el lienzo.

 

Fuente del a imagen http://www.real3dtutorials.com

FROSTUM es una figura imaginaria que nos permite delimitar las capacidades de nuestra cámara imaginaria, soluciona el tema de la perspectiva y reducimos el numero de objetos a representar eliminando aquellos que no son encerrados por la figura (CLIP o CLIPPING).

Sin embargo, la CÁMARA no es un objeto fijo,  MATRIZ DE PROYECCIÓN en conjunto con la MATRIZ DE VISTA (VIEW MATRIZ) permite trasladar cada uno de los puntos 3D al punto correcto o espacio de la cámara, en otras palabras todos los puntos viven felices en su lugar pero si queremos verlos debemos trasladarlos a la cámara para luego capturarlos en el lienzo, pero es claro que los puntos que están antes de el lienzo o después de la FROSTUM no nos interesará dibujarlos.

Visitar

ES HORA DE COMENTAR ALGUNAS VAGAS IDEAS SOBRE LOS POLÍGONOS….

El polígono o figura geométrica  más sencillo que conocemos es la conformada por  tres (3)  puntos, si pensaron en el TRIANGULO adivinaron.  A cada punto le llamaremos VÉRTICE y por tanto con 3 VÉRTICES podemos definir un polígono básico en 3D o un triangulo. Cada uno de estos vértices esta en un punto arbitrario en el que le creamos o le modelamos y  se le denomina ESPACIO DE MODELO (MODEL/LOCAL CORDINATES)

Fuente de la imagen Wikipedia.

Con un conjunto de polígonos tipo triangulo podemos construir figuras complejas, a mayor numero de triángulos la imagen se asemejará a una realista, pero con un mayor coste computacional.

Al usar triángulos nos vemos absortos a limitaciones y es el orden en el que se define cada uno de los vértices que no pretendo explicar, pero si puedo comentarles  una vez que definimos 3 puntos y les tenemos en el espacio de proyección solo nos faltan  trazar las 3 lineas es en ese momento que veremos el polígono en pantalla.

Resultado de imagen para poligono triangulo 3d opengl

SOLO SOMOS PUNTOS EN EL ESPACIO…

 

Diagram of how world coordinates and local coordinates are related
Fuente del  imagen MSDN

Solo nos falta la MATRIZ MUNDO (en los que incluimos las operaciones rotación, traslado y escalado), es la que define donde se ubican cada los vértices (puntos) respecto al resto de elementos que pretendemos dibujar.

Un ejemplo sencillo es cuando  tenemos un modelo de una palmera y tenemos muchas palmeras iguales, pues cada una de las palmeras (es la misma) pero con diferentes ubicación en el mundo 3D.

 

Fuente de la imagen: http://animium.com

 

DEL 3D A LA GRAN PANTALLA..DE LA TV

Retomemos la idea del lienzo, como entenderán la  pantalla de ordenador es un conjunto ENTERO y FIJO de puntos de  PIXELES, a este espacio se le denomina generalmente IMAGEN RASTER o  matriz de puntos de pantalla en dos dimensiones (2D).

Todo lo que capturamos en la matriz de proyección en especial en el LIENZO es convertido a el nuevo espacio 2D ,  a este tamaño de la pantalla se le denomina RESOLUCIÓN o el numero de pixeles verticales por numero de pixeles  horizontales.

Antes de continuar, recordemos que el punto de origen de una pantalla siempre es la esquina superior izquierda, el eje X es linea horizontal y el eje Y es la vertical, el valor se incrementa en la medida que nos alejamos del origen.

Y aun cuando no parece intuitivo es una de las grandes discusiones en el 3D en tiempo real  el calcular un mayor numero de puntos en la pantalla  dado que se relaciona directamente con el nivel de detalle de la escena.

Nota 1: IMAGEN RASTER es diferente de RASTERIZACION 3D, que describiré brevemente  lineas adelante.

Nota 2: NDC (Normalized Device Coordinates), coordenada normalizadas o , convertir los puntos desde cualquier rango de  0.00 a 1.000 , realmente es un paso intermedio entre el espacio del lienzo y el espacio de pantalla.

Resumamos un poco sobre como dibujar polígonos:

Fuente de la imagen: https://learnopengl.com/

Los vértices ingresan a un proceso consecutivo de transformaciones que  a continuación explicaré:

  • En el espacio de modelo (local space) es donde arbitrariamente definimos nuestras figuras o conjunto de vértices.
  • El espacio de mundo (world space) es el espacio final en donde ubicaremos el modelo.
  • En el espacio de vista  (view) es a donde movemos todos los puntos antes de la matriz de proyección. Esta matriz de proyección  (porjection) simula la perspectiva y de paso nos permite eliminar los elementos que no ve la cámara.
    • Es en este punto en perspectiva que los conectamos mediante lineas y es lo que observamos como una malla.
  • Finalmente en el lienzo o pantalla (viewport tranform to screen) es realmente en donde redondeamos los valores de lo que se ve en el plano de cámara (lienzo) para que podamos representarlos en una arreglo de memoria RAM , de allí solo queda convertirlos en información para llevarlos a la pantalla (VGA, HDMI, etc).

Con esto podríamos hacer unos gráficos muy primitivos  mal llamados MESH (MALLA) o WIREFRAME (modelo de alambre). Por lo que debemos continuar con algo de color para estos primitivos polígonos.

VECTOR NORMAL Y …SOMBREADORES ..

Definición,  Vector: Una linea con magnitud  finita y dirección (orientación en el espacio)

Fuente de la imagen: imgur.com

Es claro que si le damos la vuelta al triangulo de una figura que parece solida no vemos en la vida real detalles de su interior. Para definir el derecho del triangulo se usa algo llamado VECTOR NORMAL o brevemente N, nos quedaremos con la idea que es el vector perpendicular a la superficie del triangulo, no es complicado de calcular, no es física nuclear, pero esto no es clase de matemáticas. Nuestra cámara al apuntar al LIENZO  tiene un vector normal  y al calcular el angulo entre ellos nos dará idea de si el polígono es visible a la cámara o si vemos la cara inversa  y por tanto no lo veremos (FACE CULLING).

Resultado de imagen para triangle normal vector

Este vector normal es útil para atender al tema de la iluminación y los sombreadores. Si imaginamos por un momento la luz como un rayo,  este golpeara el polígono y revotara hasta llegar a la cámara, al evaluar  el angulo (al igual que con la cámara) matemáticamente nos dará una idea de que tan oscuro o “sombreado” le observaremos. Olvidaba a esta técnica se le denomina sombreado plano (FLAT) y no es muy bueno si tenemos muy pocos polígonos en nuestra figura.

. Fuente de la imagen Scratchpixel.com

En esta imagen el punto de luz es el mismo de cámara, observamos que los puntos alejados se oscurecen

Con el objetivo de mejorar el resultado del sombreado el Sr. Henri Gouraud pensó que era un poco mejor en lugar de usar un unico vector normal calcular (interpolar) la variación de color entre triángulos vecinos.  Mientras que el Sr.  Bui Tuong Phong  considero estimar el sombreado desde vectores normales en cada uno de los vértices.

../../_images/flat-gouraud-phong.png

../../_images/comparison.png

Fuente de las imagenes: http://opengl-notes.readthedocs.io/

Esto nos lleva la pregunta ¿Qué es un SOMBREADOR (SHADER)?, en este nivel de reducción es tal vez una aproximación matemática a un problema de iluminación y no simula la trayectoria de la LUZ tal como la conocemos, por lo que deberíamos  pensar en ellos como un truco cuyo objetivo es  simular el comportamiento de la luz al impactar algún tipo de material especifico.

Visitar:

AHORA LO VES AHORA NO LO VES…RASTERIZACION Y Z-BUFFER…

VES Awards 89 cropped.jpg
Foto del señor Catmull

 

En este punto debemos rescatar  a un ilustre personaje en la computación gráfica el Sr.  PhD Edwin Catmull, podríamos decir que es el padre de toda esta brujería. Uno de los grandes descubrimientos de Sr. Catmull fue:  adivinaran, si el invento eso de tirar rayos  a los triángulos  (polígonos), no lo comente antes para no dañar la sorpresa.

Si quisiéramos saber que es o no visible desde nuestro punto de vista solo podríamos lanzar un rayo desde nuestro ojo al lienzo una vez han pasado todos los vértices (y polígonos) por la MATRIZ DE PROYECCIÓN.

El rayo imaginario se dispara distinto en cada técnica de RATERIZACION 3D, pero es común encontrar que el sentido es un tanto distinto a la lectura de textos o de los rayos catódicos en una CRT, el rayo al llegar a la ultima linea no retorna por el contrario regresa en sentido contrario.

Esto es lo que conocemos como RASTERIZACION y si recuerdan el FROSTUM ponderando los valores de lienzo y el plano más lejano es lo que se almacena en un espacio de memoria llamado Z-BUFFER. Estos números son mostrados a continuación:

Fuente de la imagen: Foros de  NeoGaf

z'= 2 \cdot \frac{{z} - \mathit{near}}{\mathit{far}-\mathit{near}} - 1

F.Wikipedia

Un tema final de la RASTERIZACION y es la locura de los fragmentos, no es distinto al sombreado Phong , cuando tiramos el rayo desde la cámara se divide el triangulo (polígono)   en pequeños fragmentos (discretos o enteros) pero la informacion como entenderán se calcula (interpola) desde la posición relativa a cada uno de los vértices.

Fragments for a triangle are colored in yellow

Fuente de la imagen: https://developer.tizen.org/

Escribir en detalle de algoritmos para RASTERIZACION 3D es algo de nunca acabar por favor visitar:

PINTURAS RUPESTRES COMPUTACIONALES O TEXTURAS..ULTIMA ESTACIÓN

Los objetos reales tienen superficies que podemos simular mediante diminutas  fotografías que llamaremos TEXTURAS. Estas texturas realmente son pequeños espacios de memoria y se almacenan en la GPU como un recurso gráfico.  Una imagen se define en coordenadas de PIXELES (x,y) mientras que la textura se define en un nuevo sistema de coordenada 2D (u,v) o  TEXELES al interior de un conjunto de polígonos.  Es claro que a las texturas les aplicamos las matrices de proyección y de transformación al ser parte de un modelo 3D.

TEXTURA 3D BASICO PARA NO INGENIEROS NI MATEMATICOS

Fuente de la imagen: https://people.cs.clemson.edu/

Como es costumbre tiramos un rayo desde la cámara  que golpea el modelo de esta manera podemos recuperar las coordenadas (u,v)  el color de textura se utiliza como un sombreador para proporcionar el color del píxel al poligono.

Aun cuando originalmente la aplicación de texturas eran limitados a cubos, cilindros y esferas,  con el texturizado  que conocemos o  “mapeado de textura UV unwrapping” con una sola imagen se pueden aplicar una sola textura a un conjunto de polígonos .

Resultado de imagen para uv unwrapping

Fuente de la imagen: https://blenderartists.org/forum/

Existen otros temas interesantes,  cuando se dibujan  las  figuras en los polígonos ellos tienden a traer varios inconvenientes como la tendencia “pixlearse” y  cuando tienden a saltar de su sitio que son fallos en los cálculos de la perspectiva y deben ser corregidos.


Fuente de la imagen: http://www.tomshardware.com/reviews/ati,819-4.html

En cuanto a los algoritmos para reducir el pixelado realmente son interpolaciones de colores de allí nacen términos Bilineal , Trilineal y Anisotropico.

Anisotropic filtering: es un método para mejorar la calidad de una textura en una superficie que está vista desde un ángulo oblicuo con respecto al ángulo de proyección de la textura sobre una superficie. Wikipedia.

Visitar:

Resumamos un poco sobre como pintar los polígonos:

Los vértices ingresan a un proceso consecutivo de transformaciones, pero  en  este punto deseamos colorearlos.

  • Una opción es usar un SHADER o una aproximación a un problema de iluminación. Como ejemplos clásicos el PHONG y el Gouraud, con el cual podemos realizar un degradado de  colores en un conjunto de vértices para simular la incidencia de la luz.
  • Igualmente, podemos usar una imagen que rellene el triangulo que le llamamos TEXTURA, para ello definimos unas nuevas coordenadas (u,v) en TEXELES las cuales debemos extraer disparando un rayo desde la cámara al objeto, en el punto donde la cámara impacte debemos ir a la coordenadas de TEXTURA y extraer la información de color para ofrecerle en pantalla.
  • Es posible usar ambos  y combinarlos como comentaré en el siguiente apartado…

Si son observadores, habrán notado que con el uso de mallas de polígonos (wireframe) veremos todos incluso lo que esta detrás de las caras y objetos que ubicamos detrás de otros polígonos (u objetos), afortunadamente lo podemos resolver mediante muchas opciones pero solo describí las 2 principales:

  • FACE CULLING, usando algo llamado vector normal o perpendicular a la superficie de lienzo y polígono podemos calcular el angulo entre ellos, determinando si son o no visibles.
  • 3D RASTER. de la misma manera podemos disparar un rayo desde la cámara una vez hemos transformado todo al espacio de cámara (perspectiva) para verificar que objetos son golpeados por el rayo. Si almacenamos  en el z-buffering el valor ponderado entre el lienzo y el plano más alejado de la cámara podemos determinar que objetos son visibles y en que orden. Luego solo bastara con tomar los puntos de menor valor almacenados en el z-buffe. Con esta solución podremos  pintarlos correctamente con un SHADER o la TEXTURA.

 

Fuente de la imagen: Image synthesis and OpenGL: graphics pipeline

REGRESANDO A LA ILUMINACIÓN EN TIEMPO REAL …NOTAS ANEXAS…

Tanto que hablo de términos locos, brujerías extrañas, pero nada que comento sobre la iluminación, bien pues la iluminación en 3D en tiempo real es lo mas cercano que conozco a ser mitológico y utópico.  Si recuerdan lo que comenté lineas atrás los SOMBREADORES primitivos  son  realmente  SOMBREADORES SOBRE LOS VERTICES (VERTEX SHADING), trabajan sobre la informacion de los  vértices para calcular el color el interior del polígono y así simular la iluminación.

Fuente de la imagen https://takinginitiative.wordpress.com

El gran salto en la mejoría del esquema 3D lo encontramos en la mezcla de regiones  de memoria  (BLENDING  o mezclado bit a bit de los colores).

Todo lo que conocemos parte del los mapas de luces (LIGHT MAP), se tomaba toda la escena 3D en un programa parte y se calculaba toda la iluminación fija, para posteriormente mezclar en tiempo real esta información con esta textura (tostada), con eso se obtiene un buen resultado en tiempo real. No es muy distinto de los mapas modernos de sombras en tiempo real generados con las técnicas de oclusión (OCLUSION MAPS)

Ejemplo de Light map, a la derecha la escena compuesta y a la izquierda la textura que son el resultado del pre-tostado con un software en etapa de diseño.

Visitar:

AHORA SI!! LA CORTA, PERO SOBREVALORADA HISTORIA DE LA FACTORÍA  3D…LA GPU

Si lograron entender algo requerimos un procesador dedicado con una memoria dedicada con capacidad para la matemática con coma flotante, de paso reduzca el numero de pasos en las operaciones entre matrices y que ademas nos ofrezca uno que otro sombreador simple con el uso texturas y otro largo etcetera de tecnicas.

 

3D PARA NO PROGRAMADORES GPU.png

Fuente de la imagen: Programmable graphics pipeline Adapted from Suresh Venkatasubramanian UPenn

Lo que llamamos la GPU (Graphics Processor Unit) es  la fabrica dedicada al proceso industrial de los vértices,  se puede comprender mejor desde un proceso fijo o llamado FIXED PIPELINE que contiene muchas de las soluciones que he comentado en esta entrada.  Entiendo que es lo mas cercano a una herejía, pero a mi parecer es muy importante para entender de que trata una GPU desde la base.

ULTIMA PARADA PARA LOS SOMBREADORES PERSONALIZADOS..

No paso mucho tiempo antes que  a la  GPU  se le devolviera una pequeña cantidad de flexibilidad en especial para correr procesos sobre los vértices, mediante micro-programas (VERTEX SHADERS)  útiles para el caso de la iluminación, los efectos de agua y en general para la animación de las figuras. Al mismo tiempo se pensó el por qué no hacer lo mismo con las TEXTURAS generar micro programas y ayuden a modificarles haciendo que la GPU se encargue de estas tareas o PIXEL SHADER.

pipeline

Fuente de la imagen rmit.edu.au

Estas unidades estaban separadas al principio y corrían pequeños micro-programas en sus unidades o super ALU independientes, no son cualquier ALU como las de la CPU son especializadas en operaciones entre matrices. A esta brujería se le llama PROGRAMMABLE PIPELINE o el uso de unidades independientes que procesan tanto la información de los vértices como las de los pixeles.

3d para todos gpu cpu.png
Fuente de la imagen: Performance of Parallel Processing on Processing Units Oscar Inzunza-Monreal

Las GPU modernas contiene un  conjuntos de procesadores independientes para realizar el procesamiento 3D es decir matrices.

Fuente de la imagen: Materials and Shaders en docs.unity3d.com

Si recuerda comente que los sombreadores simulan los efectos de la luz al chocar con los materiales, su proliferación se ha favorecido con las nuevas GPU.

Un ultimo y pequeño detalle, no solo se doto de capacidad sobre los vertices y pixeles, se doto sobre los Fragmentos de salida del proceso de rasterización.

Visitar

FINAL ..FINAL NO VA MAS…DILEMA DE LA GPU..

Por ultimo deseo resumir el lió mercantil moderno o paradoja de  vender un mayor procesamiento. Como primicia recuerden que todo los que describí anteriormente o  proceso de renderizado (RENDER) requiere mucha memoria  RAM y deben realizarse de manera que se produzca cada uno de los fotogramas o escena al menos a taza de 24 fotogramas por segundo (24 fps estándar en el cine comercial),  que de por si ya requiere una buena cantidad de respuesta en  MHZ en memoria y de la GPU .

Por un lado todavía usamos este antiguo esquema  VERTICE/POLIGONAL que nos ha obligado a usar cada vez un mayor numero de triángulos y como respuesta hemos integrado varios tipos de poderosos algoritmos para interpolar la imagen de pantalla en tiempo real que permite  suavizar la salida  (ANTIALIASING) del RENDER en pantalla.

Fuente de la imagen:Role of Anti-Aliasing (AA) in Gaming en  https://ageeky.com/

Seguimos con la triste historia de la  RAM  y su costo (velocidad y precio), muchas de las GPU que conocemos resuelven estos problemas de trabajar estos mega pixeles requeridos en pantalla al optar por  realizar el proceso en pequeños cuadros (tiles) …agregando más y más  MHZ de la GPU etc.

Fuente de la imagen:  On nvidia tile based rendering

 

3D PARA TODOS ATRAPADOS EN LOS VERTICES.jpg
The Thirteenth Floor, conocida en español como El piso 13 o Nivel 13,  película de ciencia ficción de 1999 dirigida por Josef Rusnak e inspirada en la novela Simulacron-3 (1964) de Daniel F. Galouye

..con esto ya termino esta larga entrada,  y como entenderán esto no parece que nos lleve a un nuevo lugar o un nuevo paradigma  y al parecer padeceremos esto durante  otro largo tiempo. Tiempo en el que seguiremos viviendo con esta solución de la fabrica de transformaciones de vértices, así como lo hemos hecho desde hace 40 años. 😉

 

 

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s