El renderizado por software es el proceso de generar una imagen a partir de un modelo por medio de software de computadora. En el contexto del renderizado de gráficos por computadora , el renderizado por software se refiere a un proceso de renderizado que no depende de los ASIC de hardware gráfico , como una tarjeta gráfica . El renderizado se lleva a cabo completamente en la CPU . Renderizar todo con la CPU (de propósito general) tiene la principal ventaja de que no está restringido a las capacidades (limitadas) del hardware gráfico, pero la desventaja es que se necesitan más transistores 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 desenfoque 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 prerenderizado (también llamado renderizado fuera de línea). El renderizado en tiempo real se utiliza para renderizar una escena de forma interactiva, como en los juegos de computadora en 3D , y generalmente cada fotograma debe renderizarse en unos pocos milisegundos. El renderizado fuera de línea 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.
En el renderizado en tiempo real, el enfoque está puesto 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 geometría 3D ( el 3D real se limitaba a polígonos planos o sombreados con 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 recurría 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 similares a los títulos 3D modernos, que permitían 6DoF completos , fue Descent , que presentaba modelos 3D hechos completamente de polígonos triangulares con textura de mapa de bits. Los gráficos basados en vóxeles también ganaron popularidad para la representación rápida y relativamente detallada del terreno, como en Delta Force , pero el popular hardware de función fija finalmente hizo imposible su uso. Quake presenta un renderizador 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 una 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, cuentan con renderizadores de software capaces de producir una calidad y un rendimiento agradables en las CPU de ese período. Uno de los últimos juegos AAA sin un renderizador de hardware fue Outcast , que presentaba tecnología de vóxel avanzada pero también filtrado de texturas y mapeo de relieve como los que se encuentran en el hardware gráfico.
En los mercados de consolas de videojuegos y juegos arcade , la evolución del 3D fue más abrupta, ya que siempre habían dependido en gran medida de chipsets de un solo propósito. Las consolas de 16 bits obtuvieron cartuchos aceleradores RISC en juegos como StarFox y Virtua Racing que implementaron la renderización de software a través de conjuntos de instrucciones personalizados. Jaguar y 3DO fueron las primeras consolas en comercializarse con hardware 3D, pero no fue hasta la PlayStation que dichas características comenzaron a usarse en la mayoría de los juegos.
Los juegos para niños y jugadores ocasionales (que utilizan sistemas obsoletos o sistemas destinados principalmente a aplicaciones de oficina) durante finales de la década de 1990 y principios de la década de 2000 solían utilizar un renderizador de software como alternativa. Por ejemplo, Toy Story 2: Buzz Lightyear to the Rescue ofrece la opción de seleccionar el renderizado por hardware o software antes de jugar, mientras que otros, como Half-Life, tienen el modo de software predeterminado y se pueden ajustar para utilizar OpenGL o DirectX en el menú Opciones. Algunos programas de modelado 3D también cuentan con renderizadores de software para la visualización. Y, por último, la emulación y verificación del hardware también requiere un renderizador de software. Un ejemplo de esto último es el rasterizador de referencia Direct3D .
Pero incluso para gráficos de alta gama, el "arte" del renderizado de software no ha muerto por completo. Si bien las primeras tarjetas gráficas eran mucho más rápidas que los renderizadores 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 la apariencia de los juegos. El renderizado de software no tiene restricciones porque se ejecuta un programa arbitrario. Entonces, las tarjetas gráficas reintrodujeron esta programabilidad, al ejecutar pequeños programas por vértice y por píxel / fragmento , también conocidos como shaders . Los lenguajes de sombreado, como High Level Shader Language (HLSL) para DirectX o OpenGL Shading Language (GLSL), son lenguajes de programación similares a C para shaders y comienzan a mostrar cierta semejanza con el renderizado de software (función arbitraria).
Desde la adopción del hardware de gráficos como el principal medio para la renderización en tiempo real, el rendimiento de la CPU ha crecido de manera constante como siempre. Esto permitió que surgieran nuevas tecnologías de renderización de software. Aunque en gran medida eclipsadas por el rendimiento de la renderización de hardware, algunos renderizadores de software en tiempo real modernos logran combinar un amplio conjunto de características y un rendimiento razonable (para un renderizador de software), haciendo uso de compilación dinámica especializada y extensiones avanzadas del conjunto de instrucciones como SSE . Aunque hoy en día el dominio de la renderización de hardware sobre la renderización de software es indiscutible debido al rendimiento incomparable, las características y la innovación continua, algunos creen que las CPU y las GPU convergerán de una forma u otra y la línea entre la renderización de software y hardware se desvanecerá. [2]
Por diversas razones, como fallas de hardware, controladores dañados, 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 tubería de gráficos.
Como resultado, hay una serie de paquetes de software de propósito general capaces de reemplazar o ampliar un acelerador gráfico de hardware existente, incluidos:
A diferencia de la renderización en tiempo real, en la pre-renderización el rendimiento es sólo una prioridad secundaria. Se utiliza principalmente en la industria cinematográfica para crear renderizaciones de alta calidad de escenas realistas. Muchos de los efectos especiales de las películas actuales se crean total o parcialmente mediante gráficos de computadora. Por ejemplo, el personaje de Gollum en las películas de Peter Jackson El Señor de los Anillos es completamente imágenes generadas por computadora (CGI). También en las películas de animación , la CGI está ganando popularidad. Cabe destacar que Pixar ha producido una serie de películas como Toy Story y Buscando a Nemo , y la Blender Foundation la primera película abierta del mundo , El sueño de los elefantes .
Debido a la necesidad de una gran calidad y diversidad de efectos, la renderización offline requiere mucha flexibilidad. Aunque el hardware comercial de gráficos en tiempo real es cada día de mayor calidad y más programable, la mayoría de los CGI fotorrealistas aún requieren renderización por software. RenderMan de Pixar , por ejemplo, permite sombreadores de longitud y complejidad ilimitadas, lo que exige un procesador de uso general. El hardware más antiguo también es incapaz de utilizar técnicas de alto realismo como el trazado de rayos y la iluminación global .