Los gráficos por computadora en tiempo real o renderizado en tiempo real son el subcampo de los gráficos por computadora enfocado en producir y analizar imágenes en tiempo real . El término puede referirse a cualquier cosa, desde renderizar la interfaz gráfica de usuario ( GUI ) de una aplicación hasta el análisis de imágenes en tiempo real , pero se usa con más frecuencia en referencia a gráficos por computadora 3D interactivos , que generalmente utilizan una unidad de procesamiento gráfico (GPU). Un ejemplo de este concepto es un videojuego que renderiza rápidamente entornos 3D cambiantes para producir una ilusión de movimiento.
Desde su invención , las computadoras han sido capaces de generar imágenes 2D, como líneas simples, imágenes y polígonos , en tiempo real. Sin embargo, la representación rápida de objetos 3D detallados es una tarea abrumadora para los sistemas tradicionales basados en la arquitectura de Von Neumann . Una solución temprana para este problema fue el uso de sprites , imágenes 2D que podían imitar gráficos 3D.
En la actualidad existen diferentes técnicas de renderizado , como el trazado de rayos y la rasterización . Mediante el uso de estas técnicas y hardware avanzado, las computadoras pueden renderizar imágenes con la suficiente rapidez para crear la ilusión de movimiento y, al mismo tiempo, aceptar la entrada del usuario. Esto significa que el usuario puede responder a las imágenes renderizadas en tiempo real, lo que produce una experiencia interactiva.
El objetivo de los gráficos por computadora es generar imágenes generadas por computadora , o fotogramas , utilizando ciertas métricas deseadas. Una de esas métricas es la cantidad de fotogramas generados en un segundo determinado. Los sistemas de gráficos por computadora en tiempo real se diferencian de los sistemas de renderización tradicionales (es decir, no en tiempo real) en que los gráficos no en tiempo real generalmente dependen del trazado de rayos . En este proceso, se trazan millones o miles de millones de rayos desde la cámara hasta el mundo para una renderización detallada; esta costosa operación puede llevar horas o días para renderizar un solo fotograma.
Los sistemas de gráficos en tiempo real deben renderizar cada imagen en menos de 1/30 de segundo. El trazado de rayos es demasiado lento para estos sistemas; en su lugar, emplean la técnica de rasterización de triángulos de búfer z . En esta técnica, cada objeto se descompone en primitivas individuales, generalmente triángulos. Cada triángulo se posiciona, gira y escala en la pantalla, y el hardware rasterizador (o un emulador de software) genera píxeles dentro de cada triángulo. Estos triángulos luego se descomponen en unidades atómicas llamadas fragmentos que son adecuadas para mostrar en una pantalla de visualización . Los fragmentos se dibujan en la pantalla utilizando un color que se calcula en varios pasos. Por ejemplo, se puede utilizar una textura para "pintar" un triángulo en función de una imagen almacenada, y luego el mapeo de sombras puede alterar los colores de ese triángulo en función de la línea de visión hacia las fuentes de luz.
Los gráficos en tiempo real optimizan la calidad de la imagen sujeta a restricciones de tiempo y hardware. Las GPU y otros avances aumentaron la calidad de imagen que los gráficos en tiempo real pueden producir. Las GPU son capaces de manejar millones de triángulos por cuadro, y el hardware moderno de clase DirectX / OpenGL es capaz de generar efectos complejos, como volúmenes de sombras , desenfoque de movimiento y generación de triángulos , en tiempo real. El avance de los gráficos en tiempo real se evidencia en las mejoras progresivas entre los gráficos de juego reales y las escenas pre-renderizadas que tradicionalmente se encuentran en los videojuegos. [1] Las escenas de corte generalmente se renderizan en tiempo real y pueden ser interactivas . [2] Aunque la brecha en calidad entre los gráficos en tiempo real y los gráficos tradicionales fuera de línea se está reduciendo, la renderización fuera de línea sigue siendo mucho más precisa.
Los gráficos en tiempo real se emplean normalmente cuando la interactividad (por ejemplo, la retroalimentación del jugador) es crucial. Cuando se utilizan gráficos en tiempo real en películas, el director tiene control total de lo que se debe dibujar en cada cuadro, lo que a veces puede implicar una larga toma de decisiones. Por lo general, participan equipos de personas en la toma de estas decisiones.
En los gráficos por ordenador en tiempo real, el usuario normalmente utiliza un dispositivo de entrada para influir en lo que se va a dibujar en la pantalla. Por ejemplo, cuando el usuario quiere mover un personaje en la pantalla, el sistema actualiza la posición del personaje antes de dibujar el siguiente cuadro. Normalmente, el tiempo de respuesta de la pantalla es mucho más lento que el del dispositivo de entrada; esto se justifica por la enorme diferencia entre el tiempo de respuesta (rápido) del movimiento de un ser humano y la velocidad de perspectiva (lenta) del sistema visual humano . Esta diferencia también tiene otros efectos: como los dispositivos de entrada deben ser muy rápidos para seguir el ritmo de la respuesta del movimiento humano, los avances en los dispositivos de entrada (por ejemplo, el actual [¿ cuándo? ] mando de Wii) suelen tardar mucho más en lograrse que los avances comparables en los dispositivos de visualización.
Otro factor importante que controla los gráficos por computadora en tiempo real es la combinación de física y animación . Estas técnicas dictan en gran medida lo que se debe dibujar en la pantalla, especialmente dónde se deben dibujar los objetos en la escena. Estas técnicas ayudan a imitar de manera realista el comportamiento del mundo real (la dimensión temporal , no las dimensiones espaciales ), lo que aumenta el grado de realismo de los gráficos por computadora.
La vista previa en tiempo real con software de gráficos , especialmente al ajustar los efectos de iluminación , puede aumentar la velocidad de trabajo. [3] Algunos ajustes de parámetros en el software de generación de fractales se pueden realizar mientras se visualizan los cambios en la imagen en tiempo real.
El pipeline de renderizado de gráficos ("rendering pipeline" o simplemente "pipeline") es la base de los gráficos en tiempo real. [4] Su función principal es renderizar una imagen bidimensional en relación con una cámara virtual, objetos tridimensionales (un objeto que tiene ancho, largo y profundidad), fuentes de luz, modelos de iluminación, texturas y más.
La arquitectura del proceso de renderizado en tiempo real se puede dividir en etapas conceptuales: aplicación, geometría y rasterización .
La etapa de aplicación es responsable de generar "escenas" o configuraciones 3D que se dibujan en una pantalla 2D. Esta etapa se implementa en software que los desarrolladores optimizan para mejorar el rendimiento. Esta etapa puede realizar procesamientos como detección de colisiones , técnicas de aceleración, animación y retroalimentación de fuerza, además de manejar la entrada del usuario.
La detección de colisiones es un ejemplo de una operación que se llevaría a cabo en la etapa de aplicación. La detección de colisiones utiliza algoritmos para detectar y responder a las colisiones entre objetos (virtuales). Por ejemplo, la aplicación puede calcular nuevas posiciones para los objetos que colisionan y proporcionar retroalimentación a través de un dispositivo de retroalimentación de fuerza, como un controlador de juego vibratorio.
La etapa de aplicación también prepara los datos gráficos para la siguiente etapa. Esto incluye la animación de texturas, la animación de modelos 3D, la animación mediante transformaciones y la deformación de la geometría. Por último, produce primitivas (puntos, líneas y triángulos) basadas en la información de la escena y alimenta esas primitivas a la etapa de geometría del proceso.
La etapa de geometría manipula polígonos y vértices para calcular qué dibujar, cómo dibujarlo y dónde dibujarlo. Por lo general, estas operaciones las realizan hardware especializado o GPU. [5] Las variaciones en el hardware gráfico hacen que la "etapa de geometría" pueda implementarse en varias etapas consecutivas.
Antes de que el modelo final se muestre en el dispositivo de salida, el modelo se transforma en múltiples espacios o sistemas de coordenadas . Las transformaciones mueven y manipulan objetos alterando sus vértices. Transformación es el término general para las cuatro formas específicas de manipular la forma o la posición de un punto, una línea o una forma.
Para dar al modelo un aspecto más realista, normalmente se establecen una o más fuentes de luz durante la transformación. Sin embargo, no se puede llegar a esta etapa sin transformar primero la escena 3D en espacio de visualización. En el espacio de visualización, el observador (cámara) normalmente se coloca en el origen. Si se utiliza un sistema de coordenadas diestro (que se considera estándar), el observador mira en la dirección del eje z negativo con el eje y apuntando hacia arriba y el eje x apuntando hacia la derecha.
La proyección es una transformación que se utiliza para representar un modelo 3D en un espacio 2D. Los dos tipos principales de proyección son la proyección ortográfica (también llamada paralela) y la proyección en perspectiva . La característica principal de una proyección ortográfica es que las líneas paralelas permanecen paralelas después de la transformación. La proyección en perspectiva utiliza el concepto de que si la distancia entre el observador y el modelo aumenta, el modelo parece más pequeño que antes. Básicamente, la proyección en perspectiva imita la vista humana.
El recorte es el proceso de eliminar elementos primitivos que están fuera del cuadro de visualización para facilitar la etapa de rasterización. Una vez que se eliminan esos elementos primitivos, los que quedan se dibujarán en nuevos triángulos que llegarán a la siguiente etapa.
El propósito del mapeo de pantalla es descubrir las coordenadas de los primitivos durante la etapa de recorte.
La etapa del rasterizador aplica color y convierte los elementos gráficos en píxeles o elementos de imagen.