Los juegos y otras aplicaciones gráficamente intensivas usan marcos como OpenGL y DirectX. También requieren características como pixel shader y DX12.
Pero, ¿por qué necesitaríamos todos estos marcos y funciones de GPU cuando podríamos dibujar todo píxel por píxel?
Primero, el juego tendría que compilarse de alguna manera para que se dibuje píxel por píxel. Es probable que esto haga que el juego sea ejecutable en grande, pero ¿será más rápido y funcionará en cualquier GPU de color de 32 bits (incluso las antiguas)?
Sé que los primeros juegos 3D fueron dibujados píxel por píxel, pero ¿por qué no lo están haciendo ahora?
3d
gpu
performance
pixel-shader
pixels
Suici Doga
fuente
fuente
Respuestas:
La velocidad es la razón más común por la que esto no se hace. De hecho, puede hacer lo que propone, si crea su propio sistema operativo, será muy lento por razones arquitectónicas. Entonces, la suposición de que es más rápido es un poco defectuosa. Incluso si fuera más rápido, sería menos eficiente en términos de desarrollo (como un aumento de velocidad del 1% por 10 veces el trabajo).
Copiar los datos desde la CPU a la tarjeta gráfica es una operación relativamente lenta. Cuanto menos copie, más rápida puede ser su velocidad de actualización. Por lo tanto, lo ideal sería tener la mayoría de los datos en su GPU y solo actualizar pequeños fragmentos de datos. Existe una gran diferencia entre copiar más de 320x200 píxeles en comparación con 1920x1200 o más. Vea que la cantidad de píxeles que necesita actualizar aumenta de forma cuadrática cuando crecen los lados.
Ejemplo: es más barato decirle a la GPU que mueva la imagen 10 píxeles a la derecha que copiar los píxeles manualmente a la memoria de video en diferentes ubicaciones.
¿Por qué tienes que pasar por una API? Simplemente porque no es tu sistema. El sistema operativo no puede permitirle hacer lo que quiera por razones de seguridad. En segundo lugar, debido a que el sistema operativo necesita abstraer el hardware, incluso el sistema operativo está hablando con el controlador a través de algún sistema abstraído, una API si lo desea.
De hecho, calificaría la probabilidad de que su sistema sea más rápido, si solo hiciera todo el trabajo usted mismo, cerca de casi cero. Es un poco como comparar C y ensamblaje. Claro que puede escribir ensamblaje, pero los compiladores son bastante inteligentes en estos días y optimizan mejor y mejor todo el tiempo. Es difícil ser mejor manualmente, incluso si puede, su productividad se reducirá por los desagües.
PD: Una API no hace que sea imposible hacer esta actualización como lo hicieron los juegos antiguos. Es ineficiente, eso es todo. No por la mente API sino porque es un período ineficiente.
PPS: Es por eso que están implementando Vulkan.
fuente
See the number of pixels you need to update grows exponetially when the sides grow.
Cuadráticamente, creo.funciona en cualquier GPU de color de 32 bits (incluso las antiguas)?
Un poco de historia aquí: así es como se hicieron los juegos en PC hasta que los aceleradores gráficos comenzaron a estar disponibles a mediados de los 90. De hecho, funcionó en todo el hardware, porque el hardware no estaba haciendo mucho.
Un acelerador gráfico permite dibujar píxeles considerablemente más rápido que una CPU, mediante el uso de hardware especializado y paralelismo. El acelerador contiene varios núcleos de procesador. Una PC de escritorio tendrá entre 1 y 8 núcleos, dependiendo de la edad. Mi tarjeta gráfica GTX970Ti tiene 1664 (¡mil seiscientos sesenta y cuatro!) Núcleos. Obviamente, esto supera a la PC en cuanto a velocidad bruta en gran medida.
Sin embargo, los aceleradores no están estandarizados y, a menudo, incluyen trucos extraños de arquitectura informática para alcanzar su velocidad. Para escribir un juego que no esté personalizado para una marca y modelo específicos de la tarjeta, debe existir una API. Y para eso se utilizan DirectX, GL y los lenguajes de sombreado. De hecho, escribir sombreadores es lo más parecido a escribir un programa que dibuje píxeles directamente; es solo que la tarjeta ejecutará mil copias de ese programa en paralelo, una por píxel.
fuente
Solo para agregar a la respuesta de joojaa , las cosas son todavía siendo atraídos pixel por pixel. Simplemente está generando los píxeles usando un sombreador / ensamblador / rasterizador de vértices, luego texturizándolos e iluminándolos con un sombreador de fragmentos. Todo esto se hizo en software en los años 90 cuando su tarjeta de video no era mucho más que un blitter y un buffer de cuadros, pero era lento como el infierno. De ahí la invención de las GPU modernas.
El cálculo matemático que está sucediendo es básicamente el mismo que en los días de Doom, pero ahora se ejecuta en cientos / miles de ALU de sombreadores en lugar de un puñado de núcleos de CPU. Las API se asignan básicamente al mismo conjunto de instrucciones de GPU detrás de escena. Solo están ahí para evitar que tenga que escribir un montón de ensamblado de GPU retorcido en múltiples plataformas de proveedores.
fuente