¿Por qué usaría el renderizado de software sobre el renderizado de hardware hoy en día?

13

A diferencia de la CPU o la representación de software, supongo.

¿Por lo general, no todo el renderizado actual se basará en GPU, ya que usaría OpenGL o Direct X?

¿Podría alguien darme alguna información aquí, no puede encontrar ninguna respuesta adecuada?

usuario3333072
fuente

Respuestas:

7

Como ya sabes claramente qué es el procesamiento de GPU ... déjame responder lo que pareces estar preguntando.

Tradicionalmente, el renderizado de hardware conlleva el estigma de ser muy complejo. Esto se debe en gran parte al diseño de las interfaces de programación de aplicaciones (API) que no han sido bien orientadas a ocultar la complejidad; es decir, la curva de aprendizaje ha sido empinada. También se debe en parte a la comprensión de que escribir aplicaciones 3D, para las cuales estas API están muy orientadas, es mucho más complejo que escribir 2D. Re complejidad de la interfaz, me refiero a interfaces como OpenGL y DirectX. Re 3D vs 2D, me refiero a las matemáticas y la geometría que se emplean en la construcción de escenas 3D, frente a la simplicidad con la que la mente no entrenada puede abordar problemas 2D.

Sin embargo, en los últimos años, no solo el material de aprendizaje se ha vuelto mucho más disponible, sino que muchas bibliotecas que envuelven las complejidades subyacentes de estas interfaces están disponibles y han reducido las barreras de entrada. Todo esto ha retroalimentado un ciclo de mayor interés que ya estaba presente debido a la creciente importancia de la visualización, las interfaces de usuario ingeniosas y el rendimiento en dispositivos de baja potencia.

Por lo tanto, la representación de software y la representación 2D han sido buenos puntos de entrada y áreas de enfoque para aquellos que eran nuevos en gráficos y / o querían crear un producto en el que la representación no tomara demasiado tiempo disponible en un proyecto. Al menos en lo que respecta a 2D, esto todavía se aplica; La tecnología ha cubierto en gran medida la brecha al llevar el renderizado 2D a la GPU.

Ingeniero
fuente
20

Aquí hay algunas respuestas realmente buenas, así que solo para complementarlas.

Una de las principales fuerzas impulsoras del procesamiento de software es la capacidad. Esto se mencionó en una de las respuestas, pero voy a hacer un punto opuesto: la representación de software en realidad puede ser más capaz que la representación de hardware, no menos.

Con el hardware, generalmente está limitado a las capacidades del hardware en sí mismo, aunque OpenGL para uno es capaz de emular software de muchas cosas que pueden no existir en el hardware. Lo que eso significa es que si intenta usar la función X pero el hardware no lo admite, sucederá una de dos cosas: o volverá a la emulación de software (el escenario típico de OpenGL) o no podrá úselo (el típico escenario D3D).

Con la representación de software, puede escribir el código usted mismo. Puedes manipular cosas y tener un control total sobre lo que sucede hasta el nivel de píxeles. Para dar un ejemplo de una explosión del pasado, Quake implementó sombreadores de píxeles en el software en 1996, en un momento en que las tarjetas 3D (no se llamaban "GPU" entonces) apenas podían rasterizar unas pocas docenas de triángulos texturizados.

Este es más el caso con las GPU actuales también, pero todavía hay partes significativas de la tubería de gráficos que están expuestos como una funcionalidad fija (o incluso no están expuestos en absoluto).

El renderizado de software puede escalar mejor. Es relativamente reciente que hayamos visto que las configuraciones de múltiples GPU se vuelven realmente viables, pero el software puede escalar en muchos núcleos de CPU en muchos servidores. Puede tener granjas de servidores enteras dedicadas a esto, y las granjas de renderizado profesional seguirán utilizando la representación de software.

El software puede exponer diferentes paradigmas de representación. El hardware actual está muy centrado en el paradigma triángulo / vértice / fragmento / rasterización; se trata de elegir una cosa y optimizarla hasta que grite por piedad. Las GPU siguen siendo una mala elección para, por ejemplo, el trazado de rayos, que se implementa más comúnmente en el software.

