¿Cómo se hace la representación del software?

15

Me gustaría explorar la rasterización basada en software en tiempo real. Sé que todo va hacia la GPU en estos días, pero hay algunos juegos en los que todavía tiene sentido usar un procesador de software.

Por ejemplo: Voxeltron

Voxatron es un juego de disparos en la arena que tiene lugar en un mundo hecho de vóxeles (cubitos, más o menos). Todo en el juego se muestra en una pantalla virtual de 128x128x64 voxel, incluidos los menús y el inventario del jugador. Si observa de cerca, a veces puede ver el inventario (puntuación / vida / munición) proyectando una sombra sobre algunos de los objetos en el suelo.

He estado trabajando en herramientas de modelado y renderizado de vóxeles durante mucho tiempo, con el objetivo final de hacer un gran juego de aventura explorey. Hace aproximadamente medio año se fusionó con el trabajo que estaba haciendo en tiradores de arena para Conflux, y este es el resultado.

Es un juego bastante simple en el fondo, principalmente Robotron ambientado en un mundo destructible en 3D con criaturas tontas. No estoy seguro de cuán importantes serán las implicaciones de la destructibilidad para el juego, pero seguro que es divertido volar pedazos de muro. También agregué una recolección experimental de construcción de muros que puedes usar para construir barreras para esconderte de los monstruos que dan miedo.

El juego tiene lugar en un pequeño conjunto de arenas. Algunos de ellos cuentan con habitaciones con piezas de acción, en algún lugar entre Knightlore y Smash TV. Este es uno de los diseños originales basados ​​en la aventura, y una excusa para crear entornos temáticos.

caracteristicas:

  • Renderizado de software personalizado con sombras suaves.
  • Sonido incorporado y sintetizador de música (también usado para hacer la música del trailer).
  • Reproducción y grabación posterior al juego.
Miguel
fuente
1
Enlace ordenado a un juego. Tenga en cuenta que no es necesario utilizar un procesador de software para obtener sombras suaves en la GPU . Se encontrará con algunas limitaciones de rendimiento desde el lado del bucle de renderizado, no podrá ejecutarse en máquinas más básicas, como computadoras portátiles de 1.6 GHz o dispositivos de mano, cuando realmente pueda si explota el hardware disponible.
bobobobo

Respuestas:

11

Asumiré que ya conoce algo de álgebra lineal básica, del tipo involucrado en: proyecciones en 3D, configuración de la cámara, transformación de vértices en posición mundial, etc. Si no lo sabe, hay muchos lugares excelentes para aprender. Aquí hay dos que me gustan:

Arquitectura del motor de juego

  • Breve cobertura de álgebra lineal básica, pero cubre todo lo que necesita saber. Vale la pena tener el libro por muchas otras razones también.

Renderizado en tiempo real

  • Una cobertura un poco más detallada, pero nuevamente se limita a lo que quizás necesite saber. Una vez más, recomiendo este para los temas tratados en el resto de los capítulos.

Una vez que sepa cómo representar y manejar objetos en 3D, estará listo para ver cómo dibujarlos en la pantalla. Por lo general, esto se hace con una técnica de rasterización de triángulo de línea de exploración. En realidad es un concepto bastante simple. Dibuja una fila de un triángulo a la vez mientras interpola coordenadas de color y textura uv. Este proceso continúa para todos los triángulos en la pantalla. Incluso podría implementar un búfer de profundidad para manejar el renderizado fuera de orden.

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Esto se trata con más detalle en estos artículos:

Tutorial - Introducción a la representación basada en software: Rasterización de triángulos

Escuela de renderizado de software: Parte I


Y solo por diversión, mira el siguiente artículo:

Quake 2 Revisión del código fuente 3/4 (Renderizador de software)

zfedoran
fuente
De nada:] (también puede consultar aquí para obtener una descripción más detallada del proceso: en.wikipedia.org/wiki/Rasterisation )
zfedoran
¡Algunos buenos enlaces allí!
Jonathan Connell
5

Este es un tema bastante amplio. Sin embargo, hay dos partes básicas: la teoría real de la transformación de gráficos y la canalización de rasterización, y los bits de implementación reales que le permiten disparar píxeles en la pantalla como usted elija. Además de eso, también hay optimización (particularmente del último bit).

Afortunadamente, la primera parte es la misma que la teoría utilizada para la canalización de gráficos expuesta por el hardware moderno y las API. Si ya lo sabes, estás listo. Si no lo haces, te recomiendo un buen libro. Este es bastante bueno.

Hay muchas opciones para la segunda parte. Dependen en gran medida de su sistema operativo y las opciones de cadena de herramientas. Si está utilizando C o C ++, en Windows, simplemente puede trazar píxeles directamente a un mapa de bits GDI ( SetPixeles simple, pero dolorosamente, inútilmente lento, CreateDIBSectionle brinda una gran cantidad de bytes sin procesar que puede manipular a una velocidad mucho más rápida).

También puede adquirir una superficie DirectDraw y escribir en eso, o escribir en una textura Direct3D u OpenGL. En estos últimos casos, seguirá utilizando hardware, pero siempre que haga toda la composición de la imagen final en la CPU y solo use las API de hardware para copiar los resultados en la pantalla, todavía cuenta. De todas formas, en las PC modernas no se puede acceder a la VRAM sin procesar ni a nada directamente.

Si desea saber más, probablemente debería crear preguntas más específicas. Yo u otros estaríamos encantados de responderlos.


fuente
Para el libro: ¿Qué tan bueno es "bastante bueno"? $ 84 es bastante efectivo :)
Jonathan Connell
Es el que más recomiendo. Para la opción más barata, puede consultar la documentación de Direct3D en la tubería de transformación. Aunque es específico de D3D, el 95% es bastante aplicable a la teoría general. También puede consultar las copias en línea del Libro Rojo de OpenGL. Están desactualizados, pero la teoría (nuevamente) todavía se aplica.
0

Bien, voy a abordar esta pregunta desde lo más básico; cualquier cosa más allá de eso es amplia para un control de calidad simple; necesitas comprar un libro sobre el tema.

La diferencia más fundamental entre renderizar en software y usar una GPU se reduce a trazar píxeles. Es decir, cuando se procesa el software, usted es el responsable final de trazar cada maldito píxel, mientras que con una GPU la trama de píxeles está en gran medida automatizada por el hardware y simplemente "masajea" la tubería de píxeles con sombreadores.

Por ejemplo, piense en lo que debe hacer como programador para mostrar un triángulo 3D en la pantalla. Con una GPU, simplemente le dices al hardware cuáles son las coordenadas X, Y, Z de los vértices y luego la tarjeta de video completa todos los píxeles en la pantalla que comprenden la imagen de un triángulo. Puede usar un sombreador para indicarle a la GPU que cambie el color de cada píxel en función de una textura o algo, pero en última instancia, todo se reduce a que la GPU complete automáticamente todos los píxeles por usted.

Al hacer la representación del software, tendría que calcular qué píxeles en la pantalla completar, y luego hacer el blit para completar esos píxeles. Es decir, estaría haciendo los cálculos de la matriz para transformar del espacio de coordenadas de la escena 3D en el espacio de visualización, luego proyectando puntos del espacio de visualización en la pantalla, etc.

jhocking
fuente