Source: http://docplayer.es/2227635-Segmentacion-espacial-tridimensional-en-hardware-para-el-gpu-theia.html
Timestamp: 2017-01-24 21:48:29+00:00

Document:
⭐Segmentación espacial tridimensional en hardware para el GPU Theia
Segmentación espacial tridimensional en hardware para el GPU Theia
Download "Segmentación espacial tridimensional en hardware para el GPU Theia"
Silvia Aranda Parra
1 Universidad de Costa Rica Facultad de Ingeniería Escuela de Ingeniería Eléctrica Segmentación espacial tridimensional en hardware para el GPU Theia Por: Enrique José Sáurez Apuy (A95872) Ciudad Universitaria Rodrigo Facio, Costa Rica Julio de 20132 3 Segmentación espacial tridimensional en hardware para el GPU Theia Por: Enrique José Sáurez Apuy (A95872) IE-0499 Proyecto eléctrico Aprobado por el Tribunal: Ing Diego Valverde Garro Profesor guía Ing. Randolph Steinvorth Fernández, Ph.D. Profesor lector Ing. Francisco Siles Canales, M.Sc. Profesor lector4 5 Resumen GPU Theia es una unidad de procesamiento gráfico (GPU) implementada y diseñada por el profesor Diego Valverde Garro, bajo el esquema de hardware abierto. El presente proyecto se enfocó en la investigación, análisis y comparación de las estructuras de segmentación espacial tridimensional para las arquitecturas del tipo GPU. Esta investigación se realizó con el fin de obtener una estructura de segmentación espacial que permitiese mejorar el rendimiento de generación de imágenes con el GPU Theia, esto mediante el aprovechamiento de la coherencia espacial, dado que se reduce la cantidad de intersecciones de rayo con primitivas necesarias para completar el algoritmo de ray-casting. Para ello, se realizó una investigación bibliográfica, y a partir de la teoría obtenida se realizó un análisis algorítmico y se simuló el comportamiento de las estructuras con escenas reales utilizando mallas de triángulos. Se modeló las estructuras de octrees, kd-trees, bvh y uniform grid, dado que estas representan los esquemas más comunmente utilizados en el área de gráficos por computador y en la generación de imágenes a partir de modelos tridimensionales. A partir de los datos obtenidos de los análisis de los algoritmos se diseñó una arquitectura para la generación de la estructura kd-tree en Hardware. Se eligió como estructura base el kd-tree dado que fue la que generó mejores resultados globales en la mayoría de las pruebas. Donde a pesar de tener un costo de construcción superior a las demás opciones, al realizar las intersecciones de rayos, se obtuvo una mejora de hasta más de 1300 veces, con respecto a la implementación actual del GPU Theia. La principal métrica que se utilizó fue la cantidad de operaciones básicas ejecutadas por iteración en la simulación. Se diseñó una máquina de estados que permite generar el kd-tree partiendo únicamente de un arreglo de primitivas o triángulos. Además, se definió las modificaciones necesarias a la arquitectura del GPU Theia, para su acople y correcto funcionamiento con esta máquina de estados, así como las modulos adicionales y de procesamiento requeridos para que el sistema sea funcional. v6 7 Índice general Índice de figuras Índice de cuadros Nomenclatura viii x xi 1 Introducción Descripción General Justificación Alcance del proyecto Objetivos Metodología Antecedentes Unidad de Procesamiento de Gráficos (GPU) Formación de imagenes Segmentación Espacial Desarrollo y Análisis Comparación de algoritmos Definición de la arquitectura Construcción del árbol Algoritmo de intersección Resumen de la arquitectura y el hardware necesario Conclusiones y recomendaciones Conclusiones Recomendaciones Bibliografía 89 A Apéndice 95 A.1 Pseudocódigo B Anexos 111 B.1 Tablas de resultados vii8 Índice de figuras 2.1 Diagrama de bloques del GPU Theia Diagrama de bloques del GPU Theia Scan Conversion (Rasterización) Creación de rayos Escena Volumen envolvente (esfera) Jerarquía de volúmenes envolventes Mallas uniformes Árbol BSP Heurística de área de superficie Primer división en kd-tree 2D Ejemplo de un kd-tree (2D) utilizando la mediana espacial Ejemplo de un kd-tree (3D) utilizando SAH Recorrido del rayo en 2 nodos Ejemplo de un árbol octario Demostración gráfica de la pelota Puntos de vista Comparación de estructuras: Bola Comparación de estructuras: Bola, solo mejores estructuras Tetera Tetera: Vista Tetera: Vista Tetera: Vista Tetera: Vista Comparación de estructuras: Tetera Comparación de estructuras: TEtera, solo mejores estructuras Vista Frontal: CSIE NTU Vista Trasera: CSIE NTU Vista Variada: CSIE NTU Vista Superior: CSIE NTU Comparación de estructuras: Edificio Comparación de estructuras: Edificio, solo mejores estructuras Nuevo CSIE NTU Vista Inferior: Nuevo CSIE NTU viii9 3.20 Vista Lateral: Nuevo CSIE NTU Vista Superior: Nuevo CSIE NTU Vista Frontal: Nuevo CSIE NTU Comparación de estructuras: Nuevo Edificio Comparación de estructuras: Nuevo Edificio, solo mejores estructuras Máquina de estados para la construcción del árbol Diagrama de la arquitectura del constructor del kd-tree ix10 Índice de cuadros 3.1 Promedio de costo: Bola Resumen de costo de la intesección y la simulación: Bola Promedio de costos: tetera Resumen de costo de la intesección y la simulación: tetera Resumen de costos promedio: edificio Resumen de costo de la intesección y la simulación: edificio Resumen de costos promedio: nuevo edificio Resumen de costo de la intesección y la simulación: nuevo Edificio 66 B.1 BVH: Bola B.2 Kd-Tree: Bola B.3 Octree: Bola B.4 Uniform Grid: Bola B.5 Sin estructura: Bola B.6 Sin estructura: Tetera B.7 Uniform Grid: Tetera B.8 Octree: Tetera B.9 Kd-Tree: Tetera B.10 BVH: Tetera B.11 Sin Estructuras: Edificio B.12 Octree: Edificio B.13 Uniform Grid: Edificio B.14 BVH: Edificio B.15 Kd-tree: Edificio B.16 Sin Estructuras: Nuevo Edificio B.17 Octree: Nuevo Edificio B.18 Uniform Grid: Nuevo Edificio B.19 BVH: Nuevo Edificio B.20 Kd-tree: Nuevo Edificio x11 Nomenclatura 2D AABB BBox BSP BV BVH CAD CP CTRL EXE GPU IO LUT MCU MEM OMEM RAM rbsp SAH SMT Dos dimensiones Hexaedro con planos alineados a los ejes (Axis aligned bounding box) Hexaedro envolvente (Bounding Box) Partición binaria espacial (binary spatial partition) Volumenes envolventes (bounding volumes) Jerarquía de volumenes envolventes (bounding volume hierarchies) Diseño asistido por computador (computer-aided design) Procesador de control (control processor unit) Unidad de control en el procesador vectorial (control) Unidad de ejecución en el procesador vectorial (execution) Unidad de procesamiento gráfica (graphics processor unit) Unidad de entrada/salida en el procesador vectorial (Input/Output) Tabla de consulta o busqueda (lookup table) Unidad de Control de Memoria (memory control unit) Unidad de memoria en el procesador vectorial (memory) Memoria de salida (output memory). Memoria de acceso aleatorio (random access memory) Partición espacial binaria restringida (Restricted Binary Spatial Partition) Heurísticas de área de superficie (Surface Area Heuristic) Multi-hilo simultaneo (simultaneous multithreading) xi12 TMEM Memoria de texturas (texture memory) µp Microprocesador VP Procesador vectorial (vector processing units) xii13 1 Introducción 1.1 Descripción General El GPU (unidad de procesamiento de gráficos, por sus siglas en inglés) Theia es un µp multi-núcleo y multi-hilo de código abierto utilizado para generar una imagen renderizada mediante el método de Ray-casting. Actualmente se pueden utilizar 2, 4, 8 y 16 núcleos trabajando independientemente para generar las imagenes, pero se puede expandir a más núcleos.(valverde, 2012). Para realizar el algoritmo de Ray-casting se parte de una escena tridimensional (3D), la cual se puede definir como una serie de primitivas que permiten modelar matemáticamente los distintos objetos que desean ser observados, y se realiza un análisis de intersección de rayos para proyectarlos en una imagen de dos dimensiones (2D), este proceso conocido como renderización (Comninos, 2006). En el caso del proyecto Theia se utiliza como primitiva el triángulo, siendo esta una de las representaciones más comunes en gráficos por computador. Los triángulos se unen por sus vértices para formar mallas y así conformar el modelo tridimensional y asemejarlo lo más posible al objeto real.(washington, 2000) Uno de los aspectos que puede afectar considerablemente el tiempo de ejecución de la renderización de una escena, es la velocidad a la cual se puede recorrer esta malla de triángulos. El modelo de Theia actualmente recorre el enrejado utilizando un algoritmo ingenuo. Este algoritmo recorre cada uno de los triángulos sin importar si estos afectan o no el análisis de la escena que se está haciendo. Este proceso se puede mejorar considerablemente si se utiliza un esquema diferente de segmentación y recorrido de las primitivas. Los esquemas de segmentación tridimensional son una parte medular de los sistemas de graficación por trazado de rayos (el caso de Theia), los cuales se pueden aplicar como solución al problema antes citado. Estos esquemas crean una subdivisión espacial de una escena tridimensional, con lo cual se reduce el tiempo requerido para realizar los análisis de intersección de rayos (que permiten realizar las proyecciones a 2D) dado que se crea una estructura que permite recorrer los objetos en la escena de manera más eficiente (Foley et al., 1993). Actualmente el GPU Theia no cuenta con un sistema de segmentación tridimensional, afectando esto negativamente su rendimiento. En el presente proyecto se propone una descripción arquitectónica de los módulos dedicados a la partición tridimensional. 114 2 1 Introducción 1.2 Justificación En los últimos veinte años, el área de los gráficos por computador ha evolucionado desde un nicho netamente teórico o académico hasta convertirse en un negocio de gran tamaño e importancia. (Wald, 2004). En el ámbito de electrónica del consumidor ha llegado hasta el punto en que es inconcebible que cualquier dispositivo electrónico que tenga que interactuar con humanos no tenga una interfaz gráfica amigable y atractiva. Pero, estas características han ido más allá de este mercado, y han incursionado en el mundo empresarial, donde ahora también se les solicita a los productores de equipo electrónico utilizar gráficos en la presentación de la información, donde antes se utilizaba comandos en terminal, y pantallas monocromáticas. El campo de los gráficos por computador abarca diferentes áreas de la industria, educación, gobierno y del negocio. Entre las cuales se pueden destacar las siguientes: interfaces de usuario, cartografía, medicina, diseño asistido por computadores (CAD, por sus siglas en inglés), sistemas multimedia, simulaciones, realidad virtual, etc. (Foley et al., 1993) La generación de imagenes por computador es ahora un requisito, donde antes fue un valor agregado, ahora forman parte de la vida normal del usuario. Este medio de interacción ha cambiado la forma en que se trabaja con el computador, obteniéndose en muchos casos un proceso más fácil y eficiente. Esto se ve reflejado en entornos tan sencillos como servicio al cliente hasta llegar a la medicina, donde se requiere equipo preciso y exacto en la representación de información y modelos. Las mismas empresas y corporaciones han explotado esta necesidad en la sociedad, hasta en aparatos que en su definición realmente no necesitan ser capaces de reproducir y crear gráficos en tres dimensiones. Esto con el objetivo de agregar más líneas a las especificaciones técnicas. Aunado a lo expresado anteriormente genera una necesidad de tener hardware especializado al procesamiento de gráficos, más específicamente lo que sería un GPU, dado que de no ser lo suficientemente rápido o eficiente, va a crear dispositivos que en lugar de mejorar la calidad de vida del usuario, van a crear molestias en el mismo o pueden hasta en casos muy críticos hacer que sistemas fallen o se tomen malas decisiones. Existen múltiples formas de incrementar el rendimiento y reducir el tiempo de ejecución de los procesos dentro de un GPU. Para el caso del GPU Theia, uno de los puntos críticos en la generación de las imagenes es iterar sobre las primitivas que modelan la escena tridimensional. Al proyectar el color de cada pixel en la pantalla se requiere procesar toda la lista de primitivas, por lo que de existir un método que permitiera reducir la cantidad de primitivas visitadas por cada pixel, se disminuiría considerablemente el tiempo de ejecución, lo que mejoraría el rendimiento general del sistema.15 1.3. Alcance del proyecto Alcance del proyecto El presente proyecto se limitó a la descripción arquitectónica de módulos de procesamiento adicionales. Para la definición de los módulos se tomó en cuenta únicamente aspectos de rendimiento, en términos de la duración de la renderización de una escena, y la capacidad de este modelo de acoplarse a la estructura del GPU Theia. No se tomaron en cuenta aspectos de consumo de potencia, área, ni ningún aspecto físico que limitase su funcionamiento. Además por las características de Theia, se limitará el uso de las estructuras para escenas estáticas, es decir, donde las primitivas no van a cambiar de posición. Con lo cual no es necesario actualizar las estructuras luego de haber sido creadas. 1.4 Objetivos Objetivo general Proponer una descripción arquitectónica de módulos de procesamiento adicionales dedicados a la segmentación espacial tridimensional, los cuales se agregarán al esquema actual del proyecto GPU Theia, con el fin de acelerar la generación de imagenes tridimensionales. Objetivos específicos Para el desarrollo de este proyecto se establecieron los siguientes objetivos: Investigar las estructuras de datos y algoritmos comúnmente utilizadas en la generación de particiones tridimensionales en el área de gráficos por computadora. Proponer una descripción arquitectónica de módulos de procesamiento adicionales para la segmentación tridimensional, con el fin de minimizar el espacio de búsqueda para las operaciones de intersección entre los rayos y las primitivas de la escena. La propuesta se tiene que acoplar, con pocas modificaciones, al esquema actual del GPU Theia. Comparar el desempeño actual del sistema de intersección de rayos y primitivas contra el esquema propuesto. 1.5 Metodología El desarrollo del trabajo incluyó los siguientes pasos y procedimientos, listados en secuencia:16 4 1 Introducción 1. Se realizó una investigación bibliográfica del estado de la cuestión en el área de la segmentación espacial tridimensional, en lo que respecta al procesamiento de gráficos. Se enfocó en distintos medios bibliográficos, principalmente en artículos (tanto técnicos como de conferencias) y en tesis de grado y de posgrado. 2. A partir de la información obtenida en la primera sección se procedió a definir los parámetros deseados a nivel global para el circuito de segmentación espacial tridimensional. Estos parámetros incluyeron aspectos tales como factibilidad de implementación y apego a las necesidades del sistema (GPU Theia). Además se definieron aspectos específicos cuantizables que permitieran comparar las distintas estructuras de datos. 3. A partir de la investigación y de los parámetros definidos se escogió un grupo de todas las estructuras investigadas, las cuales se ajustan a las características inherentes del GPU Theia. Este grupo de estructuras fue simulado y comparado en la manera especificada durante el segundo paso de la metodología. Las simulaciones se hicieron en un lenguaje de alto nivel. C++ para modelar el rendimiento de las estructuras, y python para desplegar ciertos valores de estos resultados de manera gráfica. 4. A partir de los resultados se procedió a elegir la mejor arquitectura, tomando en cuenta los pesos de cada aspecto específico definido durante la investigación bibliográfica y por el conocimiento del GPU Theia dado por las especificaciones técnicas del mismo.17 2 Antecedentes 2.1 Unidad de Procesamiento de Gráficos (GPU) La definición original de un GPU (Unidad de gráficos por computador, por sus siglas en inglés) es un hardware dedicado, que es responsable de transformar datos en una imagen de dos dimensiones (2D) formado por pixeles. (Dinh, 2008) Pero, en los últimos años sus usos se han ampliado para realizar procesos de propósito general en computación. Estos cambios se deben a la evolución de los GPUs en los aspectos de: programabilidad, precisión y rendimiento. (Harris, 2005). Actualmente estos cambios han permitido que los GPU puedan ser coprocesadores en un sistema de procesamiento heterogéneo, es decir, donde las cargas de procesamiento se distribuyen en distintas módulos que no es solo el procesador, siendo en este caso uno de los módulos de procesamiento el GPU. (Hennessy y Patterson, 2012) Es necesario dentro del contexto del presente proyecto comprender las distintas secciones de la arquitectura Theia y así lograr definir con exactitud las posiciones dentro del esquema Theia en las cuales se van a introducir nuevos módulos de lógica. Además, es necesario entender el proceso de generación de imagenes para determinar cómo afecta realmente agregar un proceso de segmentación tridimensional dentro del algoritmo de renderización. A continuación se explican estos dos tópicos. Arquitectura del GPU Theia La arquitectura del GPU theia se puede definir como un GPU de código abierto, enfocado a procesamiento vectorial. Theia posee múltiples hilos de hardware, siendo un µp multi-núcleo con ejecución fuera de orden. (Valverde, 2011) Para comprender a cabalidad la explicación dada anteriormente es necesario definir una serie de términos: Código abierto: se define como aquel hardware o software que puede ser distribuido y desarrollado libremente.(princeton, 2013) Procesamiento Vectorial: las arquitecturas vectoriales se caracterizan por operar sobre grupos de elementos de datos dispersos en una memoria, colocarlos en registros largos y secuenciales. Una instrucción única opera 518 6 2 Antecedentes sobre vectores de datos, que resulta en docenas de operación registroregistro en elementos de datos independientes. (Hennessy y Patterson, 2012) Múltiples hilos: se conoce en inglés como multi-threading. Hennessy y Patterson (2012) lo expone como un método para reducir el tiempo en que el procesador esta estático a causa de accesos a memoria lentos. Se crean hilos de ejecución, donde cada hilo se puede definir como la secuencia más pequeñas de instrucciones que se puede manejar de manera independiente, y estos se intercalan en ejecución para ocultar la latencia del sistema en el acceso a memoria. Ejecución fuera de orden: son aquellos procesadores que pueden alterar el orden de ejecución de las instrucciones en comparación con el establecido en el código de la aplicación (por la distribución lógica en memoria). Se utiliza con el fin de superar dependencias y riesgos de hardware (hardware hazard), y reducir el tiempo en que la máquina esta estática (stall). (Hennessy y Patterson, 2012) Es importante destacar que la arquitectura de Theia varía respecto al esquema comúnmente aceptado de un GPU, dado que es un híbrido entre un procesador vectorial y un GPU, lo cual se va observar con mayor detalle más adelante en la presente sección. Por ejemplo si se compara un procesador SIMD (single-instruction multiple-data), el cual permite emitir una única instrucción que opera sobre datos distintos y a partir del cual se conforman los GPU y la configuración de Theia, se presenta que los primeros tienen varios contadores de programas, no tienen un procesador de control, sino un planificador de hilos SIMD, y otro grupo de variaciones. Estas diferencias hacen que el GPU Theia presente un enfoque distinto al tradicional, lo cual crea un espacio para realizar distintos tipos de pruebas y verificaciones útiles en el ambiente académico. El diagrama de bloques del GPU Theia se puede observar en la figura 2.1, donde se resaltan los siguientes módulos principales: Memoria del sistema. Unidad de control de memoria (MCU). Procesador de control (CP). Procesador vectorial (VP). Memoria de Texturas (TMEM). Memoria de Salida (OMEM).19 2.1. Unidad de Procesamiento de Gráficos (GPU) 7 Figura 2.1: Diagrama de bloques del GPU Theia Obtenida de Valverde (2012) A continuación se procederá a explicar qué son cada una y cual es su uso dentro de la arquitectura Theia. Las siguientes definiciones y especificaciones se obtuvieron de Valverde (2012), en el texto Theia architecture specification, que es la descripción oficial del hardware Theia. Memoria del sistema Es la memoria principal del sistema y es externa al GPU en sí. Su estructura básica es una memoria de acceso aleatorio (RAM) que se utiliza como contenedor para almacenar distintas características de la escena como son las texturas, los códigos, la geometría, las primitivas, etc. Desde la perspectiva del GPU esta memoria es de solo lectura, manejada únicamente por la MCU (que se explicará más adelante).20 8 2 Antecedentes Unidad de control de memoria (MCU) La MCU es la unidad de control que se encarga de manejar las lecturas hacia la memoria principal, estos accesos son solicitados por el CP. De existir más de una solicitud desde el CP esta es almacenada en una cola. Esta unidad no puede escribir dentro de la memoria externa. Procesador de control (CP) El CP es un procesador en-orden (in-order) con un pipeline de tres etapas. El CP es una unidad programable sencilla que permite controlar, a partir de subrutinas, la distribución de trabajo en el GPU, así como la asignación de recursos. Esto crea un ambiente muy flexible para definir distintos algoritmos de distribución de carga, dependiendo del tipo de acción que esté realizando el GPU Theia. Además que permite realizar modificaciones y optimizaciones al sistema sin la necesidad de alterar el hardware del GPU. Este módulo es responsable de controlar y monitorear las acciones que se están ejecutando. Más específicamente se puede enumerar las siguientes acciones: 1. Controlar los accesos a la memoria del sistema, el CP envía una señal asincrónica al MCU, el cual copia tanto datos como instrucciones a una o más unidades de procesamiento vectorial (VP). Los bits se copian ya sea a la memoria de Texturas o a las memorias internas de cada VP. Luego de enviar la señal, el CP puede continuar realizando otras instrucciones, aunque el MCU no haya terminado la transferencia de información. 2. Enviar solicitudes de acción a uno o más VP utilizando un bus especial para ellos. La señal más importante es la señal de inicio y de suspensión de ejecución en los VP. Una característica adicional que existe es la de mensajería (mail-boxing), la cual permite enviar información entre el CP y los VPs durante la ejecución de código. Procesador Vectorial (VP) Los VPs son procesadores vectoriales multi-hilo y fuera de orden con hardware especializado en aritmética de punto fijo y otros circuito enfocados en acelerar operaciones 3D. Se encarga de realizar las operaciones lógico-aritméticas, donde cada instrucción comúnmente se ejecuta en un ciclo de reloj. Cada VP combina las características de un procesador vectorial con las de un procesador multi-hilo fuera-de-orden (out-of-order). Los VP tienen paralelismo a nivel de datos y paralelismo a nivel de instrucciones.21 2.1. Unidad de Procesamiento de Gráficos (GPU) 9 El paralelismo a nivel de datos se produce teniendo tres líneas de datos separadas. El paralelismo a nivel de instrucciones se obtiene a partir de una unidad de emisión en-orden (in-order) con pipeline y de una unidad de ejecución fuera-de-orden (out-of-order). Para implementar la ejecución fuera-deorden se utiliza el algoritmo de Tomasulo, el cual se sale del contexto del presente proyecto, pero se puede hacer referencia a Tomasulo (1967) para una descripción del mismo. Como se menciono anteriormente, el procesamiento vectorial se caracteriza por las operaciones vectoriales, donde cada instrucción puede operar sobre vectores de datos. Los elementos son traídos de memoria consecutivamente por la unidad de ejecución de la misma manera que en un pipeline. Cada VP tiene registros de gran tamaño donde se puede garantizar que los datos puedan ser colocados en posiciones de memoria consecutivas, para así reducir ciertos tiempos de acceso. Un procesador vectorial canónico estaría limitado por dependencias y riesgos de hardware. Las dependencias, en este contexto, ocurre cuando un vector de datos depende de otro vector, con lo cual no se puede realizar la operación deseada, hasta que se obtenga el resultado del vector anterior. Los riesgos de hardware son aquellas situaciones en que no hay suficientes unidades de ejecución para ejecutar todas las instrucciones, por lo cual se realiza una detención (stall) de la ejecución de las siguientes instrucciones del procesador. Para superar estas dos limitantes los procesadores vectoriales son combinados en una ejecución fuera de orden, y esta es una de las características novedosas respecto a otros sistemas GPU comúnmente utilizados. Además se utiliza encadenamiento de datos (chaining) para los vectores de operaciones, el cual es un proceso donde se puede enviar los resultados de un VP como una entrada en una operación a un VP distinto. Se utiliza a su vez múltiples hilos de ejecución utilizando multi-hilo simultaneo (SMT), para mayor información acerca de este hacer referencia al texto de Hennessy y Patterson (2012). En la figura 2.2 se observa el diagrama de flujos del procesador vectorial (VP), el cual se encuentra separado en cuatro secciones fundamentales: unidad de control (CTRL), interfaz de entrada/salida (IO), memoria (MEM) y unidad de ejecución (EXE). La CTRL es la encargada de manejar los comandos provenientes del CP y garantiza que reaccione de la manera correspondiente. La IO es un sistema de comunicación basado en el protocolo abierto Wishbone y permite controlar el flujo de información hacia o desde el VP. Además incluye un modulo de mensajería (mailbox) equivalente al definido dentro del CP. La MEM incluye una RAM para almacenar las instrucciones que tiene que ejecutar el VP, así como el bloque de registros de usos múltiples.22 10 2 Antecedentes Figura 2.2: Diagrama de bloques del GPU Theia Obtenida de Valverde (2012) El bloque más complicado dentro del VP es la EXE (también conocido como VP-core), el cual se encarga de realizar todas las operaciones dentro del VP. Es un procesador en sí mismo, dado que se conforma por: una memoria de instrucción, una unidad de emisión (issue unit), una unidad de modificación de fuente (SMU), una serie de unidades aritmético-lógicas y un grupo de registros. La unidad de emisión de la EXE se encarga de escoger la unidad aritméticológico correspondiente, de estar libre, pero de haber un riesgo estructural la EXE se detiene (stall) hasta que se libere la unidad deseada. Las unidades lógico-aritméticas que tiene disponible cada EXE son: Dos unidades de suma. Una unidad de división. Una unidad de raíz cuadrada (implementada mediante una LUT). Una unidad lógica (aquella que realiza operaciones binarias, tales como O, Y, NO, etc.) Una unidad de entrada/salida (I/O) Este es el módulo más importante dentro de todo el GPU Theia.23 2.2. Formación de imagenes 11 Memoria de Textura (TM) La memoria de textura (TM) es una memoria externa al GPU, de la cual los VP pueden leer la información de texturas. Desde la perspectiva tanto del GPU y los VP es una memoria de solo lectura (read-only). Esta memoria es implementada como una serie de RAM intercaladas dividida en bancos de memoria. El acceso a esta memoria es mediante una interconexión del tipo crossbar. La duración de las lecturas a la memoria de textura depende de la congestión en el crossbar de la TM. Memoria de salida (OM) Es una memoria con un ancho de palabra de 32 bit, que fue diseñada para tener como contenidos los colores de los pixeles en RGB, es decir, 8 bits de color rojo, 8 bits de color verde, 8 bits de color azul y 8 bits de trasparencia. Siendo esta una de las representaciones más conocidas en la representación de imagenes como pixeles. La OM puede ser accesada por cualquiera de los hilos de ejecución de los VP como una memoria de solo escritura, siendo la duración de este proceso un ciclo de reloj. 2.2 Formación de imagenes Pipeline para generación de imagenes Actualmente cada computador tiene un pipeline de gráficos 3D con una gran capacidad. Es un subsistema especial de software/hardware que se encarga de dibujar eficientemente primitivas 3D en perspectiva. Comúnmente estos sistemas están optimizados para procesar triángulos 3D con vértices comunes. Las operaciones básicas en este pipeline son mapear vértices 3D a una imagen en 2D y sombrear los triángulos de manera que parezca lo más realistas posible, y en la posición correcta. (Shirley y Marschner, 2009) Según Dinh (2008) la generación de imagenes se puede separar en un pipeline de tres etapas: 1. Etapa de Aplicación. 2. Etapa geométrica. 3. Etapa de rasterización. Durand y Cutler (2003a) discierne en la cantidad de etapas requeridas para modelar el pipeline de gráficos, donde este lo representa mediante siete etapas.24 12 2 Antecedentes Pero, en general, la única diferencia es en realidad que las sub-etapas de Dinh son separadas para hacer énfasis en ciertas etapas. A continuación se procede a explicar el proceso según Dinh, pero haciendo contraste con lo expuesto por Durand y Cutler. No es necesario el conocimiento de la etapa de aplicación para el desarrollo del presente proyecto por lo que se iniciará a partir de la etapa geométrica. Lo único que se requiere saber es que como entrada a la siguiente etapa se recibe un modelo geométrico, el cual define los objetos, superficies y la geometría de la fuente de luz, un modelo de luz, el cual modela las propiedades de luz del objeto y las interacciones con este, un punto de vista y la malla de pixeles a la cual va a ser mapeado. Etapa geométrica Esta etapa es equivalente a la de transformación e iluminación de Durand y Cutler. Para realizar los análisis en esta etapa, una posibilidad es utilizar sistemas coordenados en cuatro dimensiones, conocidas como sistemas homogéneos, para simplificar las transformaciones y las operaciones. Esto último presenta la sección de transformación de la etapa geométrica. A su vez para realizar las transformaciones se utilizan sistemas baricéntricos, donde cada objeto tiene su propio sistema coordenado, es decir, el posicionamiento del origen es variable, facilitando así las transformaciones de traslación, rotación y escalamiento. En la sección de iluminación, se utilizan los vectores normales en las superficies en combinación con la posición de la cámara y los puntos de iluminación para generar las propiedades de luz de cada uno de los vértices y superficies en la escena. La siguiente sección es realizar una transformación al espacio de visión, siendo este el mismo nombre que utiliza Durand y Cutler para su descripción. Esta sección lo que hace es mapear del espacio de la escena al espacio de la visión. Además las posiciones de visión son transformadas a la dirección original y orientadas según algún eje. Una posibilidad es transformar la escena de manera que la cámara quede en el origen del espacio. A partir de alinear los ejes coordenados, se procede a definir un volumen de visión, el cual permite analizar que objetos tienen que ser renderizados (siguiente etapa). Ya conociendo los objetos que afectan el actual punto de visión se procede a ensamblarlos en las primitivas, que para el manejo del presente proyecto son triángulos. Luego se realiza una normalización, donde todas las primitivas se colocan dentro de un cubo de tamaño unitario, escalándose las primitivas de manera correspondiente. Esto con el fin de facilitar la transformación a 2D (proyección al espacio de la pantalla, según Durand y Cutler), siendo este el último paso de la etapa geométrica.25 2.2. Formación de imagenes 13 Figura 2.3: Scan Conversion (Rasterización) Obtenida de Durand y Cutler (2003a) Etapa de rasterización En esta etapa se recorre la imagen en 2D para convertirlos en pixeles, esto se realiza definiendo posibles candidatos, conocidos como fragmentos, donde además se procede a interpolar valores tales como: color, profundidad, etc. Esto se debe a que si el fragmento no es un vértice en sí mismo, es necesario interpolar los valores a partir de los tres vértices del triángulo del cual este punto forma parte. En la figura 2.3, se puede observar una imagen durante el proceso de rasterización, donde todavía no se ha asignado un color específico a cada pixel, pero intuitivamente a partir del porcentaje de color en el pixel, se pude definir el color de cada uno. Este proceso en un computador es más complicado y necesita algoritmos tal como el de Bressenham para líneas y círculos. En la última sección cada pixel recuerda cual es el objeto más cercano (prueba de visibilidad según Durand y Cutler), dado que este es el que va a tener un mayor aporte en los colores y la transparencia del pixel. Existen muchas pruebas para verificar visibilidad, que no se van a explicar en el presente texto. En esta etapa también se toman en cuentan texturas, colores y efectos adicionales de luz que se quieran agregar.26 14 2 Antecedentes Ray-casting Realizar la renderización de una escena es una de las secciones básicos de los gráficos por computador tal y como se observo en la sección 2.2, esta es la etapa en que se toman los componentes u objetos de una escena en 3D para producir imagenes en 2D que muestra los objetos desde un punto de vista dado. Normalmente se tomará como entrada en esta etapa un grupo de objetos y la salida será un arreglo de píxeles. Shirley y Marschner (2009). Existen dos métodos básicos, dependiendo como se considera el efecto de cada objeto en el pixel: Renderización por orden de objeto se analiza el efecto de cada objeto independiente, y se analiza cada uno de los pixeles que este modifica o define en la imagen. Renderización por orden de imagen es el inverso al anterior, donde se analiza cada pixel por separado y por cada uno se busca todos los objetos que alteran sus valores. Ya conociendo las aclaraciones anteriores, es posible definir lo que es el Ray Casting, este es un algoritmo para realizar el rendering de escenas 3D, utilizando un método de orden por imagenes. Para comprender este algoritmo se puede utilizar un pseudocódigo simple presentado por Durand y Cutler (2003b), agregando una última línea para completar el funcionamiento del algoritmo: 1: for all pixeles do 2: Construya un rayo desde el ojo. 3: for all objetos en la escena do 4: if Hay interseccion then 5: if Objeto es más cercano que la interseccion anterior then 6: Almacene el objeto como el mas cercano 7: end if 8: end if 9: end for 10: end for En la línea 1 del pseudo-código se define que las operaciones subsiguientes se realizarán sobre cada uno de los pixeles, esta afirmación va de acuerdo a la definición de una renderización por orden de imagen. En la línea 2 se construye un rayo desde el ojo, que en la terminología utilizada hasta la presente sección haría referencia al punto de vista, desde el cual se va a hacer la renderización. En gráficos por computador, la construcción del rayo es una abstracción matemática, es decir, se define como una función que modela el rayo con inicio en el punto de visión, pasando por el pixel de la27 2.2. Formación de imagenes 15 Figura 2.4: Creación de rayos Obtenida de Humphreys (2004) actual iteración. Esta función es expresada en forma paramétrica por Shirley y Marschner (2009) de la forma observada en la ecuación (2.1) p(t) = e + t(s e), (2.1) donde e, es el punto de origen del rayo, y (s e) es la dirección del rayo. Es importante destacar que para términos del presente proyecto e, sería el punto de vista de la escena y s sería el pixel correspondiente a la presente iteración, esto de utilizar sistema coordenado adecuado. Esto se puede demostrar fácilmente dado que al ser una representación paramétrica de 3 dimensiones (x, y, z) cada una de las dimensiones representa una recta en la variable independiente t, donde el punto de inicio de cada recta es el componente correspondiente del punto de vista, dado que de este punto se envían todos los rayos, y el otro valor a definir es la pendiente. Suponiendo que la variable independiente esté normalizada (que del tiempo 0 al 1, avance del punto de vista al pixel correspondiente), la pendiente se define como la diferencia entre un punto que sea parte de la recta y el inicio, el punto que resulta ideal para modelar todos los rayos es un punto en el arreglo de pixeles, dado que al ser una renderización por orden de imagen, todos los rayos pasan siempre por algún pixel. Por lo que en cada iteración utilizando la ecuación (2.1) se crea el rayo correspondiente al pixel actual. Una explicación gráfica de la generación del28 16 2 Antecedentes rayo se puede observar en la figura 2.4 Las tres líneas siguientes conforman un bloque funcional, por lo que se procede a explicarlas en conjunto. En la línea 3 indica que para el rayo creado anteriormente se va a realizar un análisis sobre cada uno de los objetos de la escena, en la línea 4 se verifica la intersección del rayo con el presente objeto, y de existir, en la línea 5 se comprueba si este objeto es más cercano a cualquier otro que ya haya sido analizado con anterioridad, y se actualiza este valor de cumplirse con la condición. De los tres pasos anteriores se podría considerar innecesario tener que analizar cada uno de los objetos, dado que no todos los objetos van a tener una intersección con el rayo. Existen gran cantidad de investigaciones enfocadas en disminuir esta sección del pseudocódigo, las cuales se van a exponer en la sección 2.3 y donde se va explicar más profundamente las justificaciones de los mismos. Se puede hacer un análisis intuitivo de la reducción de procesamiento, suponiendo que los objetos no se encuentran alineados al rayo enviado, tal y como se muestra en la figura 2.5, existe una baja probabilidad de que el rayo atraviese todos los objetos, por ejemplo en la figura 2.5 cada rayo interseca únicamente a uno de los objetos. Se intenta definir algún tipo de parámetro que permita descartar de antemano ciertos objetos, de los cuales se tiene certeza no van a definir el color del presente pixel, con lo cual se disminuye la cantidad de iteraciones del lazo interno del pseudo-código. Este es el bloque del ray- Casting en la cual se va a enfocar el presente proyecto, con el fin de reducir el tiempo de las iteraciones del GPU Theia. Por último, en la línea 6, a partir del objeto encontrado (de existir) se obtiene la normal respecto a su superficie, y en conjunto con las superficies de iluminación de la escena, se obtiene el color que define el pixel de la actual iteración. De manera iterativa (o paralela, como se hace en los GPU) se repiten los pasos anteriores para cada uno de los pixeles de la pantalla. 2.3 Segmentación Espacial Doyle et al. (2012) expone que uno de los métodos más efectivos para acelerar los algoritmos de ray tracing (ray casting, para el caso de Theia) son las estructuras de segmentación espacial, y pone como ejemplos los kd-trees y los Bounding Volume Hierarchies (BVH), los cuales se van a exponer en las secciones subsiguientes. Como se presento en la sección 2.2 y como se resume en Woop et al. (2005) se requieren de este tipo de estructuras de indexación espacial para encontrar el subgrupo respectivo de primitivas que realmente van a afectar el cálculo del presente pixel, siendo en este caso la primitiva triángulos. Se busca reducir29 2.3. Segmentación Espacial 17 Figura 2.5: Escena Obtenida de Humphreys (2004)30 18 2 Antecedentes tanto el tiempo requerido para obtener triángulo, como la cantidad de primitivas que se requieren analizar para hacer la renderización de la escena, dado que las operaciones de intersección de primitivas, pueden llegar a consumir muchos recursos dentro del GPU. En las siguientes subsecciones se presentan las estructuras de datos más comúnmente utilizadas para almacenar las primitivas en los algoritmos de ray-casting y ray-tracing, que para la etapa de recorrido son equivalentes. Los cuales van a ser el punto de partido teórico para la implementación de los módulos que se exponen como soluciones a los objetivos del presente proyecto. Bounding Volume (BV) El objetivo de cualquiera de las estructuras de datos presentadas en esta sección es reducir el espacio de búsqueda en el marco de la escena, o de acelerar el proceso de búsqueda. La estructura de datos conocida como volumen delimitante o envolvente (BV, por sus siglas en inglés Bounding Volume) parte de la premisa de que hay objetos que son más demandantes, a nivel de recursos, al ejecutar un análisis de intersección con un rayo.(havran, 2000) Por lo que se propone envolver todos los objetos en una escena por poliedros con una forma más sencilla de analizar, y que dada la homogeneidad de los nuevos contenedores se puede optimizar el algoritmo de recorrido y de intersección. Rubin y Whitted (1980) propone encerrar los objetos con paralelepípedos y con esferas, dado que para ambos tipos de estructuras existen ecuaciones matemáticas explícitas, que permiten obtener rápidamente la intersección. De existir una intersección con el volumen envolvente es muy probable que exista una intersección con el objeto interno. Un ejemplo de una envolvente se muestra en la figura 2.6, donde la envolvente es una esfera y el objeto en sí es un paralelepípedo, pero el objeto podría ser un poliedro más complicado, no tiene ninguna limitante. Otra forma de definir la envolvente es utilizando un algoritmo conocido como convex Hull, donde se delimita a todos los puntos que forman la escena con el poliedro de menor tamaño, al cual se le pueden agregar limitantes, para mantener una estructura sencilla de intersecar. Pero, tal y como lo expresa Stürzlinger (2007) es de poco uso, dado que se requiere mucho espacio para su almacenamiento y no existe un algoritmo eficiente de intersección para los mismos. Se tiene que buscar un balance entre las dos principales propiedades buscadas: 1. Debe existir una alta probabilidad de que si interseca el volumen envolvente, también interseque el objeto en sí. Esto puede llegar a ser complicado en objetos cóncavos. Esta propiedad se puede solucionar op-31 2.3. Segmentación Espacial 19 Figura 2.6: Volumen envolvente (esfera) Obtenida de Chang et al. (2010) timizando el volumen del objeto. A menor volumen menor probabilidad de fallo. 2. Se debe mantener la complejidad de la intersección entre el rayo y el volumen envolvente bajo. La idea básica detrás de esta estructura, es realizar primero una prueba sencilla a los contenedores, antes de realizar una prueba más exhaustiva al objeto en sí. (Stürzlinger, 2007) El beneficio de este método es que facilita descartar los objetos que no aplican en la generación del pixel que se está analizando. Esto se debe a que si un rayo no interseca a la envolvente, no puede intersecar al objeto que esta contiene, con lo que se reduce considerablemente el tiempo al no tener que analizar el objeto en sí. A pesar de esta modificación no se logra reducir la cantidad de objetos que se están procesando, dado que existe todavía la necesidad de iterar sobre todas las envolventes en la escena. Una posible optimización de este código se presenta en la jerarquía de volúmenes envolventes que se presenta en la sección siguiente. Bounding Volume Hierarchies (BVH) Havran (2000) presenta la extensión natural de los BV, conocidas como jerarquías de volúmenes envolventes (BVH, por sus siglas en inglés), los cuales toman como base los BV, pero agregan una jerarquía de árboles. La justificación del uso de estas jerarquías se debe a la coherencia inherente tanto a la imagen y al objeto. Donde la coherencia se utiliza para describir hasta que punto una escena o imagen es localmente constante. (Weghorst et32 20 2 Antecedentes Figura 2.7: Jerarquía de volúmenes envolventes Obtenida de wikipedia.org al., 1984). Existe un tipo especial de coherencia enfocada al objeto, donde las características constantes hacen referencias a la relación entre el objeto y el medio en el que se encuentra modelado. Rubin y Whitted (1980) presentó una jerarquía de volúmenes, en la cual los primeros niveles de los árboles representan subespacios ortogonales alineados a los ejes, y el último nivel representa el volumen envolvente final que es un paralelepípedo con orientación no restringida. Lo cual permite que en cada paso en que se recorre el árbol, las comparaciones sean con cajas con formas sencillas, lo cual reduce el tiempo de recorrido. Clark (1976) propuso a su vez una versión similar, en la cual cada nivel de la jerarquía consiste en volúmenes envolventes lo cuales envuelven los niveles inferiores, donde las hojas si contienen a los objetos completos, y no a los volúmenes envolventes. Según Weghorst et al. (1984) se pueden agrupar grupos de objetos, que por estar muy cercanos uno con el otro se pueden juntar en un mismo BV. Además se crean cúmulos (clusters) de otros cúmulos, que hacen referencia a los niveles superiores del árbol. Una estructura de este tipo permite superar una de las barreras que se presentaron en los BV, y es que ya no es necesario investigar cada uno de los objetos en la escena, dado que se inicia en el nodo raíz del árbol y luego desciende recursivamente en la jerarquía, solo en las ramas donde hay intersección. Un ejemplo se observa en la figura 2.7. En cada uno de los cúmulos (clusters) solo tienen que agruparse objetos que están espacialmente cerca. Además se tiene que tomar en cuenta la altura del árbol, dado que si hay demasiados nodos internos se pierde el objetivo de los BVH de acelerar el proceso de renderización. Weghorst et al. (1984) afirma que la asignación de la agrupación o definición de un objeto es básicamente la utilizada durante el proceso de modelo. Con la única diferencia que los cúmulos (clusters) son removidos de la jerarquía. Esta asignación es suficiente para mejorar el tiempo de ejecución. Rubin33 2.3. Segmentación Espacial 21 y Whitted (1980) presenta una segunda posibilidad para automatizar el proceso de creación de las jerarquías, y es utilizar un histograma tridimensional, eligiendo los picos como cúmulos, dado que estos representan la coherencia del objeto. En general, esta estructura está considerada entre las más veloces y con menor consumo de memoria, al hacer referencia a cada primitiva una única vez. (Dammertz y Keller, 2008) Pero, existe una limitante en escenas vacías y con triángulos que no se encuentran alineados a los ejes que definen los volúmenes envolentes, dado que crean espacio vacío en el volumen, creando muchos aciertos de rayos en el volumen, que no los son con el objeto inscrito. Para solucionarlo Dammertz y Keller (2008) presenta una solución interesante de subdivisión de triángulos, para acomodarlos mejor a la geometría de la escena y de los BV. Para encontrar referencias más específicas para la formación y recorrido de la estructura se pueden utilizar los documentos de (Wald et al., 2007), (Goldsmith, 1987), (Smits, 2005), (Guttman, 1984), (Chen y Liu, 2007) y (Kay y Kajiya, 1986). La diferencia entre cada uno de estos autores es el tipo de volumen que utiliza para envolver los objetos, la estructura del árbol con la cual se almacenan los BV y la forma en que se realiza el recorrido de las estructuras. Pero, es importante destacar que es necesario construirlos de abajo para arriba y orientado a objetos. Una configuración que representa un gran avance es la presentada por Wald (2007), donde utiliza heurísticas de área de superficie (SAH, por sus siglas en inglés), los cuales dependiendo del área de cada volumen y el costo de recorrer cada unos, se toma la decisión acerca de la posición en que se subdivide el volumen. Esta representación puede ser utilizada hasta en sistemas dinámicos (escenas cambiantes), pero esto se sale del contexto del proyecto y de la condición actual del proyecto Theia. Uniform Grids Havran et al. (1998) expone que este fue uno de los primero métodos creados para realizar subdivisiones espaciales. Este algoritmo subdivide la escena en celdas de igual tamaño sin importar la distribución de los objetos en la escena. Es una generalización de los pixeles a 3D. A cada celda se le asigna una lista de los objetos que la intersecan. Esta estructura fue descrita por primera vez por Fujimoto (1986). Un ejemplo de esta estructura se observa en la figura 2.8 Thrane y Simonsen (2005) expone que el método utilizado para intersecar un rayo con la maya, es caminar sobre las celdas en el orden en que estas son perforadas. En cada celda visitada se analizan los triángulos que esta tenga asociados. Cuando se encuentra una intersección se finaliza el proceso, dado que este es la primitiva que va a definir el color, al ser el que está más cerca del34 22 2 Antecedentes Figura 2.8: Mallas uniformes Obtenida de Doggett (2011) punto de vista. Havran (2000) afirma que este método es similar al algoritmo de dibujo de líneas conocido como Bresenham extendido a 3D, pero para el caso de Uniform Grids es conocido como 3D-DDA, el nombre viene del inglés digital differential analyzer (DDA). Existen dos limitantes principales que se presentan al usar esta estructura: Dado que la malla uniforme es creada sin importar si existen objetos dentro de las celdas, se necesita una gran cantidad de espacio para almacenar la estructura. El rayo al recorrer la estructura va a pasar por muchas celdas vacías antes de realizar una intersección con algún objeto. Este tipo de estructura es de suma utilidad si la escena es homogénea, es decir, si los objetos están distribuidos de manera equidistante, con formas similares. Pero, no es recomendable para objetos distribuidos de manera no equilibrada en el espacio. (Sung y Shirley, 1994) Esto se debe principalmente a que la cantidad de memoria necesitada depende de la densidad de objetos y no del total de objetos.35 2.3. Segmentación Espacial 23 Cleary y Wyvill (1988) realiza un análisis para demostrar cuantas subdivisiones por eje generan un arreglo óptimo para recorrerlo. Para ello definen el valor dado en la ecuación 2.2 y la ecuación 2.3. k. = d celda 3 N, (2.2) t min. = const 3 N, (2.3) donde N es la cantidad de objetos y d celda representa la densidad de la celda. El valor de k determina la cantidad de subdivisiones y el valor de t min determina el tiempo total mínimo por rayo. A este método se le conoce como método homogéneo, porque no toma en cuenta la forma de la escena. (Havran, 2000) Normalmente se busca obtener una malla lo más cúbica posible, por lo cual se presentó otro método, que Havran (2000) definió como el método Woo. El cual lo que hace es una normalización utilizando el valor del lado más largo de la escena (ya sea x, y ó z) y un método similar al homogéneo. Se definen tres variables, y la subdivisión en cada uno de los ejes. Todo se muestra en la ecuación 2.5 c = MAX(x, y, z), n r = N d celda, u = 3 d celda n r (2.4) x N x = MAX(1, u c ), N y y = MAX(1, u c ), N z z = MAX(1, ), (2.5) u c Amanatides y Woo (1987) presenta un algoritmo que mejora el recorrido de este tipo de estructura, dado que no se enfoca en el movimiento en un solo eje, como el algoritmo expuesto anteriormente, sino que puede utilizar cualquiera de los tres ejes como base para definir el movimiento en las cajas. Además agrega un método para evitar intersección con el mismo objeto en varias celdas, siendo este un suceso común dado que un objeto puede llegar a estar en varias celdas al mismo tiempo. En general, los beneficios de esta estructura es que es fácil de construir y de mantener (para el caso de sistemas dinámicos). Pero, puede llegar a consumir mucho espacio de memoria y la definición de la cantidad de celdas no es siempre certera y óptima. Binary Spatial Partition (BSP) Havran et al. (1998) expone que esta clase de árbol es análogo a los árboles de búsqueda binaria, pero siendo este una extensión a un sistema en 3D. El proceso de creación de la estructura es recursivo, subdividiendo de manera sucesiva la escena en dos partes. El plano con el cual se subdivide la escena no tiene ninguna restricción, es decir, puede tener un vector normal en cualquier dirección. Existe muchas técnicas para definir la dirección de los planos, muchas de36 24 2 Antecedentes estos métodos agregan restricciones a las direcciones de los planos, creándose por ejemplo los rbsp y los kd-trees que van a ser expuestos en las siguientes subsecciones. Las tres variaciones principales de esta estructura son: alineados a polígono, alineado a ejes y no alineados. La diferencia radica en la forma en que se define el plano que separa la escena. Fuchs et al. (1980) presenta como solución al problema de superficies escondidas en gráficos por computador los BPS alineados a polígonos, pero la misma estructura puede ser aplicada a los algoritmos de Ray-Casting. La definición del plano se obtiene a partir de algún polígono de la escena (triángulo, para los efectos del presente proyecto), y se dirige en la misma dirección del polígono, es decir, se expande los bordes del triangulo hasta que parta la escena en dos secciones. Los triángulos se separan en dos subgrupos, dependiendo si se encuentran a la derecha (lado positivo según Fuchs et al. (1980)) o a la izquierda (lado negativo según Fuchs et al. (1980)). Las divisiones sucesivas de los subgrupos (positivos y negativos) van generando un árbol binario. Las divisiones finalizan hasta que solo haya subgrupos vacíos. Akenine-Möller et al. (2008) expresa que los BSP alineados a polígonos son particularmente útiles para la renderización estática o geometría rígida en un orden exacto. Fue utilizado en varios video juegos como Doom y Quake. Además agrega que cuando un triángulo es intersecado por alguno de los planos, este es dividido en dos polígonos, aumentando el consumo de memoria. Se recomienda a su vez crear árboles balanceados, dado que de otra manera el recorrido del árbol es muy ineficiente. Uno de los defectos de los BSP alineados a polígonos expuestos anteriormente, es que la elección de los triángulos es aleatoria. Una forma de solucionar esto es eligiendo el triángulo que subdivide menos triángulos. En general este tipo de BSP no es utilizado para el algoritmo de Ray-Tracing. Sung y Shirley (1994) presenta una comparación de esta estructura ante los expuestos anteriormente (Uniforms Gris y BVH), donde se demuestra que una correcta representación utilizando el algoritmo de Arvo (Arvo, 1988) es superior en al menos un 10 %. Sung y Shirley (1994) a su vez presenta una posible implementación del árbol realizando una subdivisión mediante un plano en la media espacial. Se calcula la media de todos los objetos en la presente iteración recursiva del algoritmo, y a partir de este valor se crea el plano en dirección de la misma. Un BSP alineado a ejes, es aquel en que los planos siempre son perpendiculares a los ejes, y dadas estas características son conocidos como BSP ortogonales o BSP rectilíneos. Una definición de estos árboles para un grupo S de primitivas es dada por Havran (2000): Cada nodo v en el árbol BSP está asociado a una caja envolvente (alineada con los ejes) AB(v), la cual se conoce como una celda. Cada nodo interior v del árbol es asignado un plano37 2.3. Segmentación Espacial 25 Figura 2.9: Árbol BSP Obtenida de Havran (2000) divisor H v que subdivide a AB(v) en dos celdas. Si se toma a H v + como el subespacio positivo y Hv como el espacio negativo. Con lo cual se obtiene que los hijos de v son AB(v) Hv y AB(v) H v +. El subárbol izquierdo de v es un árbol BSP con un grupo de objetos Sv = s Hv φ sɛs v con el subárbol derecho definido de manera similar. Cada hoja del nodo v E puede contener una lista de objetos S v E que interseca a la caja envolvente AV (V E ) asociada a v E, cuando la hoja contiene al menos un objeto, se le conoce como una hoja completa, de lo contrario se conoce como una hoja vacía. Un ejemplo de esta topología en 2D se observa en la figura 2.9. Es importante destacar que esta es la misma definición que la de un kd-tree. Esto se debe a que un kd-tree es un caso especial de un BSP. Un BSP no alineado es la versión más general de los BSP, dado que los planos no tienen ninguna restricción en su definición. Lo cual tal y como expone Ize et al. (2008) permite adecuar la estructura a la geometría de la escena. Esta es la menos difundida de las tres versiones del BSP, dado que en general, tiende a ser más complicada. La intersección de planos, en los no alineados, necesita utilizar producto punto y división, en comparación con la alineada a ejes que solo necesita resta y multiplicación. Donde la exactitud por punto flotante, hace que el recorrido puede hacer que el algoritmo tienda a ser inestable. Además dado que hay más posibilidades de posibles planos, la evaluación del mejor plano es más laboriosa. Todos estos argumentos son desmentidos por Ize et al. (2008), al realizar modificaciones al algoritmo comúnmente utilizado de BSP. Pero, para el caso de la estructura de Theia la unidad de división no es lo suficientemente precisa para mantener estabilidad en el algoritmo, por lo que no se ahondará más en este tipo de estructura. Además que tiene un consumo mayor de memoria. (Kammaje y Mora, 2007) Una posibilidad para mejorar la construcción de un BSP es utilizar heurís-38 26 2 Antecedentes Figura 2.10: Heurística de área de superficie Obtenida de Havran et al. (1998) ticas con base en una función de costo. Havran et al. (1998) propone minimizar una función de costo que tome en cuenta la relación entre las áreas superficiales del volumen original y los dos volúmenes hijos de este. El costo toma en cuenta la probabilidad de que un rayo acierte a un objeto contenido en otro depende de las superficies de los volúmenes. La probabilidad viene dada por la ecuación 2.6 P r(b A) = S B S A = 2(x B y B + x B z B + y B z B ) 2(x A y A + x A z A + y A z A ), (2.6) donde los valores con subíndices A hacen referencia al nodo padre, y los B al nodo hijo, esto se observa con mayor claridad en la figura 2.10 La ecuación 2.6 hace referencia a la probabilidad condicional y expresa un valor estimado en el tiempo requerido para recorrer el BSP. Para generar el BSP, se utiliza la función de costo 2.7 en todos los posibles planos candidatos, y se escoge el que presente el menor costo, lo que va a mejorar las iteraciones sobre el árbol. En la ecuación 2.7 lo que se hace es obtener un valor total de costo del nodo padre y de los dos hijos. donde: C nuevo = C P + C I + C D = T P + S I S n I j=1 T j + S D S n D k=1 T k + T T, (2.7) T T T P es el tiempo de duración de un paso en el recorrido es el tiempo de duración en un nodo padre.39 2.3. Segmentación Espacial 27 T j, T k S S D S I n I, n D es el tiempo de intersección entre el j-ésimo y el k-ésimo objeto. es el área de superficie del nodo dividido. es el área de superficie del nodo derecho. es el área de superficie del nodo izquierdo. es el número de objetos pertenecientes a la subcelda I y a la subcelda D, respectivamente. Havran et al. (1997) presenta todas las posibilidades en las cuales un rayo puede atravesar un nodo, a su vez presentando varias formas eficientes de recorrer el árbol. Kd-Trees Estas estructuras fueron presentadas por primeras vez por Bentley y Friedman (1979) y por Bentley (1975) como parte de una investigación para generar árboles binarios multidimensionales de búsqueda asociativa y búsqueda de rangos. A partir de estos estudios y de otros relacionados con superficies escondidas Fussel y Suramanian (1988) presenta una representación de los mismos para segmentación espacial en 3D (x, y y z). La elección de esta estructura se debe a que el movimiento del rayo en la escena es más que una búsqueda (como es definida en un árbol de búsqueda binario), es en realidad una búsqueda de rango, donde se trata de verificar por cuales nodos el rayo se propaga. (Wald, 2004) Con lo cual se presenta que un kd-tree, según Bentley, es una generalización en 3D de los árboles de búsqueda binarios, donde se divide de manera sucesiva (recursiva) la escena en dos secciones hasta que se llegue a una condición de parada, para así facilitar el recorrido de los objetos. Además de que permite reducir la cantidad de objetos analizados. En el texto de Fussel y Suramanian (1988) presenta las condiciones necesarias para la adopción de estos árboles y que sean capaces de soportar de manera eficiente el algoritmo de ray-tracing. A partir de estas consideraciones, se propone inicialmente utilizar planos ortogonales a los tres ejes cartesianos (x, y y z), dado que esto reduce considerablemente la intersección de rayos, dado que en los nodos internos (niveles superiores del árbol), la intersección se da con cubos, que tienen una forma explícita y cerrada de análisis. Además que la construcción ingenua de la estructura se facilita considerablemente. Esta restricción hace a su vez que los kd-trees sean menos flexibles para adaptarse a la escena, pero aún así, son más flexibles que las mallas uniformes y que los octrees (que se analizarán en la siguiente sección).40 28 2 Antecedentes A partir de lo expuesto anteriormente, la definición de un kd-tree es la misma que la descrita en la sección anterior para BSP alineados a los ejes. Esto se debe a que los kd-trees son un tipo especial de BSP, que se encuentra alineado a los ejes, comúnmente los cartesianos. Wald (2004) indica que ninguna de las denominaciones utilizadas para este tipo de estructura es completamente correcta, dado que los kd-trees hacen referencia a árboles multidimensionales, es decir, pueden ser más de 3D. En el presente proyecto y por ser la nomenclatura utilizada en la mayoría de los textos se utilizará kd-tree para denominar a los BSP alineados a los ejes. Dado que en esencia un kd-tree es un bsp, muchas de las características expuestas anteriormente se mantienen. Fussel y Suramanian (1988) presentaron inicialmente dos consideraciones básicas, que todavía se aplican a los kd-trees modernos para definir el plano a dividir. El cuál es el factor que va incidir en mayor manera en el tiempo de la construcción, y posteriormente en la duración del recorrido (traversal) de la estructura. La cantidad de objetos en los dos subespacios luego de una división tienen que tratar de mantenerse iguales. El número de objetos que se comparten entre subespacios (que fueron intersecados por el plano de división) tiene que mantenerse al mínimo. Aunque se hayan limitado los planos a ser paralelos con los ejes, siguen existiendo infinita cantidad de posibles planos, dado que los valores del eje no son discretos. Wald y Havran (2006) hace una recopilación de los algoritmos existentes para definir los posibles candidatos para los planos, y así la forma en que se podrían comparar. Además propone como construirlos con una complejidad de O(N log(n)). Los tres métodos más conocidos para la generación de los planos son el método ingenuo, en el cual se utiliza la media espacial, el siguiente método es basado en costos, conocido como heurística de área de superficie (SAH), y por último se utiliza la mediana espacial. En el método de la media espacial, el eje en el cual se va a dividir se escoge por rondas (round-robin), es decir, en la primer división se escoge el eje X, en la segunda ronda el eje Y, en la tercer ronda se escoge el eje Z, y así sucesivamente. El plano se coloca en el valor medio de los límites del nodo en el eje correspondiente, o lo que es equivalente, 1 2 (V min,eje + V max,eje ). Las subdivisiones se continúan hasta que se alcance alguno de dos límites, el primero sería que haya una cantidad x de objetos por hoja, o que la profundidad del árbol haya superado un umbral pre-establecido. El problema de este tipo de división se puede observar en la figura 2.11, donde se observa que en la primer división de la escena 2D, los nodos van a quedar desbalanceados, dado que la mayoría de los triángulos se encuentran en el nodo derecho.41 2.3. Segmentación Espacial 29 Figura 2.11: Primer división en kd-tree 2D Obtenida de Doggett (2011) En el método de la mediana espacial (comúnmente utilizado para la representación con nube de puntos, no para primitivas) se busca entre todos los objetos del nodo, la mediana, y en esta posición se coloca el plano. Dependiendo de la técnica que se utilice se puede escoger el eje de la misma manera que la media espacial (round robin) o se puede escoger el lado más largo. Para obtener estructuras con formas lo más cercanas a cubos. Se puede observar un ejemplo en 2D en la figura Por último el método SAH, en términos generales, evalúa una función de costo en todos los posibles planos, y permite elegir el que genere un valor menor. Pero, es necesario limitar la cantidad de planos a evaluar, dado que inicialmente son infinitos. Por lo que se han presentado diferentes técnicas para disminuir la cantidad de planos, entre los cuales se pueden citar Wald y Havran (2006), MacDonald y Booth (1990), Wu y Chen (2009), Havran et al. (1998), Zhou et al. (2008), Wald (2004), Goldsmith (1987), entre otros. Una de las opciones mayormente aceptadas para definir cuáles son las posiciones que generan mínimos o al menos resultados aceptables es en los límites de los triángulos, con lo cual es necesario evaluar 6n posiciones en total, donde n es la cantidad de triángulos en la escena. MacDonald y Booth (1990) presenta otro criterio para la definición de los posibles planos, en el cual se define que los planos están entre la mediana de objetos y la mediana espacial. Para el SAH existen tres criterios de terminación: cantidad de primitivas en el nodo, profundidad del árbol y cuando se tiene un valor de costo inferior42 30 2 Antecedentes Figura 2.12: Ejemplo de un kd-tree (2D) utilizando la mediana espacial Obtenida de a un umbral. Un ejemplo de este tipo de método se observa en la figura SAH va a mejorar considerablemente el rendimiento del sistema, y aún teniendo la restricción de los límites de los triángulos, se obtiene un 30 % a un 50 % de ventaja en rendimiento sobre el método de la división en el medio de la escena. En la sección del BSP se presentó una función de costo que es válida también para los kd-trees. Para recorrer la estructura (traversal), el algoritmo básico fue presentado por Arvo (1988) y Sung y Shirley (1994). Este algoritmo utiliza tres distancias a, b y s (donde el signo es relevante). La distancia a hace referencia a la distancia al plano de entrada, b es la distancia al plano de salida y s es la distancia al plano de división. Además se define dos nodos, el cercano y el lejano. El nodo cercano es el hijo que esta del mismo lado que el punto de vista u origen. Por lo que si el valor de s es negativo (el rayo no interseca el plano de división) y si s > b, es decir la distancia al plano es mayor que la distancia al plano de salida, entonces se conoce que el rayo solo recorre el nodo cercano. Si s < a (el punto de entrada está más lejos que la superficie de división) solo se analiza el nodo lejano. Por último si a < s < b entonces se hace un traversal de ambos nodos, tal y como se ve en la figura 2.14, donde el rayo para su análisis se separa en dos secciones, y se aplica de nuevo todos los cálculos de a, s y b, pero para el subnodo. La anterior es un algoritmo de traversal específico. Pero en general, Thrane43 2.3. Segmentación Espacial 31 Figura 2.13: Ejemplo de un kd-tree (3D) utilizando SAH Obtenido de y Simonsen (2005) lo presenta como: Dado un nodo kd-tree N, recorrer el subárbol con nodo raíz N se procede de la siguiente manera. Si N es una hoja entonces se prueban todos los triángulos para intersección y se devuelve el más cercano de existir. Si N es un nodo interno entonces se determina cual de los dos nodos es intersecado primero por el rayo y se llama recursivamente dentro del nodo hasta que se analicen todas las hojas pertinentes. Si la intersección es encontrada entonces se devuelve el valor más cercano. De lo contrario se llama recursivamente al hijo del lado lejano del plano de división. Siendo en este caso los nodos cercano y lejano la definición dada anteriormente por Sung y Shirley (1994). De esta manera siempre se analizan las hojas de la manera en que el rayo es atravesado, con lo que al momento de intersecar un objeto se puede finalizar el recorrido, dado que el algoritmo se ha completado, y se ha encontrado el objeto más cercano. Havran et al. (1997) presentó otro algoritmo, en el cual se comparan coordenadas en lugar de distancias. Esto se puede hacer dado que todos los planos del árbol son ortogonales. Havran et al. (1997) demuestra que su algoritmo es superior, y además demuestra su correctitud. Popov et al. (2007) presento otro algoritmo que esta optimizado para sistemas paralelos (GPU), donde a su vez es iterativo sin pila. Foley y Sugerman (2005) presenta otra solución optimizada para GPU.Horn et al. (2007) expande este trabajo y lo mejora para que el algoritmo pase de ser multi-pass a ser single-pass. En los últimos44 32 2 Antecedentes Figura 2.14: Recorrido del rayo en 2 nodos. Obtenido de Wald (2004) años el enfoque para mejorar el algoritmo de traversal, ha sido optimizarlo para su funcionamiento en GPU. Una explicación más general de los kd-trees se presenta en Hurley et al. (2002) y se adecua correctamente a las condiciones actuales en la temática. Como una referencia para el resto del proyecto, Havran (2000) en su tesis de doctorado propone que actualmente la mejor estructura para escenas estáticas son los kd-trees. Siendo esta una de las principales referencias en el área. Además esta tesis trae un contenido más profundo tanto para la construcción y el traversal de la estructura. Restricted Binary Spatial Partition (rbsp) Una de las principales variaciones de los árboles BSP son los árboles de partición espacial restringidos (rbsp por sus siglas en inglés). Por lo que la mayoría de la teoría expuesta para los BSP es aplicable a los rbsp. Los rbsp podrían categorizarse como un paso intermedio entre la clasificación de alineados a los ejes y no-alineados. Uno de los primeros trabajos enfocados a este tipo de estructura fue presentado por Kammaje y Mora (2007) y define al rbsp como un árbol binario de partición de espacio (BSP) en el cual se restringen los planos de división a un grupo de planos los cuales se determinan antes de la construcción del árbol, pero estos no están alineados a los ejes y pueden ser más que tres posibles45 2.3. Segmentación Espacial 33 planos. Esta estructura busca a su vez disminuir el costo de intersección, el cual está dada por la ecuación 2.8 T = b B + i I, (2.8) donde T es el costo total de la intersección, b es el número de veces que el volumen envolvente es intersecado, B es el costo de intersecar el volumen envolvente, i es el número de veces que el objeto es intersecado, e I es el costo de intersecar el objeto. El rbsp busca optimizar el valor de T, variando los valores de B y de i. A priori de la construcción, se definen los vectores normales a los planos que se van a utilizar, si estos vectores son normales a los ejes, entonces se obtiene un kd-tree. Con lo cual se puede expresar que un kd-tree es un caso especial de los rbsp. La justificación que Kammaje y Mora (2007) presenta es la relación que existe en área vacía y el numero de intersecciones y recorrido de nodos. Dado que un rbsp construido con un número mayor de posibles ejes, va a tender a tener menor área vacía. La estructura utilizada para la representación de cada nodo se compone de los siguientes elementos(kammaje y Mora, 2007): 1. Puntero a los hijos (32 bits) 2. Posición del plano divisor (14 bits) 3. Booleano que indique si es una rama (1 bit) 4. Índice del plano (16 bits) 5. Un bit para alinear a 64 bits. Dado que esta estructura tiene un alto grado de similitud con los kd-trees, muchas de las optimizaciones creadas para estos árboles pueden ser utilizadas en los rbsp. Otra característica importante es que los planos son definidos antes de iniciar la construcción, con lo cual se puede ahorrar espacio, dado que para definir el plano con el cual se va a dividir el presente nodo, basta con utilizar un índice, y no es necesario definir completamente el plano como se haría en un BSP. Cada uno de los nodos que se conforman van a ser poliedros convexos, con caras convexas. Si la cantidad de planos divisores es denominada c, entonces la cantidad máxima de caras de estos poliedros es de 2c. Dada esta característica utilizar heurísticas de área de superficie (las mismas que en un kd-tree) es más complicado, dado que calcular el área es menos directo por todas las posibles46 34 2 Antecedentes superficies de las caras del poliedro, así como calcular la cantidad de triángulos dentro de un nodo. Para la determinación de los planos se pueden utilizar los mismos algoritmos presentados en kd-tres: heurística de la mediana del espacio y heurística del área de superficie. La primera se mantiene igual a la descrita anteriormente, a diferencia de la SAH la cual requiere ciertas adaptaciones para ser viable en los rbsp. El primer paso es definir la función de costo para la intersección del SAH. Con lo cual se presenta la ecuación 2.9 Costo = T C+ IC/SA(N odop adre) (SA(N odoizquierdo) T riangulosizquierda + SA(N ododerecho) T riangulosderecha), (2.9) donde NodoIzquierdo es el nodo izquierdo creado a partir de la subdvisión, y el NodoDerecho es el otro nodo creado. TriangulosIzquierda son la cantidad de triángulos que quedaron en el nodo NodoIzquierdo, de igual manera TriangulosDerecha son la cantidad de triángulos que quedaron en el otro nodo. IC es el costo de intersección de un triángulo, y TC es el costo de recorrido de un nodo. Esta es la ecuación que se busca minimizar cuando se utiliza el SAH. El recorrido de este tipo de estructura es similar al kd-tree, excepto que la cantidad de planos puede llegar a ser mayor a 6. Kammaje y Mora (2007) presenta una solución en la cual se toma en cuenta consideraciones de coherencia espacial, en la cual varios rayos pueden tener el mismo plano de entrada y salida. Para la definición de los planos, se utiliza un grupo de puntos espaciados uniformemente sobre una esfera a partir de la relación dorada, para obtener la mayor cobertura posible. Budge et al. (2008) presentó una aceleración a este algoritmo, en el cual utiliza k-dops, que permiten definir la posición de los planos, definiendo la cantidad de planos a utilizar. Octrees Un árbol octario (comúnmente conocido como Octree) es una división espacial 3D similar a los quadtree en 2D. La construcción de este tipo de árboles también es recursiva, de manera similar a un BSP, excepto que al subdividir un nodo, este es dividido en ocho secciones en lugar de dos, todas del mismo tamaño. Este tipo de estructura toma en cuenta la distribución espacial de la escena, por lo que dependiendo de la densidad de objetos en algún nodo, la subdivisión va a continuar en profundidades superiores. Esta subdivisión continua hasta que se llegue a una profundidad máxima preestablecida o la47 2.3. Segmentación Espacial 35 Figura 2.15: Ejemplo de un árbol octario Obtenida de cantidad de objetos por nodo es inferior a un umbral definido. Un ejemplo de este tipo de estructuras se observa en la figura 2.15 El primer documento que aplicaba los octrees como método de subdivisión para ray tracing fue el de Glassner (1984), en este Glassner expone la razones por las cuales utilizar una estructura como el Octree es válida. Glassner atribuye a que son una estructura estudiada y comprendida a cabalidad, y que al igual como se expuso anteriormente en los BSP y en los BV permite reducir la cantidad de objetos intersecados, facilitando a su vez su intersección, usando una subdivisión adaptativa. Glassner (1984) presenta una forma de representar este tipo de estructuras. Inicialmente expone que cada vez que un nodo se divide, este herede su nombre como un prefijo a sus 8 hijos, y así sucesivamente. Además propone almacenar los nodos en un esquema de hashes. Se plantea relacionar el nombre de un nodo a un pequeño número que luego tenga una lista enlazada que relacione a todos los números que van a este nodo, iniciando desde algún punto en la tabla. Además los números que se asignan a los hijos van de 1 a 8, en lugar de 0 a 7, para evitar confundir el nodo padre 0 con el nodo hijo 00. En el cuadro del hash va a almacenarse únicamente la posición del hijo 0, dado que se debe hacer un almacenamiento (allocate) de memoria suficientemente grande para contener los 8 hijos continuos. De darse esta condición la búsqueda de un nodo es sumamente fácil, dado que se verifica el centro del nodo en las tres dimensiones, y dependiendo si es superior o inferior al centro48 36 2 Antecedentes del nodo (padre) vamos a saber la posición del nodo hijo que se está buscando. A partir de lo expuesto anteriormente la estructura de datos contiene las siguientes secciones: 1. Una bandera que indique si el nodo esta subdividido (booleano) variables con el centro del nodo (3D) e información del tamaño (pueden ser omitidos). 3. Un puntero con la lista de objetos (puede señalar a la primer posición del arreglo de objetos, y esta es finalizado con un valor inválido, -1). 4. El nombre del nodo. (Un entero) Además de la estructura expuesta, Gu y Wei (2008) presenta otra posibilidad para la estructura de datos la cual contiene: nodo padre, nodos hijos (8), propiedades, contador, posición espacial y un booleano sort. En términos generales es muy similar al esquema propuesto por Glassner, pero este esquema permite reducir el espacio utilizado, al tener la posibilidad de unir nodos que estén vacios en un único nodo, y cambiar el valor de contador, para definir cuando nodos fueron los que se unieron. Realizando este pequeño cambio se reduce el consumo de memoria a un 62.5 %. Madeira (2010) expone las formas principales de representación y construcción de octrees, entre las cuales se pueden destacar: por punteros, lineales (estructura-estática), hashed, branch-on-need y en texturas. El algoritmo de recorrido (traversal) es más complicado que el expuesto en las estructuras anteriores. Por coherencia espacial un rayo va a visitar como máximo 4 de los 8 hijos de un nodo, y el orden en que se visitan estos cuatro nodos va a influenciar de manera considerable el tiempo de ejecución. Con lo cual un aspecto a optimizar es la eficiencia y la robustez del algoritmo para determinar el orden de recorrido de los hijos. Existen dos tipos de algoritmos de traversal: Bottom-Up (abajo hacia arriba) : este fue el algoritmo presentado inicialmente por Glassner, empieza por el primer nodo intersecado por el rayo, y luego utiliza un proceso de búsqueda de vecinos, para conocer cuál es el siguiente nodo a investigar. Top-Down (arriba hacia abajo) : similar a los algoritmos de traversal de BVH y BSP. Se inicia en el nodo raíz y de manera recursiva desciende en los nodos que tiene una intersección con el rayo. Revelles et al. (2000) presenta una optimización del algoritmo de traversal, utilizando un algoritmo paramétrico del tipo Top-Down. Esta implementación49 2.3. Segmentación Espacial 37 se basa en optimizaciones realizadas a algoritmos de traversal para BSP. Lo que sugiere Revelles et al. (2000) es que se puede almacenar parámetros durante la incursión en el árbol que nos van a permitir escoger el siguiente nodo a analizar, sin tener que utilizar el algoritmo de búsqueda de vecinos. Los análisis que realizó Revelles et al. (2000) demuestran que son más eficientes que las representaciones de BSP, si el octree se encuentra lleno. Una de las desventajas que presentan estas estructuras es la de un gran consumo de memoria, en escenas vacías, dado que al ser una estructura más regular que el BSP, igual se van a tener que hacer la subdivisión de hijos, consumiéndose mucho espacio. Aún en escenas normales solo entre el 5 % y el 40 % de la información es útil o visible. (Gu y Wei, 2008) Otro defecto que tiene es que son caros (a nivel de recursos) de reconstruir, por lo que no se recomienda para escenas dinámicas, solo para escenas estáticas. Existen varios tipos de optimizaciones para las estructuras de los octrees. Lim y Shin (2005) presenta los Hierarchical Min-Max Octree, los cuales proveen una estructura que espacialmente es similar a los octrees, pero mejorando la actualización de la estructura, sin la necesidad de iniciarla desde cero. Una adaptación para su uso en GPU es presentada por Barboza y Clua (2011), donde se adecua la estructura para su uso en paralelo, así como su recorrido (traversal).50 51 3 Desarrollo y Análisis 3.1 Comparación de algoritmos De los algoritmos descritos en la sección 2 se procedió a analizar con mayor profundidad los siguientes cuatro algoritmos: BVH Octree kd-trees Uniform Grid En la sección 2 se expusieron tres algoritmos que no se encuentran contenidos en la anterior lista. Las razones por las cuales no se tomaron en consideración para esta etapa del proyecto se enumeran a continuación: BV: la razón por la cual no se incluyó dentro del análisis esta estructura es bastante sencilla, dado que los BVH son la evolución del presente algoritmo, con un rendimiento superior, y con mayores ventajas, como se expuso en la sección 2, y al estar estos dentro del análisis, no es necesario incluir los BV. BSP: como fue adelantado en la sección 2, estos algoritmos tienen problemas de convergencia, por imprecisiones en los cálculos de divisiones. Para el caso del gpu Theia, la unidad de división que tiene esta es en punto fijo, por lo que cualquier cálculo de divisiones puede fácilmente llegar a superar la resolución de los cálculos, con lo cual haciendo que el algoritmo no converja, es decir, no se obtengan resultados correctos. rbsp: las razones son similares al BSP y aunado a esto se incluye las pocas referencias bibliográficas que existen para los mismos, que se pueden reducir a las citadas en la sección 2. Para poder comparar correctamente ambos algoritmos se procedió mediantes dos métodos distintos. Primero se hizo un análisis algorítmico para obtener un aproximado del valor de la complejidad de las algoritmos, tanto para el algoritmo de construcción de las estructuras, como para el algoritmo de recorrido (traversal). Además, se procedió a simular los algoritmos ante 3952 40 3 Desarrollo y Análisis pruebas reales con distintas mallas de triángulos, y en estas simulaciones se contaron la cantidad de instrucciones base que fueron ejecutadas (se ahondará más en este término en las secciones subsiguientes), y a partir de los valores obtenidos en la simulación se puede proceder a elegir un algoritmo y proponer un descripción arquitectónica del algoritmo. Se utiliza únicamente este valor para la selección del algoritmo, dado que por la forma en que se estructuran los algoritmos elegidos, todos estos son implementables a nivel de hardware (con distintos niveles de complejidad), y además como se verá más adelante los valores obtenidos en el análisis algorítmico definen las cotas superiores e inferiores, pero no el caso típico. El caso típico se va a reflejar de manera directa en las simulaciones (benchmarks), y va a ser una representación de la forma en que se va a comportar el algoritmo en situaciones reales, y dado que lo que se busca es optimizar el tiempo de ejecución en casos reales del GPU, este es el mejor valor de comparación. El análisis algorítmico es únicamente para conocer las cotas del algoritmo y analizar si el peor caso es aceptable para su uso. Análisis Algorítmico Antes de iniciar el análisis, es importante definir las instrucciones y funciones que se tomarán como fundamentales o base. Estas hacen referencia a instrucciones que harán que el contador aumente en un valor unitario en el caso del método de benchmarking. Para el caso del análisis algorítmico hacen referencia al modelo de computación, y son las operaciones que se van a ejecutar en una unidad de tiempo (ciclo de reloj). Por lo que es necesario conocer la arquitectura del GPU y las posibles implementaciones de hardware adicional para hacer una decisión correcta de estos valores. Para el presente proyecto se tomarán como base las siguientes operaciones/instrucciones: Suma, resta y multiplicación hay una unidad interna (ALU) que puede obtener el resultado de una suma, resta y multiplicación en un ciclo de reloj. Inverso: para la implementación correcta de algunos de los algoritmos tanto de recorrido (traversal) y de construcción es necesario obtener el inverso del vector director de los rayos. Por lo que va a ser necesario implementar una unidad dentro de los procesadores vectoriales para que calculen el inverso de estos. (Esta unidad, ya se encuentra incluido dentro de los planes de las futuras versiones de Theia). log 2 : para la implementación correcta de los kd-trees se requiere utilizar un log 2 para calcular la máxima profundidad del árbol, pero redondeado53 3.1. Comparación de algoritmos 41 al entero más cercano. Esto se puede hacer fácilmente con una LUT (Look up table), y un comparador de rangos, la tabla no va a ser muy grande dado que es el log 2 de la cantidad de triángulos, no a superar los (McGuire, 2011), siendo el resultado del logaritmo en base 2 de este valor 26, con lo cual tomando un margen de error de unos cuantos bits y para utilizar un tamaño de tabla con base 2, el cuadro tendría unicamente 32 entradas, con lo cual esta implementación puede tener resultados en un ciclo de reloj. Operaciones lógicas: como operaciones lógicas se consideran las operaciones: NOR, AND, OR, NAND, XOR, NXOR, desplazamientos, comparaciones, etc. Todas estas tienen una unidad dedicada dentro de Theia, con lo cual se puede suponer que tienen un tiempo de ejecución igual a 1 ciclo de reloj, en realidad por el pipeline no es del todo cierto, pero para la presente sección se van a considerar como ejecución en una unidad de tiempo, cuando la etapa de ejecución del pipeline tiene duración de un ciclo de reloj. Accesos a memoria: se supone que los accesos a memoria tienen una duración de uno, al igual que las escrituras. Raíz cúbica: esta función se utiliza dentro de la estructura uniform grid para calcular la cantidad de voxels que se van a utilizar en la subdivisión de la escena, dado que su valor no tiene que ser muy preciso al ser una heurística. Además de la misma manera que el log 2, el tamaño máximo aproximado de su entrada es de 26 bits. Entonces los posibles resultados están dentro del rango [0, 407], entonces se podría implementar de manera similar a la sugerida en el log 2, solamente que en este caso la memoria tendría un tamaño de 408 posiciones. Techo: en las diversas estructuras y algoritmos utilizados en el presente proyecto, es muy común el uso de una función de redondeo al entero superior más cercano (dado que los valores son siempre positivos, es en realidad una función techo), esto para obtener el resultado ya sea la profundidad (depth) del árbol o la cantidad de subdivisiones. Pila (stack): de la misma manera que el acceso a memoria anteriormente descrito, se va a suponer que se tiene una pila, donde las funciones de apilar y desapilar, duran un ciclo de reloj, el tamaño de esta pila en la mayoría de los casos se puede limitar a 64 posiciones, con lo cual esta suposición es válida. Otras consideraciones importantes, se va a suponer que el algoritmo de ordenamiento (sorting) que va a ser usado para el algoritmo de kd-tree tiene54 42 3 Desarrollo y Análisis una cota superior de Θ(n log(n)), pero dado que se está haciendo la implementación en un µp MIMD, en realidad esto podría considerarse una sobreestimación, dado que una implementación sencilla paralela del merge sort puede obtener una cota superior de Θ(log(n)) (Cormen et al., 2009), y con una implementación más complicada puede llegar a ser hasta Θ( ), donde n en n lg 2 (n) este caso sería la cantidad de triángulos. Dado que lo que se ordena es una serie de planos, y existen 2 por triángulo. De la misma manera el algoritmo de nth element que se utiliza dentro del bvh, tiene una complejidad típica de O(n), suponiendo un algoritmo no paralelizado. El algoritmo en realidad es conocido como un algoritmo de selección, el cual de ser paralelizado puede mejorarse su complejidad para que tenga un valor de O(log(n)), con una cantidad de procesadores o hilos de n/log(n). (Han, 2007). Por lo que para hacer una análisis que permita ser lo más general posible, se mantendrá la cota en O(n), siendo este el caso común en el algoritmo serial, y así también es establecido en el std library de C++. (cplusplus, 2013) Dado que en esta sección lo que se busca es tener un valor de referencia (aproximación), para obtener cierta intuición acerca de la complejidad y el tiempo de ejecución de los algoritmos, se harán ciertas suposiciones razonables al principio de cada análisis, para dar un poco de contexto al mismo, y para delimitar los cálculos. Dado que de lo contrario habría que hacer análisis probabilísticos acerca de las posibles configuraciones de los triángulos en las escenas, complicando el entendimiento del mismo. Además el funcionamiento real del algoritmo se va a obtener más certeramente en la sección 3.1 de benchmarking. Con las anteriores anotaciones ya es posible hacer un análisis algorítmico teórico de cada uno de los cuatro algoritmos propuestos. Los pseudocódigos en las siguientes subsecciones hacen referencia al apéndice A.1. Uniform Grid Creación de la estructura Partiendo del pseudocódigo de Uniform Grid mostrado en el pseudocódigo A.1.5 en el apéndice A.1. Se deduce la complejidad de la creación de la estructura, para ello se hacen las siguientes suposiciones: En el peor caso se divide la escena en 64 divisiones por eje, esto está establecido en el algoritmo en la línea 11. Al ser el algoritmo lineal, lo único necesario es sumar el costo de cada instrucción, según lo estipulado en la sección anterior. Y los valores dentro del primer lazo se multiplican por n, y por cada lazo interno se55 3.1. Comparación de algoritmos 43 multiplican por 64, que hace referencia a la cantidad de divisiones por voxels, siendo esta una sobreestimación, dado que es imposible que haya un triángulo en todos las subdivisiones, o lo que es equivalente en todos los voxels. Luego de realizar todo este procedimiento se obtiene un valor aproximado de O(n) = n + 47, con lo cual se obtiene un complejidad de O(n). Con lo cual la creación de esta estructura siempre va a ser lineal respecto a la cantidad de triángulos en la escena. Lo cual se ve reflejado bastante bien en la sección de benchmarking, dado que es el que obtiene el mejor resultado en la cantidad de operaciones requeridas para crear la estructura. Es importante destacar que en la primeras tres líneas hay una iteración sobre todos los triángulos, la cota inferior siempre va a ser también Ω(n) con lo cual se deduce que el algoritmo tiene una complejidad de Θ(n) Recorrido de la estructura (traversal) Analizando el pseudocódigo A.1.6 se sabe que un rayo va a recorrer en el peor de los casos una cantidad equivalente a la subdivisión más grande de la escena, que como se mostro en la creación de la estructura, este va a tener un valor de 64, si este recorre el arreglo de esquina a esquina (opuestas en el cubo). Además es posible que todos los triángulos hayan quedado en el voxel de la esquina opuesta (dado que la estructura no se adapta a la coherencia espacial del sistema), y que no exista un hit con ninguno de estos triángulos. Con lo cual podría ocurrir que se tengan que analizar todos los triángulos, más el recargo (overhead) de recorrer los 63 voxels anteriores. Realizando estos cálculos se obtiene que la cota superior del algoritmo es de n, con lo cual se obtiene un O(n). En el mejor caso el rayo no interseca las fronteras de la escena (primer condicional), con lo cual se obtiene un valor de 12, o lo que es equivalente un Ω(n 0 ). Con lo cual no existe un valor de Θ para este algoritmo. Ya habiendo definido las cotas superiores e inferiores, es importante destacar el funcionamiento del algoritmo. Suponiendo que exista una separación homogénea dentro de todos los voxels de triángulos, por ejemplo n/64 3. En cada voxel se analizaría cada uno de estos triángulos, y de encontrarse un hit dentro de este voxel, se saldría de la iteración. Por lo cual en cada iteración se sumaría el overhead del cálculo de la posición del siguiente voxel, y se analizaría todos los triángulos en el voxel. Se sabe que al encontrar un hit, no es necesario analizar más voxels dado que el recorrido en la malla es igual al movimiento real del rayo, por lo que de encontrarse un hit, se sabe que este es el triángulo que realmente interseca al rayo de primero. Pero, si es necesario analizar todos56 44 3 Desarrollo y Análisis los triángulos en este voxel. Dado que no hay certeza que uno u otro este de primero dentro de cada voxel. Octree Creación de la estructura Se analizará el octree utilizando el pseudocódigo A.1.9. Para este algoritmo se supondrá que existe una separación homogénea de triángulos dentro de la escena, es decir, en la primer subdivisión de la estructura se supondrá que hay n/8 de triángulos en cada subsección, y así consecutivamente. Este es un caso que terminaría generando una estructura similar al uniform grid, pero probablemente con menor cantidad de subdivisiones. Una característica particular de este algoritmo es que se acopla a la distribución espacial de los triángulos, por lo que si inicialmente no existe esta división homogénea, se hará mayor cantidad de divisiones donde haya mayor acumulación de triángulos, con lo cual se va a balancear el mismo, y se podrá asemejar a la división homogénea a partir de cierta profundidad del árbol. Partiendo de esta subdivisión homogénea, y realizando un conteo de operaciones del pseudocódigo se puede llegar a obtener la función de recursión T (n) = 8 T (n/8)+40 n+112. Donde utilizando el teorema maestro, conociendo que a=8, b=8 y f(n) = 40 n se puede deducir que la cota superior (para este caso específico) es de O(n log(n)). (Cormen et al., 2009). Para esto además se supuso que los triángulos solo traslapaban un único octante al finalizar toda la construcción. Para obtener la cota inferior basta con observar las primeras 3 líneas del pseudocódigo, donde se observa que se itera sobre todos los triángulos de la escena, para obtener las frontera de la misma, por lo que se sabe que la cota inferior es ω(n). Para poder analizar el peor caso de este algoritmo, es necesario notar que los triángulos pueden existir en más de un subespacio al mismo tiempo (al ser tridimensionales y no puntos). Por lo que haciendo una pequeña sobreestimación, un triángulo podría estar aproximadamente en la mitad de los voxels, esto se debe a que después de la primera iteración un triángulo en algunos voxels se va a asemejar más a un cuadrilátero, dado que lo traslapa completamente, con lo cual si todos los triángulos en la escena son del tamaño de las fronteras de la misma (un caso degenerado, que va a ser poco común), en cada iteración la recursión solo va a dividir la cantidad de triángulos en dos. Con lo cual se obtiene la función de recursión sería T (n) = 8 T (n/2) + 40 n Donde utilizando el teorema maestro, conociendo que a=8, b=2 y f(n) = 40 n + 112, y aplicando el segundo caso, se obtiene que o(n 3 ). Con lo cual ya se obtiene que la cota superior del algoritmo57 3.1. Comparación de algoritmos 45 es o(n 3 ), es una cota laxa, dado que se hizo una sobreestimación de la división de los triángulos en la recursión. A pesar de tener esta cota tan alta, el caso común será mucho menor, y esto se ve reflejado en la sección 3.1 de benchmarking, donde se asemeja al caso ideal de subdivisión homogénea. Recorrido del árbol (Traversal) Utilizando el pseudocódigo A.1.10, el mejor caso del algoritmo ocurre cuando el rayo no interseca las fronteras de la escena, para esta verificación se requieren 52 operaciones, con lo cual es lineal respecto a la cantidad de triángulos, es decir Ω(n 0 ). En esta estructura se maneja un vector de booleanos, el cual contiene si un triángulo ya fue analizado, para evitar iterar más de una vez sobre cada triángulo (en caso de que ocurra la escena degenerada descrita en la creación de la estructura), con lo cual se sabe que en el peor caso O(n), con una constante multiplicativa bastante alta, dado el overhead de recorrer todos los hijos y verificar esta bandera. El caso común, el rayo va a intersecar a lo más 4 de los octantes de la escena, y suponiendo una distribución homogénea, se van a intersecar solo la mitad de los triángulos multiplicado por el overhead de aproximadamente 52 por cada escena que el rayo no interseca, es decir, va a seguir siendo lineal respecto a la cantidad de triángulos. El beneficio global de este algoritmo es poder evitar el espacio vacío o no intersecado de manera rápida y sencilla, y con una probabilidad alta de iterar sobre menos triángulos. Este algoritmo se puede mejorar implementando un método similar al expuesto en Arvo (1988), donde se acomodan los octantes a visitar de la manera en que se moviliza el rayo físicamente, con lo cual de encontrar una intersección se puede salir de la función con la solución. Pero, en el presente proyecto no fue utilizado, con lo cual el caso general siempre va a ser lineal con respecto a la cantidad de triángulos, pero con un caso común con una constante multiplicativa mucho mejor que de no usar una estructura, y una complejidad constante para rayos que no intersecan en la escena (completamente opuesto a no usar estructura, en la cual de cualquier forma se itera sobre todos los triángulos).58 46 3 Desarrollo y Análisis BVH Generación de la jerarquía Primero se procede a analizar el pseudocódigo A.1.11, con el cual haciendo un conteo de operaciones se obtiene que la complejidad de este es igual a n + complejidad(recursivebuild) + complejidad(f lattent ree). Donde complejidad(recursivebuild), hace referencia a la complejidad del pseudocódigo A.1.12, y complejidad(f lattent ree) hace referencia a la complejidad del pseudocódigo A Ahora se procede a analizar la complejidad del código de construcción del árbol en sí, es decir, la complejidad del pseudocódigo A Con lo cual inicialmente se supone en que cada iteración, la cantidad de triángulos que se separa en partes iguales en la llamada de la creación de los hijos. Hay que recordar que la jerarquía que se crea es un árbol binario, donde cada hoja contiene un único triángulo con su volumen envolvente (un AABB). En el caso en que se subdivida el árbol en secciones iguales, se va a obtener un árbol binario balanceado, siendo este el mejor caso posible. Además se supone que todos los centroides de los BBox de los triángulos en la escena son distintos, dado que esto crea un caso degenerado. A partir del pseudocódigo A.1.12 se obtiene la ecuación de recursión 3.1, T (n) = { 32 si n=1 2T ( n 2 ) + 32 n si n>1. (3.1) Con lo cual aplicando el teorema maestro se obtiene que, con a=2, b=2 y f(n) = 32 n+20731, aplicando el caso número 2, se obtiene que la complejidad de este caso es de Θ(n log(n)), para este caso se obtienen n-1 nodos internos y n nodos hoja, tal y como los expresa la teoría. El peor caso ocurre cuando se subdivide sucesivamente el árbol en un grupo de tamaño 1 y un grupo de tamaño n-1, que es cuando se crea un árbol desbalanceado. Y que no existan centroides alineados, dado que esto reduce la cantidad de iteraciones (pero empeora el tiempo de traversal), en este caso se obtiene que la función se puede analizar como iterativa, dado que se separa en dos secciones, en una se llama a la función con un valor de n igual a uno, y en la otra se llama la función con un valor de n-1, esto sigue ocurriendo hasta que el segundo llamado de función es igual a 1. Esto genera la ecuación de complejidad 3.2, T (n) = 33n + n i=2 (59 i ) = 59 2 n n (3.2) 259 3.1. Comparación de algoritmos 47 Con lo cual se obtiene que la cota superior de este algoritmo es de O(n 2 ). Con lo cual ya se obtuvieron tanto la cota superior como la inferior del algoritmo de construcción recursiva del árbol. Es importante anotar que este es un caso muy poco común, dado que la heurística de sah no va a permitir que ocurra, pero igual muestra una limitante superior bastante precisa, en general este algoritmo se va comportar monotónicamente igual, dado que siempre genera n nodos hoja y n-1 nodos internos. Lo que diferencia es la cantidad de triángulos que se tienen que analizar en cada iteración, en el mejor caso siempre se analiza la mitad de la iteración anterior, en cambio en el peor caso se analiza n-1 triángulos en comparación con n en la iteración anterior. Ahora solo se requiere analizar el algoritmo para linealizar el árbol en memoria. El cual se puede observar en el pseudocódigo A Donde se puede obtener la ecuación de recursión 3.3, suponiendo el caso ideal de un árbol balanceado T (n) = { 6 si n=1 2T ( n 2 ) + 32 si n>1, (3.3) con lo cual aplicando el método maestro, con a = 2, b = 2 y f(n) = 32, se obtiene aplicando el caso 1 que este algoritmo tiene una complejidad de Θ(n). En el peor caso el árbol está completamente desbalanceado obteniéndose la ecuación 3.4, T (n) = 32n + n 32 = 64n. (3.4) Con lo cual efectivamente la complejidad de flattentree es Θ(n), dado que esta es menor que la de RecursiveBuild, la cota de la construcción completa del árbol es igual a la de RecursiveBuild. i=1 Recorrido de la jerarquía (traversal) Se analiza el pseudocódigo A En el mejor caso el rayo no interseca el bounding box del nodo[0], con lo cual se obtiene un valor de complejidad de 64, con lo cual, se obtiene que la cota inferior del algoritmo es de Ω(n 0 ). Esta estructura está conformada (cuando no hay aparición de casos extraños, tales como triángulos en el cual el centroide del bbox se encuentra en la misma posición) por n-1 nodos internos, y n nodos hojas (los cuales contienen los triángulos). Por lo que el peor caso será cuando se recorran todos los nodos internos, y según la probabilidad de distribución de rayos y de triángulos la escena, una cantidad específica de nodos hoja. Pero dado que la suma de ambos siempre va a seguir siendo lineal respecto a la cantidad de nodos. Entonces se obtiene una cota superior, dada en la ecuación 3.560 48 3 Desarrollo y Análisis f(n) = O(n). (3.5) Donde f(n) define la función de recorrido del árbol. Es importante destacar, que este análisis es posible realizar de esta manera sencilla dado que todas las operaciones dentro de un análisis de nodo, ya sea interno o hoja, va a ser constante (aunque puede llegar a ser una constante grande, tal como la intersección del bbox y el triángulo), con lo cual con contar la cantidad de veces que se itera sobre los nodos (que es proporcional a la cantidad de triángulos) se obtiene el resultado. Con lo cual ya se tiene acotada superior e inferiormente la función de recorrido. Pero, como se observará en la sección 3.1, en el caso común se comportará siempre mejor que la cota superior. La cual es solo la limitante teórica del algoritmo. KD-Tree Construcción de la estructura Primero se requiere analizar el pseudocódigo A.1.15, el cual va a tener una complejidad con un valor de n + Complejidad(BuildT ree), donde Complejidad (BuildT ree) va a ser igual a la complejidad del pseudocódigo A Pero, antes de proceder a analizar el pseudocódigo A.1.16, se requiere analizar primero el pseudocódigo A.1.17 el cual inicializa las ramas del árbol, el cual al ser lineal con solo un bucle, se puede obtener los resultados directamente de contar las operaciones. El mejor caso ocurre cuando la cantidad de primitivas es cero (np==0), con lo cual la complejidad del algoritmo es Ω(n 0 ) = 5, en el peor caso se entra al último condicional, con lo cual O(n) = 7 + n. Ya conociendo las cotas de este algoritmo se procede a analizar buildtree, y suponiendo que nunca se tiene que reservar mas espacio que el ya existente. Además se supone que se subdivide la escena en dos, en cada iteración. Se obtiene la ecuación de recursión 3.6 T (n) = { 4 + initleaf si n<16 2T ( n 2 ) n + 6 n log(n) si n>16, (3.6) Para cualquiera de los dos casos del initleaf, se obtiene que la recursión converge a una complejidad de Θ(n log 2 (n)). Se obtiene esta complejidad a causa del ordenamiento que se encuentra intrínseco al algoritmo. Pero esto fue suponiendo una profundidad ilimitada, para el presente algoritmo la profundidad del árbol está limitada a la ecuación 3.10 (una función61 3.1. Comparación de algoritmos 49 empírica). Con lo cual el peor caso ocurre cuando el árbol se llena completamente, para hacer el análisis se supone que la cantidad de triángulos por nodo hoja es homogénea (n/(2 D 1 )), siendo D la profundidad del árbol. Además se supone que en cada división se separa en dos grupos equivalentes de triángulos en cada creación de un nodo interno. Con lo cual se obtiene que la complejidad total es definida por la ecuación 3.7. n cantidadn odoshoja costocreacionn odohoja ( 2 D 1 + D 1 i=1 i CreacionNodosInternos( n ), (3.7) 2i 1 donde el valor adentro de costocreaciónnodohoja y de creaciónnodosinternos, hace referencia a la cantidad de triángulos que va a encontrarse dentro de este en cada iteración. A partir del pseudocódigo A.1.16, se puede obtener el valor de estos dos que se observan en la ecuación 3.8, { costocreacinnodohoja = 4 + initileaf = 11 + n costocreacinnodointerno = n + n log(n). (3.8) Con lo cual sustituyendo la ecuación 3.8 en la ecuación 3.7, se obtiene lo observado en la ecuación 3.9, D 1 (2 D 1 ) (11 + (n/(2 D 1 )) + i ( i=1 n 2 i 1 + n n log( )) = 2i 1 2i D (D 2 (13 2 D + n log(2)) + D (13 2 D + n (log(8) 286) n ( 572 (2 D 1)+2 D+2 log(2) log(16))+( D+2 D+1 2) n log(n)). (3.9) Al sustituir en la ecuación 3.9, el valor conocido de la ecuación 3.10 D = log 2 (cantidadt riangulos), (3.10) se obtiene la función f(n) mostrada en la ecuación 3.11, f(n) = 1408 n n log(n) n log 2 (n) log(n) n 0.3 log(n) n , (3.11) el cual nos da la cota superior del algoritmo de O(n 1.3 ).62 50 3 Desarrollo y Análisis Este análisis es una simplificación del verdadero análisis de complejidad, dado que al suponerse que los triángulos se separaran de manera homogénea, se pierden de vista muchos casos, dado que la heurística de SAH, va a generar divisiones bastante variadas con lo cual la cantidad de triángulos a iterar en cada nodo interno no va a mantener esta tendencia. Pero, este análisis genera un primer adentro acerca de los posibles resultados de la sección 3.1. En general, el análisis realizado es un valor aproximado de las tendencias del algoritmo, que como se observa va a tener un valor superior a cualquiera de los algoritmos de construcción antes vistos, dado que el caso base es superior a los demás. Intersección con la estructura (traversal) Este es el algoritmo que se observa en el pseudocódigo A.1.18, de donde en las primeras tres líneas resulta evidente que el mejor caso es cuando el rayo no interseca la estructura (miss) con lo cual la complejidad es constante con un valor de Ω(n 0 ) = 53. El análisis del peor caso se complica dado que se utiliza una heurística de superficie de área (sah), con lo cual se reduce las apariciones de casos extremos, dado que la función de costo balancea ciertas características del árbol a partir de la probabilidad y costo del recorrido (traversal) del rayo. Con lo cual el cálculo de la complejidad involucraría un análisis de probabilidad de intersección tanto del bbox como de los triángulos, lo cual va en contra de la idea de la presente subsección, que busca dar una percepción (noción) del tiempo de ejecución del algoritmo, y no un análisis profundo de los tiempos exactos de complejidad. Pero, se puede dar una aproximación de la cota superior, dado que el árbol va a tener una profundidad (depth), definida en el momento de generación de árbol, y que viene dado por la ecuación log 2 (cantidadt riangulos), si no es enviado como parámetro. Con lo cual la cantidad de nodos en el árbol es un valor definido dado por log 2 (cantidadt riangulos) 1 i=0 2 i = 256 cantidadt riangulos 1,3 1, el cual va a ser constante, aunque podría generar un overhead muy alto. Con lo cual haciendo una suposición de que se distribuye homogéneamente la cantidad de triángulos, y que es un árbol completo (balanceado) con la máxima profundidad. Al analizar todos los nodos del árbol se obtiene la complejidad relajada de la ecuación 3.12 profundidad 2 o( i=0 2 i profundidad 1 i=0 2 i totalt riangulos 1 profundidad 1 2 i=0 2 ) i = o(128 n 1,3 1 + n) = o(n 1.3 ), (3.12)63 3.1. Comparación de algoritmos 51 dado que se conoce que todas las operaciones son constantes, lo que se hace es obtener el total que se obtendría de iterar primero sobre todos los nodos internos, y luego sobre todas los nodos hoja, conteniendo un valor promedio de triángulos, que al final va a ser equivalente sobre todos los triángulos del sistema. Pero, por las características del modelo físico del rayo se sabe que este no va a iterar sobre todos los nodos del sistema, por lo que esta es una sobreestimación tal y como lo muestra la notación de o-pequeña. En la sección 3.1 se demostrará que es una cota bastante holgada, dado que el rendimiento del sistema normalmente es mucho menor que una complejidad de O(n), casi tendiendo a ser constante. Esto ocurre como consecuencia del uso del SAH, y de la forma en que se crea el kd-tree y se adecua a las características espaciales de la escena. Además, el porcentaje de misses respecto a hits es muy alto lo cual generará que la asíntota sea más constante. Benchmarking Benchmarking, es un término en inglés, comúnmente utilizado de esta manera también en la literatura en español, y hace referencia a la acción de ejecutar un programa de computador, un grupo de programas o otras operaciones con el fin de obtener un valor relativo del rendimiento del programa en sí, o del computador.(bouckaert et al., 2011) Para el presente proyecto, benchmarking va a ser la simulación de las estructuras mediante mallas de triángulos tridimensionales, de forma que se asemejan a escenas reales (que se expondrán más adelante), donde se contarán la cantidad de operaciones básicas (explicadas en la subsección de análisis algorítmico), para así comparar su desempeño tanto a nivel de la construcción de la estructura, como en el recorrido de la misma. Estructuras a utilizar Para la simulación se utilizaron cuatro escenas en formato.tri, el cual hace referencia a la representación explícita de la escena como un grupo de triángulos, donde este formato define los tres vértices del triángulo para cada uno de estos. En cada escena se procede a simular distintas vistas, con distintos tamaños de resolución, con puntos de origen variados. A continuación se presentan las escenas, y ejemplos gráficos de la simulaciones realizadas. Los ejemplos se obtuvieron de Taiwan (2005). Por el enfoque de la simulación no se tomaron en cuenta los colores de los triángulos, dado que estos no aportan mayor información al costo de la intersección de los triángulos.64 52 3 Desarrollo y Análisis Figura 3.1: Demostración gráfica de la pelota Pelota (Ball) Es una escena básica que contiene 120 triángulos, y que asemeja una pelota, la escena básica se observa en la figura 3.1. La cual fue obtenida de de Taiwan (2005) Dado que es un objeto simétrico respecto a todos los ejes, no se van hacer rotaciones sino que se van a hacer análisis en distintos enfoques, a distintas distancias tanto de la malla de resolución y el punto de vista. Haciendo referencia a la figura 2.4, se va alterar la posición del punto e y el arreglo de pixeles respecto a la figura. Un ejemplo de esto se observa en la figura 3.2, donde se varía tanto la posición del plano Z, con los siguientes valores: 200, 210, 250, 300 y 350. Los puntos 1 y 2 en la figura 3.2 hacen referencia a los puntos de vista e, donde estos valores también se alteran para cambiar la forma en que se generan los rayos. Para esta simulación el punto e va a estar a una distancia de 100, 50, 20, 10 y 1 respecto al plano Z. Para generar los rayos se creó una clase en C++, donde se indican las dos esquinas superiores y la esquina inferior derecha, y la resolución en el65 3.1. Comparación de algoritmos 53 Figura 3.2: Puntos de vista plano horizontal (el cual es relativo a las esquinas especificadas) y en el plano vertical. El sistema genera un rayo que pasa en el valor intermedio de cada pixel en la matriz definida por estos tres puntos. Al alterar la posición del plano, la distancia del punto de vista y la resolución de la matriz, se van a obtener múltiples casos que modelarán de manera más realista el comportamiento de la estructura ante distintas escenas. El plano se colocó en distintas posiciones no centradas respecto al a esfera, excepto para la primera iteración. En la primera posición la malla se encuentra centrada respecto al centroide de la esfera, y la matriz de pixeles cubre completamente a la esfera. Esto se hizo con el fin de poder intersecar rayos con toda la estructura, luego se procedió a disminuir el tamaño de la matriz para enfocarse en secciones específicas de la escena, que tuvieran distinta cantidad de densidades de triángulos. Se escogió un octante de la escena y se analizó. Luego este octante se separó en cuatro caras, y se analizo cada una de estas. En la primera iteración se generaron rayos, en la segunda posición del plano se generaron rayos y en las otras 4 posiciones rayos, donde en cada posiciones se alteró la posición relativa en z en 5 posiciones distintas, y en cada posición se utilizaron 5 posiciones relativas del punto de vista.66 54 3 Desarrollo y Análisis Cuadro 3.1: Promedio de costo: Bola Costo Estructura Construcción Hit Miss Intersección con la escena Total Sin estructura Octree BVH Uniform Grid Kd-tree A partir de estas posiciones se obtienen los totales de instrucciones en cada iteración. En los cuadros B.1, B.2, B.3, B.4 y B.5, se pueden obtener los resultados totales de cada iteración de las simulación para las estructuras: BVH, Kd-tree, Octree, Uniform Grid y sin estructura, respectivamente. En la última iteración se realizo una simulación de control, no utilizando ninguna estructura, con lo cual se interseca cada rayo con todos los objetos en la escena. En esta simulación se asume que la construcción es nula, dado que no se usa estructura. La información de todos estos cuadros esta resumidos en el cuadro 3.1, y en el cuadro 3.2. El cuadro 3.1 es la tabulación de los promedios de toda la simulación. El espacio de hit es el costo promedio de todos los aciertos (hits) de la escena, el fallos (misses) es el promedio de todos los miss que ocurrieron durante la simulación. La columna de Intersección con la escena, es el promedio de las iteraciones, es decir, es el equivalente al total de una sola posición. En el cuadro 3.2 se observan los totales absolutos de la simulación, estos datos permiten obtener un mejor entendimiento acerca de cómo es atenuado el recargo (overhead) de la creación del árbol conforme aumentan la cantidad de rayos e intersecciones. En estas simulaciones se supusieron resoluciones de pantallas bastante reducidas, dado que los objetos eran pequeños, pero en general suponiendo una pantalla con una resolución 1600x1200 pixeles, se van a generar aproximadamente un total de rayos de , en la simulación de la bola el total de rayos emitidos son de , con lo cual es el equivalente a hacer 5 análisis en distintas posiciones sobre la misma estructura. Es importante destacar que la construcción de la estructura solo se hace una vez por simulación, dado que la escena no cambia. Una forma más sencilla de observar la mejora en los tiempos de ejecución67 3.1. Comparación de algoritmos 55 Cuadro 3.2: Resumen de costo de la intesección y la simulación: Bola Costo Estructura Total de intersecciones Total de la simulación Sin estructura Octree BVH Uniform Grid Kd-tree Figura 3.3: Comparación de estructuras: Bola Creación de la estructura Intersección de rayos Instrucciones Sin estructura BVH Octree Kd-tree Estructuras Uniform Grid es con el gráfico de barras observado en la figura 3.3, donde se grafican los resultados del cuadro 3.1, con lo cual se observa que en el mejor caso (kd-tree) es un 5 % del total de instrucciones de lo que es el sistema sin estructura, con lo cual existe una aceleración (speedup) de 22 veces. Dado que la diferencia entre el sistema sin estructura y uno con estructura es tan abismal, es necesario realizar otra grafica, para realmente lograr comparar las mejores tres estructuras (kd-tree, uniform-grid y bvh), lo cual se observa en la figura 3.4, en este caso lo que se hace es graficar los resultados68 56 3 Desarrollo y Análisis Figura 3.4: Comparación de estructuras: Bola, solo mejores estructuras Instrucciones Creación de la estructura Intersección de rayos BVH Kd-tree Uniform Grid Instrucciones BVH Kd-tree Uniform Grid Estructuras Estructuras del cuadro 3.2, donde resulta evidente que luego de superar el overhead de la creación. Con lo cual para esta escena, se obtiene un mejor rendimiento con la estructura del kd-tree. Aunque tenga un tiempo de construcción de hasta 11 veces con respecto a las otras estructuras. Lo cual va de acuerdo a los cálculos de complejidad realizados con anterioridad. En la figura 3.4 en el grafico de la izquierda se comparan los tiempos totales de simulación, y en la derecha los tiempos totales de una sola iteración de la simulación. Tetera (Pot) La segunda escena de prueba es una malla de 640 triángulos que asemeja la forma de una tetera, la cual fue obtenida de de Taiwan (2005) con el nombre de pot, tetera en su nombre en inglés. Una simulación del objetos se puede observar en la figura 3.5. Se hizó un análisis similar al de la pelota, pero dado que este no es simétrico, se realizaron cálculos de intersección en distintas orientaciones del objeto para obtener distintos resultados y asemejar las condiciones a situaciones reales, donde los puntos de vista no van siempre con la tetera centrada en el punto de vista, ni alineada con los ejes. En las figuras 3.6, 3.7, 3.8 y 3.9, se observan los cuatros distintos puntos de vista que se utilizaron en el proyecto, donde en cada uno se utilizaron 6 puntos distintos de origen de los rayos. Para la figura 3.6 se generaron rayos, para la figura 3.7 se generaron rayos, para la figura 3.8 se generaron rayos y por último en la69 3.1. Comparación de algoritmos 57 Figura 3.5: Tetera figura 3.9 se usaron rayos, estos para cada iteración. Por lo que en general se va a tener un buen promedio para los recorridos (traversals) de los rayos dentro de la estructura. De manera similar a lo calculado en la sección de la bola, se realiza la simulación, y los resultados se encuentran tabuladas en los cuadros B.6, B.7, B.8, B.9 y B.10. Estos resultados se encuentran resumidos en el cuadro 3.3, donde se muestran los resultados promedio de todas las iteraciones de la simulación. En el cuadro 3.4 se observa los valores totales obtenidos de la simulación, con lo cual ya se vislumbra cuales son los mejores algoritmos en la representación de la presente escena. En la figura 3.10 se observa la comparación entre todas las escenas, comparativamente el tiempo total de simulación del kd-tree es un 1 % del tiempo de la simulación sin utilizar una estructura. En la figura 3.11 se observa la cantidad de instrucciones ejecutadas para las tres estructuras principales, en la gráfica de la izquierda se observa los cálculos para una única iteración (con los valores promedios) y en la derecha se observa los totales de la simulación. Resulta evidente como el costo de la creación de una estructura compleja, se ve compensado por la reducción en el promedio70 58 3 Desarrollo y Análisis Figura 3.6: Tetera: Vista 1 Figura 3.7: Tetera: Vista 2 Figura 3.8: Tetera: Vista 3 Figura 3.9: Tetera: Vista 4 Cuadro 3.3: Promedio de costos: tetera Costo Estructura Construcción Hit Miss Intersección con la escena Total Sin estructura Octree Uniform Grid BVH Kd-tree71 3.1. Comparación de algoritmos 59 Cuadro 3.4: Resumen de costo de la intesección y la simulación: tetera Costo Estructura Total de intersecciones Total de la simulación Sin estructura Octree Uniform Grid BVH Kd-tree Figura 3.10: Comparación de estructuras: Tetera Creación de la estructura Intersección de rayos Instrucciones Sin estructura BVH Octree Kd-tree Estructuras Uniform Grid72 60 3 Desarrollo y Análisis Figura 3.11: Comparación de estructuras: TEtera, solo mejores estructuras Creación de la estructura 10 7 Intersección de rayos 10 9 Instrucciones BVH Kd-tree Uniform Grid Instrucciones BVH Kd-tree Uniform Grid Estructuras Estructuras del costo del hit y el miss. Obteniéndose resultados similares a la bola, donde la mejor estructura es el kd-tree. Dadas las cantidades antes definidas de rayos por iteraciones, los resultados, pueden ser una sobreestimación del costo para el kd-tree, dado que este va a mejorar comparativamente a las otras estructuras donde se amortigua el costo de la construcción. Edificio (Building) Esta es la tercera escena que se simuló, siendo esta una estructura bastante más compleja que las anteriores y hace referencia al edificio de ciencias de la computación e ingeniería eléctrica de la Universidad Nacional de Taiwán, con un total de 5273 triángulos. La vista frontal de la malla de triángulos se puede observar en la figura 3.12 Para la simulación del edificio se escogieron 4 distintas vistas: vista frontal, vista superior, vista trasera y una vista con una orientación no alineada a todos los ejes. La vista frontal se puede observar en la figura 3.12, la trasera se observa en la figura La figura 3.15 hace referencia a la vista superior del edificio. La última vista que fue simulada es la mostrada en la figura Es importante destacar que en cada una de estas posiciones, se simularon 6 posiciones distintas relativas al plano de los pixeles, a distancias de 1, 5, 10, 20, 50 y 100. De estas vistas se obtuvieron los resultados mostrados en los cuadros B.11, B.12, B.13, B.14 y B.15. Los datos de estas tablas se resumen a los datos mostrados en el cuadro 3.5 y 3.6, donde se despliega el costo total de la con-73 3.1. Comparación de algoritmos 61 Figura 3.12: Vista Frontal: CSIE NTU Figura 3.13: Vista Trasera: CSIE NTU Figura 3.14: Vista Variada: CSIE NTU Figura 3.15: Vista Superior: CSIE NTU strucción del árbol, el promedio de los rayos en la presente simulación, el costo total de cada simulación y el costo total de todo el proceso incluyendo la construcción. Esto para obtener una referencia del porcentaje del total que es la estructura, o lo que es equivalente el overhead que induce la construcción de la jerarquía. En la figura 3.16 se observa una comparación de barras entre todas las estructuras (incluido el total sin estructura), para tener una relación relativa entre las mismas. Tal y como se observa en esta misma gráfica, el tiempo sin estructura es 528 veces del tiempo utilizando para hacer el análisis con el kdtree. Con lo cual ya se justifica de gran medida la utilización de alguna de estructuras de segmentación espacial tridimensional. En las figura 3.17 se da un caso interesante donde para el promedio de una única iteración, al ser el sistema bastante homogéneo y tener triángulos justo en las fronteras del bbox se favorece al uniform grid, y esto se observa Mostrar más
Capítulo 2 Silueta 2.1 Silueta La silueta de un objeto es muy importante porque es lo que nos da las pistas visuales de cómo es que está formado, nos dice dónde están sus límites y ayuda a diferenciar Más detalles En este capitulo se presentan los métodos y algoritmos utilizados para el desarrollo del
33 En este capitulo se presentan los métodos y algoritmos utilizados para el desarrollo del sistema de procesamiento de imágenes para controlar un robot manipulador y se describen en la forma como serán Más detalles UNIVERSIDAD TECNOLOGICA DE PEREIRA FACULTAD DE INGENIERIAS
Asignatura Código COMPUTACION GRAFICA IS623 Créditos 3 Intensidad semanal 4 Requisitos CB223 IS453 Las posibilidades gráficas del computador se han convertido en el principal motivo de que ésta sea la Más detalles ALGORITMO DE RECORTES Y DE NIVELES DE DETALLES PARA EL INCREMENTO DE LA VELOCIDAD DE VISUALIZACIÓN DE MODELOS 3D EN DISPOSITIVOS DE BAJO COSTE.
Revista de investigación Editada por Área de Innovación y Desarrollo, S.L. Envío: 08-07-2013 Aceptación: 4-08-2013 Publicación: 30-09-2013 ALGORITMO DE RECORTES Y DE NIVELES DE DETALLES PARA EL INCREMENTO Más detalles 2 Representación poligonal
INGENIERÍA INFORMÁTICA 2 Representación poligonal Introducción Modelo poligonal Teselación Simplificación Prof. Miguel Chover Introducción Modelado geométrico Creación del modelo 3D en el ordenador Técnica Más detalles El pipeline gráfico Figura 3.1
El pipeline gráfico Para llevar a cabo una representación virtual de un ambiente tridimensional, se realiza un modelado del escenario. Dicho modelo incluye la representación geométrica de los objetos presentes, Más detalles Diseño del Sistema de Información
Diseño del Sistema de Información ÍNDICE DESCRIPCIÓN Y OBJETIVOS... 2 ACTIVIDAD DSI 1: DEFINICIÓN DE LA ARQUITECTURA DEL SISTEMA... 7 Tarea DSI 1.1: Definición de Niveles de Arquitectura... 9 Tarea DSI Más detalles AutoCAD, Herramientas 2D CONTENIDO
CONTENIDO HOJA TÉCNICA... 3 INTRODUCCIÓN... 4 GENERALIDADES DEL AUTOCAD... 5 COMO UTILIZAR ESTE MANUAL... 5 PARTE 1: PREPARACIÓN... 7 1.- CONOCIENDO EL COMPUTADOR:... 7 1.1.- COMPONENTE FÍSICO:... 8 1.2.- Más detalles Denominación de la materia. N créditos ECTS = 36 carácter = MIXTA INGENIERIA DE COMPUTADORAS
Denominación de la materia INGENIERIA DE COMPUTADORAS N créditos ECTS = 36 carácter = MIXTA Ubicación dentro del plan de estudios y duración La materia Ingeniería de Computadoras está formada por 6 asignaturas Más detalles Diseño del Sistema de Información
Diseño del Sistema de Información ÍNDICE DESCRIPCIÓN Y OBJETIVOS...2 ACTIVIDAD DSI 1: DEFINICIÓN DE LA ARQUITECTURA DEL SISTEMA...7 Tarea DSI 1.1: Definición de Niveles de Arquitectura...9 Tarea DSI 1.2: Más detalles TIPOS DE PROCESAMIENTOS
TIPOS DE PROCESAMIENTOS El desempeño de un computador puede tener diferentes medidas de elección para diferentes usuarios. Para un usuario individual que está ejecutando un único programa, la computadora Más detalles FUNCIONES DE UNA COMPUTADORA
FUNCIONES DE UNA COMPUTADORA Vamos ahora a profundizar un poco más en el esquema básico expuesto anteriormente, dando algunos detalles sobre cada una de las funciones llevadas a cabo por el ordenador: Más detalles Tema 1: Implementación del sistema de archivos
Tema 1: Implementación del sistema de archivos 1. Introducción 2. Implementación 3. Estructura del almacenamiento secundario Dpto. Tema Lenguajes 1: Implementación y Sistemas del Informáticos. sistema Más detalles Una computadora de cualquier forma que se vea tiene dos tipos de componentes: El Hardware y el Software.
ARQUITECTURA DE LAS COMPUTADORAS QUE ES UNA COMPUTADORA (UN ORDENADOR)? Existen numerosas definiciones de una computadora, entre ellas las siguientes: 1) Una computadora es un dispositivo capaz de realizar Más detalles Clase 20: Arquitectura Von Neuman
http://computacion.cs.cinvestav.mx/~efranco @efranco_escom efranco.docencia@gmail.com Estructuras de datos (Prof. Edgardo A. Franco) 1 Contenido Arquitectura de una computadora Elementos básicos de una Más detalles UNIVERSIDAD AUTÓNOMA DE YUCATÁN FACULTAD DE MATEMÁTICAS MISIÓN
UNIVERSIDAD AUTÓNOMA DE YUCATÁN FACULTAD DE MATEMÁTICAS MISIÓN Formar profesionales altamente capacitados, desarrollar investigación y realizar actividades de extensión, en Matemáticas y Computación, así Más detalles 11. ANEXO # 1 DEFINICIONES
11. ANEXO # 1 DEFINICIONES 11.1 Sprite Un sprite es un gráfico de mapa de bits que está diseñado para ser parte de una escena mayor. Puede ser una imagen estática o un gráfico animado. Ejemplos de sprites Más detalles Particiones binarias del espacio (BSP)
(BSP) Contenido 1. Introducción. 2. Quadtrees. 3. Árboles BSP. 4. Aplicación al algoritmo del pintor. 5. Construcción de un árbol BSP. 6. Conclusiones. Contenido 1. Introducción. 2. Quadtrees. 3. Árboles Más detalles PROCESAMIENTO DE IMÁGENES 3D EN GPU
Trabajo final PROCESAMIENTO DE IMÁGENES 3D EN GPU Para la materia de posgrado: Procesamiento digital de imágenes Dictada por el Profesor: Dr. Claudio Delrieux Propuesta presentada por Ing. Juan P. D Amato Más detalles La definición de digital es toda información representada por una serie de pulsos eléctricos discretos basados en un sistema binario (ceros y unos).
Tratamiento de la Imagen Digital Qué es la imagen digital? La definición de digital es toda información representada por una serie de pulsos eléctricos discretos basados en un sistema binario (ceros y Más detalles FUNDAMENTOS DE INFORMATICA
FUNDAMENTOS DE INFORMATICA TEMAS QUE SE TRATARÁN: Arquitectura Interna Sistemas Operativos Programación en Visual Basic Bases de Datos Redes e Internet 1 FUNDAMENTOS DE INFORMATICA Tema 1: Arquitectura Más detalles Tratamiento de la Imagen Digital
Tratamiento de la Imagen Digital Qué es la imagen digital? La definición de digital es toda información representada por una serie de pulsos electricos discretos basados en un sistema binario (ceros y Más detalles TEMA 4. Unidades Funcionales del Computador
TEMA 4 Unidades Funcionales del Computador Álvarez, S., Bravo, S., Departamento de Informática y automática Universidad de Salamanca Introducción El elemento físico, electrónico o hardware de un sistema Más detalles Programación Gráfica. Conceptos Básicos
2013 1 Procesamiento de Imágenes. Es el campo que trata con métodos, técnicas, y algoritmos para manipulación, realce e interpretación de imágenes. Graficación por Computadora. Es la disciplina concerniente Más detalles Exportación de escenarios con 3D Studio MAX
1 Victor Hugo Franco Serrano / DGSCA UNAM Exportación de escenarios con 3D Studio MAX D.C.V. Victor Hugo Franco Serrano Dept. de Realidad Virtual, DGSCA UNAM vhfranco@unam.mx El objetivo de este curso Más detalles Cámara. Práctica 5. 5.1. Introducción. 5.1.1. Proyección
Práctica 5 Cámara 5.1. Introducción En esta práctica se aborda la creación de la cámara virtual, esto es, el medio o forma mediante el cual vamos a poder observar los elementos de la escena. De nuevo, Más detalles CUALIFICACIÓN PROGRAMACIÓN DE SISTEMAS INFORMÁTICOS PROFESIONAL. Nivel 3. Versión 5 Situación RD 1201/2007 Actualización
Página 1 de 17 CUALIFICACIÓN PROGRAMACIÓN DE SISTEMAS INFORMÁTICOS PROFESIONAL Familia Profesional Informática y Comunicaciones Nivel 3 Código IFC303_3 Versión 5 Situación RD 1201/2007 Actualización Competencia Más detalles Modelo de aplicaciones CUDA
Modelo de aplicaciones CUDA Utilización de GPGPUs: las placas gráficas se utilizan en el contexto de una CPU: host (CPU) + uno o varios device o GPUs Procesadores masivamente paralelos equipados con muchas Más detalles TEMA 2. PLANIFICACION DE PROCESOS. CAD/CAM
TEMA 2. PLANIFICACION DE PROCESOS. CAD/CAM PARTE 1: INTRODUCCIÓN A CAD/CAM. 1. DEFINICIONES. 2. EL CAD/CAM EN EL PROCESO DE DISEÑO Y. 3. COMPONENTES DE CAD/CAM. 4. CAMPOS DE APLICACIÓN. 5. INGENIERÍA INVERSA. Más detalles SIG. CIAF Centro de Investigación y Desarrollo en Información Geográfica. Fundamentos de Sistemas de Información Geográfica C U R S O.
Grupo SIG C U R S O Fundamentos de Sistemas de Información Geográfica UNIDAD 2 Datos geográficos y métodos de almacenamiento Tema 2 Modelos y estructuras de datos CIAF Centro de Investigación y Desarrollo Más detalles Contenido. Sistema de archivos. Operaciones sobre archivos. Métodos de acceso a archivos. Directorio. Sistema de archivos por capas.
Contenido Sistema de archivos Operaciones sobre archivos Métodos de acceso a archivos Directorio Sistema de archivos por capas Espacio libre Sistema de archivos Proporciona el mecanismo para el almacenamiento Más detalles Sistemas de Información II. Introducción al Proceso Unificado de Desarrollo de Software. Autor: Ing. Silverio Bonilla 1
Introducción al Proceso Unificado de Desarrollo de Software Autor: Ing. Silverio Bonilla 1 James Rumbaugh et al. Concepto de Método Una metodología de ingeniería del software es un proceso para producir Más detalles ESTRUCTURA Y TECNOLOGÍA A DE COMPUTADORES
Universidad Rey Juan Carlos ESTRUCTURA Y TECNOLOGÍA A DE COMPUTADORES Estructura de un computador: conceptos básicos Luis Rincón Córcoles Licesio J. Rodríguez-Aragón Programa 1. Introducción 2. Elementos Más detalles Memoria Principal. Departamento de Arquitectura de Computadores
Memoria Principal Departamento de Arquitectura de Computadores Índice Introducción. Conceptos básicos Características de los sistemas de memoria Jerarquías de memoria Memoria Principal Características Más detalles Lo que definimos como CPU (Central Process Unit) o Unidad Central de Proceso, está estructurado por tres unidades operativamente diferentes:
Facultad de Ciencias Exactas y Naturales y Agrimensura Departamento de Ingeniería Cátedra : Proyecto Final Apuntes : Microprocesadores Tema 6-1 : Esquema de un µp. La CPU Lo que definimos como CPU (Central Más detalles construcción de programas Prof. Eliana Guzmán U.
Unidad II. Metodología para la construcción de programas Prof. Eliana Guzmán U. Semestre: A-2015 Introducción Resolver un problema con una computadora conduce a la escritura de un programa y a su ejecución. Más detalles Fundamentos del diseño 3ª edición (2002)
Unidades temáticas de Ingeniería del Software Fundamentos del diseño 3ª edición (2002) Facultad de Informática necesidad del diseño Las actividades de diseño afectan al éxito de la realización del software Más detalles Capítulo 1. Introducción
Capítulo 1. Introducción El WWW es la mayor fuente de imágenes que día a día se va incrementando. Según una encuesta realizada por el Centro de Bibliotecas de Cómputo en Línea (OCLC) en Enero de 2005, Más detalles Todo el alumnado que tenga un buen nivel podrá asistir a las clases de profundización que serán el por las tardes.
SEGUNDO DE BACHILLERATO CIENCIAS NATURALEZA Y SALUD A continuación se especifican los contenidos y los objetivos mínimos y deseables para cada una de las unidades didácticas de cada bloque. Finalmente Más detalles Dr.-Ing. Paola Vega Castillo
EL-3310 DISEÑO O DE SISTEMAS DIGITALES Dr.-Ing. Paola Vega Castillo Información n General Curso: Diseño de Sistemas Digitales Código: EL-3310 Tipo de curso: Teórico Créditos/Horas por semana: 4/4 Requisito: Más detalles Análisis del Sistema de Información
3.2 TÉCNICA DE MODELADO DE OBJETOS (OMT) (JAMES RUMBAUGH). 3.2.1 Introducción. En este documento se trata tanto el OMT-1 como el OMT-2, el primero contenido en el Libro Modelado y Diseño Orientado (Metodología Más detalles Tema 1 Introducción. Arquitectura básica y Sistemas Operativos. Fundamentos de Informática
Tema 1 Introducción. Arquitectura básica y Sistemas Operativos Fundamentos de Informática Índice Descripción de un ordenador Concepto básico de Sistema Operativo Codificación de la información 2 1 Descripción Más detalles MÉTODOS DE ORGANIZACIÓN Y ACCESO A DATOS INTRODUCCIÓN. NO : ESTRUCTURA. OPERACIONES. MANTENIMIENTO. : ESTRUCTURA. OPERACIONES. MANTENIMIENTO. MÉTODOS DE ORGANIZACIÓN Y ACCESO A DATOS : ESTRUCTURA. OPERACIONES. Más detalles TECNICO SUPERIOR UNIVERSITARIO EN MECATRÓNICA
TECNICO SUPERIOR UNIVERSITARIO EN MECATRÓNICA HOJA DE ASIGNATURA CON DESGLOSE DE UNIDADES TEMÁTICAS 1. Nombre de la asignatura Sistemas digitales 2. Competencias Desarrollar y conservar sistemas automatizados Más detalles Ingeniería de Software con UML Unified Modeling Language Lenguaje Unificado de Modelado
Ingeniería de Software con UML Unified Modeling Language Lenguaje Unificado de Modelado 1. Introducción Unified Modeling Languaje Fuente: Booch- Jacobson-Rumbauch y diversos sitios Internet, entre otros: Más detalles Nombre: M. Rosmery Santos J. Materia: Arquitectura de Computadoras. Docente: Lic. Mirna Baena
Nombre: M. Rosmery Santos J. Materia: Arquitectura de Computadoras Docente: Lic. Mirna Baena Fecha: 27-09-2011 Defunción Sistemas De Representación: [Representacion de Imagen] Procedimientos utilizados Más detalles Diseño de Sistemas Embebidos en FPGA Curso de Posgrado Facultad de Ciencias Exactas y Tecnología UNT.
Tema 4 Parte 1: Tecnologías de configuración Parte 2: Lenguajes de descripción de Hardware#4 TECNOLOGÍA Tipo de elemento de configuración utilizado. La tecnología de los elementos de configuración influye Más detalles CONTENIDOS. 2. Entidades primitivas para el desarrollo de algoritmos.
Introducción a la ciencia de la computación y a la programación 1. La computadora CONTENIDOS 2. Entidades primitivas para el desarrollo de algoritmos. 3. Metodología a seguir para la resolución de problemas Más detalles GUIA DE ESTUDIO. 3D Studio Max. Tecnología en Diseño Gráfico. Autor: Tnlgo. Freddy López Cáceres
GUIA DE ESTUDIO Tecnología en Diseño Gráfico Autor: Tnlgo. Freddy López Cáceres 20 de Junio del 2014 INDICE Introducción....... 3 1. Interface y Área de trabajo..... 4 2. Vistas...... 5 3. Creación de Más detalles Contenido. Capítulo 1. Capítulo 3. Capítulo 2. Alfaomega. Arquitectura de computadoras - Patricia Quiroga
XI Contenido Capítulo 1 Evolución del procesamiento de datos... 1 1.1 Organización y arquitectura de una computadora... 2 1.2 Estratificación del software... 3 1.3 Evolución del procesamiento de datos... Más detalles TEMA 6: GESTIÓN DE ENTRADA/SALIDA
1. Introducción TEMA 6: GESTIÓN DE ENTRADA/SALIDA Función principal de un S.O.: controlar todos los dispositivos de E/S de la computadora. El Subsistema de E/S se encarga de Emitir órdenes a los dispositivos Más detalles Capítulo 12: Indexación y asociación
Capítulo 12: Indexación y asociación Conceptos básicos Índices ordenados Archivos de índice de árbol B+ Archivos de índice de árbol B Asociación estática Asociación dinámica Comparación entre indexación Más detalles ACTIVIDADES TEMA 1. EL LENGUAJE DE LOS ORDENADORES. 4º E.S.O- SOLUCIONES.
1.- a) Explica qué es un bit de información. Qué es el lenguaje binario? Bit es la abreviatura de Binary digit. (Dígito binario). Un bit es un dígito del lenguaje binario que es el lenguaje universal usado Más detalles Fundamentos de Computación e Informática Algoritmos Profesor : Fernando Espinoza S.
Fundamentos de Computación e Informática Algoritmos Profesor : Fernando Espinoza S. Objetivos Principales del Curso Comprender los sistemas computacionales modernos. Desarrollar la lógica de programación Más detalles Guía primeros pasos en el diseño 3D
Guía primeros pasos en el diseño 3D Por Mario Vera. (A.k.a. Klon) Avc.com@gmail.com Http://avc-co.com Introducción Este guía esta pensada para todas aquellas personas que desean iniciarse en el mundo del Más detalles 15. Arquitectura de los multiprocesadores. 16. Multiprocesadores de memoria compartida. 17. Multicomputadores.
UNIDAD TEMÁTICA 5: MULTIPROCESADORES. 15. Arquitectura de los multiprocesadores. 16. Multiprocesadores de memoria compartida. 17. Multicomputadores. 15-1 TEMA 15: ARQUITECTURA DE LOS MULTIPROCESADORES. Más detalles Programación orientada a
Programación orientada a objetos con Java Pedro Corcuera Dpto. Matemática Aplicada y Ciencias de la Computación Universidad de Cantabria corcuerp@unican.es Objetivos Presentar los conceptos de la programación Más detalles Denominación de la materia. créditos ECTS = 36 carácter = OBLIGATORIA SISTEMAS OPERATIVOS, SISTEMAS DISTRIBUIDOS Y REDES
Denominación de la materia SISTEMAS OPERATIVOS, SISTEMAS DISTRIBUIDOS Y REDES créditos ECTS = 36 carácter = OBLIGATORIA Ubicación dentro del plan de estudios y duración La materia está formada por 6 asignaturas Más detalles A continuación se representan los componentes básicos de un sistema computacional (ordenador). Figura 5.6.1 Componentes básicos de un ordenador.
5.6 ESTRUCTURA BÁSICA DE UN ORDENADOR. TERMINOLOGÍA INFORMÁTICA Las aeronaves modernas utilizan sofisticados sistemas de aviónica que necesitan de sistemas de computación basados en microprocesadores. Más detalles Grupo de Ingeniería Gráfica y Simulación Escuela Técnica Superior de Ingenieros Industriales Universidad Politécnica de Madrid ALTIMETRÍA DE OBRAS
Grupo de Ingeniería Gráfica y Simulación Escuela Técnica Superior de Ingenieros Industriales Universidad Politécnica de Madrid ALTIMETRÍA DE OBRAS ALTIMETRÍA DE OBRAS 1. INTRODUCCIÓN: PLANTA, TRAZA Y RASANTE... Más detalles Interfaz gráfica para el control de un brazo robótico educativo de 5 grados de libertad.
6to. Congreso Nacional de Mecatrónica, Noviembre 8-10, 007 Interfaz gráfica para el control de un brazo robótico educativo de 5 grados de libertad. Reyes Cocoletzi Lauro, Lechuga Sánchez Osvaldo, Sánchez Más detalles Prueba de software. Ingeniería de software Eduardo Ferreira, Martín Solari
Prueba de software Ingeniería de software Eduardo Ferreira, Martín Solari 1 Temario Prueba de software Estrategias, niveles y tipos de prueba Pruebas de caja blanca Pruebas de caja negra Proceso de prueba Más detalles Convivencia. Gestión del Sistema de Entrada/Salida
Convivencia Gestión del Sistema de Entrada/Salida Dra. Carolina Carolina Mañoso Mañoso Dpto. Dpto. Imformática Informática y y Automática.UNED Introducción (1/2) El sistema de Entrada/Salida es la parte Más detalles Representación de Datos. Una Introducción a los Sistemas Numéricos
Representación de Datos Una Introducción a los Sistemas Numéricos Tipos de Datos Datos Texto Número Imagen Audio Video Multimedia: Información que contiene números, texto, imágenes, audio y video. Como Más detalles Sistemas con Microcontroladores y Microprocesadores
Sistemas con Microcontroladores y Microprocesadores Objetivos Al terminar el curso, el estudiante estará capacitado para: 1. Entender funcionalmente cómo trabaja un sistema de computadora: Describir los Más detalles CONTENIDO. 1. Introducción. 2. Reseña histórica del computador. 3. Definición de computador.
CONTENIDO 1. Introducción. 2. Reseña histórica del computador. 3. Definición de computador. 4. Sistemas numéricos. 4.1 Generalidades. 42 Sistema binario. 4.3 Sistema octal,. 4.4 Sistema decimal. 4.5 Sistema Más detalles UNIDADES FUNCIONALES DEL ORDENADOR TEMA 3
UNIDADES FUNCIONALES DEL ORDENADOR TEMA 3 INTRODUCCIÓN El elemento hardware de un sistema básico de proceso de datos se puede estructurar en tres partes claramente diferenciadas en cuanto a sus funciones: Más detalles Capítulo V Operaciones Booleanas
85 Capítulo V Operaciones Booleanas 5.1 Introducción Es muy posible que en muchos casos sea necesario comparar dos objetos y determinar cuál es su parte común. Esto implica intersectar los dos objetos Más detalles Estructura y Tecnología de Computadores (ITIG) Luis Rincón Córcoles Ángel Serrano Sánchez de León
Estructura y Tecnología de Computadores (ITIG) Luis Rincón Córcoles Ángel Serrano Sánchez de León Programa. Introducción. 2. Elementos de almacenamiento. 3. Elementos de proceso. 4. Elementos de interconexión. Más detalles Estructura de Datos. Unidad I Tipos de Datos
Estructura de Datos Unidad I Tipos de Datos Conceptos Básicos Algoritmo: es una secuencia finita de pasos o instrucciones ordenadas crono-lógicamente que describen un método para resolver un problema específico. Más detalles CUALIFICACIÓN PROGRAMACIÓN DE SISTEMAS INFORMÁTICOS PROFESIONAL. Nivel 3. Versión 6. Actualización
Página 1 de 19 CUALIFICACIÓN PROGRAMACIÓN DE SISTEMAS INFORMÁTICOS PROFESIONAL Familia Profesional Informática y Comunicaciones Nivel 3 Código IFC303_3 Versión 6 Situación Contraste externo Actualización Más detalles Prof. Sandra Baldassarri. Objetivos del modelado. ordenador. Modelado Geométrico
Clasificación de los modelos geométricos Representación de objetos en 3D Modelos de Puntos Modelos de Curvas y Superficies Modelos de Sólidos Prof. Sandra Baldassarri Objetivos del modelado Modelos geométricos Más detalles Unidad 1: Conceptos generales de Sistemas Operativos.
Unidad 1: Conceptos generales de Sistemas Operativos. Tema 1: Introducción: 1.1 Introducción: Qué es un sistema operativo?. 1.2 Conceptos clave de un sistema operativo. 1.3 El sistema operativo como administrador Más detalles ÁLGEBRA LINEAL - Año 2012
UNIVERSIDAD NACIONAL DE RÍO CUARTO FACULTAD DE CIENCIAS ECONÓMICAS ÁLGEBRA LINEAL - Año 0 Notas de Cátedra correspondientes a la UNIDAD SIETE PROGRAMACIÓN LINEAL * INECUACIONES Se denomina inecuación a Más detalles Luis Esteban Peñaherrera Sandoval Ing. de Software
DESARROLLO DE UN SISTEMA DE APRENDIZAJE INTERACTIVO PARA EL ÁREA DEL IDIOMA INGLÉS CON EL SOPORTE DEL KINECT DE MICROSOFT- CASO PRÁCTICO PARA NIÑOS DE 6 A 8 AÑOS EN EL CENTRO EDUCATIVO ILINIZAS. Luis Esteban Más detalles 1. PRESENTACIÓN GLOBAL LEAN.
GLOBAL LEAN APPS 1. PRESENTACIÓN GLOBAL LEAN. GLOBALLEAN apuesta por mejorar la competitividad de las empresas. Y una herramienta clave para conseguir mejoras de competitividad que deriven en resultados Más detalles UNIVERSIDAD NACIONAL DE INGENIERÍA CENTRO DE EXTENSIÓN Y PROYECCIÓN SOCIAL
UNIVERSIDAD NACIONAL DE INGENIERÍA ALGORITMOS Y ESTRUCTURA CERTIFICA ORGANIZA Mayor Información: informes@uni.edu.pe Visite Nuestra Web http://www.ceps.uni.edu..pe OBJETIVOS GENERALES - Diseñar algoritmos Más detalles Procesamiento Digital De Imágenes
Introducción 1 Procesamiento Digital De Imágenes El término procesamiento digital de imágenes versa sobre la manipulación y análisis de imágenes por computadora Se utiliza mayormente para extraer/revelar Más detalles GUADALINEX Y EL DISEÑO ASISTIDO POR ORDENADOR: INTRODUCCIÓN A QCAD Pablo E. Romero Carrillo
GUADALINEX Y EL DISEÑO ASISTIDO POR ORDENADOR: INTRODUCCIÓN A QCAD Pablo E. Romero Carrillo 1 INTRODUCCIÓN En este apasionante mundo del software libre, el código abierto y la Web 2.0, no podían faltar Más detalles CAPÍTULO 2 PROCESAMIENTO DIGITAL DE IMÁGENES
CAPÍTULO PROCESAMIENTO DIGITAL DE IMÁGENES En este capítulo se presentan de manera breve, una explicación de la visión, las imágenes digitales y como son capturadas por medios electrónicos, el campo encargado Más detalles Sistemas Operativos Tema 1: conceptos generales. 1998-2008 José Miguel Santos Alexis Quesada Francisco Santana
Sistemas Operativos Tema 1: conceptos generales 1998-2008 José Miguel Santos Alexis Quesada Francisco Santana 1 Contenidos Qué es un SO? Evolución histórica de los SO Tipos de sistemas informáticos 2 Elementos Más detalles I.E.S.MEDITERRÁNEO CURSO 2015 2016 DPTO DE MATEMÁTICAS PROGRAMA DE RECUPERACIÓN DE LOS APRENDIZAJES NO ADQUIRIDOS EN MATEMÁTICAS DE 3º DE E.S.O.
PROGRAMA DE RECUPERACIÓN DE LOS APRENDIZAJES NO ADQUIRIDOS EN MATEMÁTICAS DE 3º DE E.S.O. Este programa está destinado a los alumnos que han promocionado a cursos superiores sin haber superado esta materia. Más detalles CUALIFICACIÓN SISTEMAS DE GESTIÓN DE INFORMACIÓN PROFESIONAL. Nivel 3. Versión 5 Situación RD 1201/2007 Actualización
Página 1 de 16 CUALIFICACIÓN SISTEMAS DE GESTIÓN DE INFORMACIÓN PROFESIONAL Familia Profesional Informática y Comunicaciones Nivel 3 Código IFC304_3 Versión 5 Situación RD 1201/2007 Actualización Competencia Más detalles UNIDAD DIDÁCTICA: ELECTRÓNICA DIGITAL
IES PABLO RUIZ PICASSO EL EJIDO (ALMERÍA) CURSO 2013-2014 UNIDAD DIDÁCTICA: ELECTRÓNICA DIGITAL ÍNDICE 1.- INTRODUCCIÓN A LA ELECTRÓNICA DIGITAL 2.- SISTEMA BINARIO 2.1.- TRANSFORMACIÓN DE BINARIO A DECIMAL Más detalles Universidad Autónoma de Manizales Departamento de Ciencias Computacionales
Universidad Autónoma de Manizales Departamento de Ciencias Computacionales ASIGNATURA CÓDIGO 103013 Organización de Computadores NÚMERO DE CRÉDITOS 3 Trabajo Presencial 3 PRERREQUISITOS Trabajo dirigido Más detalles Memoria de Acceso Aleatorio. Dispositivos de Almacenamiento Masivo
Memoria. Definiciones Componente de una computadora que retiene datos informáticos durante algún intervalo de tiempo. Consiste en la capacidad de registrar datos y volver a incorporarlos en determinado Más detalles Edwin Chiguano, Nathaly Moreno, Luis Corrales. Facultad de Ingeniería Eléctrica y Electrónica, EPN Quito, Ecuador
Diseño e implementación de un sistema traductor de lenguaje de señas de manos a un lenguaje de texto mediante visión artificial en un ambiente controlado Edwin Chiguano, Nathaly Moreno, Luis Corrales Facultad Más detalles Rational Unified Process (RUP)
Rational Unified Process (RUP) Este documento presenta un resumen de Rational Unified Process (RUP). Se describe la historia de la metodología, características principales y estructura del proceso. RUP Más detalles Fundamentos del diseño de software
Fundamentos del diseño de software El diseño es el primer paso de la fase de desarrollo de cualquier producto o sistema de ingeniería. Definición de diseño según Taylor Proceso de aplicar distintas técnicas Más detalles Administración de memoria: Funciones y operaciones
Administración de memoria: Funciones y operaciones Facultad de Ingeniería, UNAM Instituto de Investigaciones Económicas, UNAM Índice Introducción 1 Introducción 2 3 4 5 El administrador de memoria Es otra Más detalles TEMA 5: Vistas en 3D
TEMA 5: Vistas en 3D Índice. Proecciones. Proección Paralela 2. Proección Perspectiva 2. Transformación de Vista. Introducción 2. Parametros de vista 3. Obtención de los vectores del nuevo sistema 4. Construcción Más detalles Organización del Computador 1. Máquina de von Neumann Jerarquía de Niveles
Organización del Computador 1 Máquina de von Neumann Jerarquía de Niveles Inicios de la computación Turing y Church sientan las bases teóricas de la computación Máquina de Turing Máquina teórica compuesta Más detalles Generalidades Computacionales
Capítulo 2 Generalidades Computacionales 2.1. Introducción a los Computadores Definición: Un computador es un dispositivo electrónico que puede transmitir, almacenar, recuperar y procesar información (datos). Más detalles RESUMEN INFORMATIVO PROGRAMACIÓN DIDÁCTICA CURSO 2015 /2016
RESUMEN INFORMATIVO PROGRAMACIÓN DIDÁCTICA CURSO 2015 /2016 DEPARTAMENTO: MATEMÁTICAS MATERIA: MATEMÁTICAS ACADÉMICAS CURSO: 3º ESO OBJETIVOS DEL ÁREA DE MATEMÁTICAS A LAS ENSEÑANZAS ACADÉMICAS 3º ESO Más detalles Animaciones. 1. Introducción
Animaciones 1. Introducción Entre las capacidades de diseño 3D de Autodesk Inventor, está la creación de imágenes 3D renderizadas. Autodesk Inventor permite crear renderizaciones y animaciones fotorrealistas Más detalles COMPUTADORES MULTINUCLEO. Stallings W. Computer Organization and Architecture 8ed
COMPUTADORES MULTINUCLEO Stallings W. Computer Organization and Architecture 8ed Computador multinucleo Un computador multinúcleocombina dos o mas procesadores (llamados núcleos) en una única pieza de Más detalles MICROCURRÍCULO (SYLLABUS)
I. INFORMACIÓN GENERAL NOMBRE DEL CURSO: LENGUAJES DE INGENIERÍA CÓDIGO 103110 UNIDAD ACADÉMICA NIVEL ACADÉMICO DEL CURSO COMPONENTE DE FORMACIÓN FACULTAD INGENIERÍA POSGRADUAL PROGRAMA DEPARTAMENTO INDUSTRIAL Más detalles CAPITULO 1 REALIDAD VIRTUAL
CAPITULO 1 REALIDAD VIRTUAL 12 1.1 Acerca de Realidad Virtual El hombre a lo largo de su historia ha tenido interés por representar la realidad en alguna forma. Esto se puede ver desde las pinturas rupestres, Más detalles INICIANDO CON FLASH ESPACIO DE TRABAJO
ESPACIO DE TRABAJO INICIANDO CON FLASH Teniendo instalado el programa podemos ejecutarlo desde el botón de inicio, buscando la carpeta de adobe, dentro de ella seleccionamos el programa de Flash CS4 (básico Más detalles 2017 © DocPlayer.es Política de privacidad | Condiciones del servicio | Feedback

References: resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución