La renderización por software es el proceso de generar una imagen a partir de un modelo por medio de un software de computadora. En el contexto del renderizado de gráficos por computadora , el renderizado de software se refiere a un proceso de renderizado que no depende de los ASIC de hardware de gráficos , como una tarjeta gráfica . La renderización se lleva a cabo íntegramente en la CPU . Renderizar todo con la CPU (de uso general) tiene la principal ventaja de que no está restringido a las capacidades (limitadas) del hardware de gráficos, sino la desventaja de que se necesitan más semiconductores para obtener la misma velocidad.
El renderizado se utiliza en arquitectura, simuladores, videojuegos, películas y efectos visuales de televisión y visualización de diseños. El renderizado es el último paso en un proceso de animación y da la apariencia final a los modelos y la animación con efectos visuales como sombreado, mapeo de texturas, sombras, reflejos y desenfoques de movimiento. [1] El renderizado se puede dividir en dos categorías principales: renderizado en tiempo real (también conocido como renderizado en línea) y renderizado previo (también llamado renderizado sin conexión). El renderizado en tiempo real se utiliza para renderizar de forma interactiva una escena, como en los juegos de ordenador en 3D , y generalmente cada fotograma debe renderizarse en unos pocos milisegundos. El renderizado sin conexión se utiliza para crear imágenes y películas realistas, donde cada fotograma puede tardar horas o días en completarse, o para la depuración de códigos gráficos complejos por parte de los programadores.
Procesamiento de software en tiempo real
Para la renderización en tiempo real, la atención se centra en el rendimiento. Los primeros renderizadores de software en tiempo real con mapas de texturas para PC utilizaban muchos trucos para crear la ilusión de la geometría 3D (el 3D verdadero se limitaba a polígonos planos o con sombra de Gouraud empleados principalmente en simuladores de vuelo ). Ultima Underworld , por ejemplo, permitía una forma limitada de mirar hacia arriba y hacia abajo, pisos inclinados y habitaciones sobre habitaciones, pero recurrió a sprites para todos los objetos detallados. La tecnología utilizada en estos juegos se clasifica actualmente como 2.5D .
Uno de los primeros juegos arquitectónicamente similar a los títulos 3D modernos, que permite 6DoF completo , fue Descent , que presentaba modelos 3D completamente hechos a partir de polígonos triangulares con textura de mapa de bits . Los gráficos basados en vóxeles también ganaron popularidad para el renderizado de terreno rápido y relativamente detallado, como en Delta Force , pero el popular hardware de función fija eventualmente hizo imposible su uso. Quake cuenta con un procesador de software eficiente de Michael Abrash y John Carmack . Con su popularidad, Quake y otros juegos 3D poligonales de esa época ayudaron a las ventas de tarjetas gráficas , y más juegos comenzaron a usar API de hardware como DirectX y OpenGL . Aunque el renderizado de software cayó como tecnología de renderizado principal, muchos juegos hasta bien entrada la década de 2000 todavía tenían un renderizador de software como respaldo, Unreal y Unreal Tournament, por ejemplo, presentadores de software capaces de producir calidad y rendimiento agradables en las CPU de ese período. Uno de los últimos juegos AAA sin un procesador de hardware fue Outcast , que presentaba tecnología de vóxel avanzada, pero también filtrado de texturas y mapeo de protuberancias como se encuentra en el hardware de gráficos.
En los mercados de las consolas de videojuegos y los juegos de arcade , la evolución del 3D fue más abrupta, ya que siempre habían dependido en gran medida de los conjuntos de chips de un solo propósito. Las consolas de 16 bits obtuvieron cartuchos aceleradores RISC en juegos como StarFox y Virtua Racing, que implementaron el procesamiento de software a través de conjuntos de instrucciones personalizados. La Jaguar y la 3DO fueron las primeras consolas que se enviaron con hardware 3D, pero no fue hasta la PlayStation que estas características se empezaron a utilizar en la mayoría de los juegos.
Los juegos para niños y jugadores ocasionales (que usan sistemas obsoletos o sistemas destinados principalmente a aplicaciones de oficina) desde finales de la década de 1990 hasta principios de la de 2000 solían utilizar un renderizador de software como alternativa. Por ejemplo, Toy Story 2: Buzz Lightyear to the Rescue tiene la opción de seleccionar renderizado por hardware o software antes de jugar el juego, mientras que otros como Half-Life tienen el modo de software predeterminado y se pueden ajustar para usar OpenGL o DirectX en el menú de Opciones. . Algunos software de modelado 3D también cuentan con renderizadores de software para visualización. Y finalmente, la emulación y verificación de hardware también requiere un renderizador de software. Un ejemplo de este último es el rasterizador de referencia Direct3D .
Pero incluso para los gráficos de alta gama, el "arte" de la renderización por software no se ha extinguido por completo. Si bien las primeras tarjetas gráficas eran mucho más rápidas que los procesadores de software y originalmente tenían mejor calidad y más funciones, restringían al desarrollador al procesamiento de píxeles de "función fija". Rápidamente surgió la necesidad de diversificar el aspecto de los juegos. El procesamiento de software no tiene restricciones porque se ejecuta un programa arbitrario. Entonces, las tarjetas gráficas reintrodujeron esta capacidad de programación, ejecutando pequeños programas por vértice y por píxel / fragmento , también conocidos como sombreadores . Los lenguajes de sombreado, como el lenguaje de sombreado de alto nivel (HLSL) para DirectX o el lenguaje de sombreado de OpenGL (GLSL), son lenguajes de programación de tipo C para sombreadores y comienzan a mostrar cierta semejanza con la representación del software (función arbitraria).
Desde la adopción del hardware de gráficos como medio principal para el renderizado en tiempo real, el rendimiento de la CPU ha crecido de manera constante como siempre. Esto permitió que surgieran nuevas tecnologías de renderizado de software. Aunque en gran medida eclipsados por el rendimiento del renderizado por hardware, algunos renderizadores de software modernos en tiempo real logran combinar un amplio conjunto de funciones y un rendimiento razonable (para un renderizador de software), haciendo uso de la compilación dinámica especializada y extensiones de conjuntos de instrucciones avanzadas como SSE . Aunque hoy en día el dominio del renderizado por hardware sobre el renderizado por software es indiscutible debido al rendimiento incomparable, las características y la innovación continua, algunos creen que las CPU y GPU convergerán de una forma u otra y la línea entre el renderizado de software y hardware se desvanecerá. [2]
Respaldo de software
Por varias razones, como fallas de hardware, controladores rotos, emulación, control de calidad, programación de software, diseño de hardware y limitaciones de hardware, a veces es útil dejar que la CPU asuma algunas o todas las funciones en una canalización de gráficos.
Como resultado, hay una serie de paquetes de software de uso general capaces de reemplazar o aumentar un acelerador gráfico de hardware existente, que incluyen:
- Pixomatic de RAD Game Tools , vendido como software intermedio destinado a la vinculación estática dentro del software cliente D3D 7–9.
- SwiftShader , una biblioteca vendida como middleware destinada a combinarse con el software cliente D3D9 y OpenGL ES 2.
- Los renderizadores swrast, softpipe y LLVMpipe dentro de Mesa funcionan como un calce a nivel del sistema para emular un dispositivo de hardware OpenGL 1.4–3.2.
- WARP , proporcionado desde Windows Vista por Microsoft, que funciona a nivel de sistema para proporcionar una rápida emulación D3D 9.1 y superior. Esto se suma al extremadamente lento rasterizador de referencia basado en software que Microsoft siempre ha proporcionado a los desarrolladores.
- El procesador de software de Apple en CGL , proporcionado en Mac OS X por Apple, que funciona a nivel del sistema para proporcionar una emulación rápida de OpenGL 1.1–4.1.
Pre-renderizado
A diferencia del renderizado en tiempo real, el rendimiento es solo una segunda prioridad con el renderizado previo. Se utiliza principalmente en la industria cinematográfica para crear representaciones de alta calidad de escenas realistas. Muchos efectos especiales en las películas de hoy son creados total o parcialmente por gráficos de computadora. Por ejemplo, el personaje de Gollum en las películas de Peter Jackson El señor de los anillos son imágenes completamente generadas por computadora (CGI). También para las películas de animación , CGI está ganando popularidad. En particular, Pixar ha producido una serie de películas como Toy Story y Finding Nemo , y la Blender Foundation, la primera película abierta del mundo, Elephants Dream .
Debido a la necesidad de una gran calidad y diversidad de efectos, el renderizado sin conexión requiere mucha flexibilidad. A pesar de que el hardware comercial de gráficos en tiempo real se está volviendo de mayor calidad y más programable día a día, la mayoría de los CGI fotorrealistas aún requieren renderizado por software. RenderMan de Pixar , por ejemplo, permite sombreadores de longitud y complejidad ilimitadas, lo que exige un procesador de uso general. Las técnicas de alto realismo como el trazado de rayos y la iluminación global también son inherentemente inadecuadas para la implementación de hardware y, en la mayoría de los casos, se realizan puramente en software.
Ver también
- Gráficos 3D por computadora
Referencias
- ^ "Diseño en VIVO - Visualizaciones interactivas | Autodesk" . Archivado desde el original el 21 de febrero de 2014 . Consultado el 20 de agosto de 2016 .
- ^ Valich, Theo (13 de diciembre de 2012). "Tim Sweeney, Parte 2:" DirectX 10 es la última API de gráficos relevante "| TG Daily" . TG Diariamente . Archivado desde el original el 4 de marzo de 2016 . Consultado el 7 de noviembre de 2016 .