Por supuesto, cuando se trata de una comparación directa de manzanas con manzanas, una GPU vencerá al software cualquier día de la semana, siempre que comparemos áreas donde las GPU son más fuertes. Pero eso no quiere decir que sean más fuertes en todas las áreas. A pesar de eso, y para los propósitos de este sitio SE, el uso de hardware es generalmente el camino a seguir, pero solo tenga en cuenta que existen casos de uso en los que el software también es viable.

Maximus Minimus
fuente
8
+1 para "la representación de software en realidad puede ser más capaz que la representación de hardware, no menos".
concept3d
10

El procesamiento de hardware o GPU es, como adivinó, el uso de la unidad de procesamiento gráfico (también conocida como Tarjeta de video) para renderizar una imagen. Lo contrario es la representación de software donde se utiliza la CPU.

El renderizado de software generalmente se usa como respaldo cuando no hay una GPU (adecuada) disponible. Sin embargo, dado que la GPU es de órdenes de magnitud, los renderizadores de software más rápidos casi nunca son útiles, ya que una CPU generalmente no podrá renderizar imágenes en tiempo real. El renderizado de software es útil cuando se necesita una alta precisión si se requieren fórmulas extremadamente complicadas para renderizar la imagen. Como las CPU tienen un propósito más general que las GPU, tienen más capacidades. Sin embargo, este argumento se está volviendo cada vez menos válido ya que las GPU de hoy en día pueden manejar tareas cada vez más complejas y ya no se limitan a flotadores de 32 bits para representar números.

Roy T.
fuente
2

Creo que esta es una muy buena pregunta.

Lo que puedo imaginar es:

  • VRAM es más limitado que la memoria RAM general. En el caso de la renderización de GPU, cada textura es más un problema. Puede almacenar en promedio aproximadamente 4 a 8 veces más datos en RAM que VRAM. Por supuesto, este escenario supone que no hay un sistema que sea responsable de liberar / empujar las texturas no utilizadas / requeridas de / a RAM / VRAM

  • En términos de subprocesos múltiples, es mucho más fácil cuando trabajas con el renderizado de software: no es necesario compartir contextos

  • Si está haciendo gráficos en 2D, por lo general, la mayoría de los marcos continúan implementando la Evaluación de rectángulos sucios, lo que resuelve muchos problemas de rendimiento.

Aún así, la representación con OGL / D3D ofrece mucho más rendimiento y posibilidades. Los sombreadores pueden hacer cosas realmente sorprendentes, que son casi imposibles con el renderizado de software.

Pero las técnicas como el bliting, el uso de teclas de colores, tienen su propia sensación de estar en el nivel base, el origen del mundo de los gráficos por computadora.

Creo que al menos es bueno saber acerca de la representación del software. Es realmente un mundo muy emocionante, sin mencionar que es la raíz de todo lo que vemos hoy.

luke1985
fuente
1
No necesita aceleración de hardware para ejecutar sombreadores. OS X 10.9 viene con una implementación completa de software de GL4. El rendimiento es increíblemente bueno para la representación de software; no es hasta el punto en el que puedas jugar juegos sofisticados de manera realista (para ser justos, tampoco son las GPU con las que Apple envía sus productos), pero es mucho más práctico que usar algo como el rasterizador de referencia Direct3D. En realidad, es algo que podría enviar utilizando software de trabajo.
Andon M. Coleman
@ AndonM.Coleman No todos usan Apple y no conozco los renderizadores de software que admitan sombreadores en Linux y Windows.
luke1985
1
Sin embargo, ese no era mi punto. Hay implementaciones de OpenGL donde los sombreadores completamente funcionales se ejecutan completamente en la CPU. El hecho de que Apple sea el desarrollador es en gran medida irrelevante. Su respuesta dio la impresión de que pensaba que tenía que tener una GPU para ejecutar sombreadores modernos en OpenGL.
Andon M. Coleman
@ AndonM.Coleman Y eso es casi correcto, porque en el 80% de los casos tienes que hacerlo.
luke1985
2
Los sombreadores se pueden implementar fácilmente a través del procesamiento de software, de hecho, incluso Tomb Raider 1 y Quake 1 tenían sombreadores de píxeles. Es exactamente lo contrario, una CPU le brinda mucho más control que la tubería limitante de vértices / fragmentos de las GPU actuales.
lama12345