¿Cómo procesan los motores de juegos 3D entornos 3D en una pantalla 2D?
9
Para los juegos de sprites 2D, puedo entender que los sprites se mueven en los ejes X e Y. Sin embargo, para los juegos 3D, ¿cómo calculan los motores de juego cómo representar un entorno 3D en un monitor de computadora 2D plano?
Los Magic Imps diseñan la tierra y luego disparan la imagen en la pantalla usando sus varitas mágicas.
Math.PI, montones.
Nick Bedford
Respuestas:
10
Los sprites 3D obtienen un nuevo eje Z que almacena profundidad, tamaño de escala y movimientos en el plano X / Y. Un sprite que está más lejos tiene un valor Z mayor. Ahora, divida el tamaño del sprite y los movimientos del eje X / Y por el eje Z. Como otros han señalado, esta es una proyección en perspectiva 3D . Aquí está la mejor ilustración que pude encontrar:
Esto tiene sentido conceptualmente porque las cosas que están más lejos se ven más pequeñas. Sus movimientos aparentes también parecen más pequeños.
Además, los objetos cercanos deben dibujarse encima de los objetos lejanos. Nuevamente, esto tiene sentido conceptualmente porque los objetos cercanos ocluyen la vista de los objetos detrás de ellos.
Estas técnicas se pueden implementar a nivel de sprite. Sin embargo, para la proyección más realista, cada sprite tiene un modelo 3D y se representa a nivel de píxel.
El diagrama fue lo que me atrapó. Una imagen vale mas que mil palabras.
Kim Jong Woo
17
Es similar a cómo puedes capturar imágenes 2D de nuestro mundo en la cámara. El entorno 3D se describe en términos de coordenadas X, Y y Z, pero en última instancia, debe asignarlo a una pantalla 2D con solo los ejes X e Y. Esto se hace por proyección , donde cada punto 3D se proyecta en un plano de vista 2D.
En pocas palabras, puede imaginar líneas de proyección que van desde la cámara virtual en el espacio 3D a cada punto 3D pasando a través del plano de vista. El punto donde una línea de proyección se cruza con el plano 2D es la proyección del punto 3D. En la proyección ortográfica, estas líneas de proyección son todas paralelas; La distancia entre el objeto y la cámara no hace ninguna diferencia para la forma proyectada. Este tipo de proyección no es realista, pero es útil en ciertos casos, como dibujar gráficos 2D utilizando un motor 3D (el HUD, por ejemplo). El otro tipo de proyección es la proyección en perspectiva, donde estas líneas convergen haciendo que los objetos más distantes parezcan más pequeños y dando resultados más realistas. Esta página tiene algunas cifras que podrían ayudarlo a visualizar el proceso.
La proyección es uno de los varios objetos de transformación que experimentan en la tubería de gráficos , y generalmente se realiza utilizando una matriz de proyección . Tenga en cuenta que aunque la proyección implica descartar la coordenada Z, en realidad un valor Z transformado todavía se usa como una medida de la profundidad de la pantalla para que podamos determinar qué objetos son visibles y cuáles están ocluidos por otros objetos. Esto se conoce como z-buffering .
Se trata de proyeccion , una operación geométrica que le permite definir un espacio desde otro espacio de dimensión superior (básicamente, en su caso, está describiendo una imagen 2D de un entorno 3D).
En pocas palabras, así es como los motores de renderizado 3D generan una imagen (dada una escena 3D y una proyección):
Por cada píxel de la imagen resultante
Calcule la dirección de la mirada (de acuerdo con la proyección), es básicamente un vector 3D
Encuentre el objeto más cercano en su escena que se "ve" en esta dirección (simplemente adivine qué objetos se cruzan con el vector y mantenga el más cercano)
Calcule el color de este objeto, ¡tiene el color del píxel!
Por supuesto, este es un modelo simple, no estoy hablando de objetos reflectantes / refractivos / translúcidos de efectos especiales como el humo ...
La matriz . O más bien, muchas matemáticas de matriz.
Es algo aterrador para los no iniciados. Por lo general, hay tres matrices 4x4 involucradas en convertir un montón de coordenadas 3D en el espacio en coordenadas 2D en la pantalla (incluida la profundidad en la pantalla como Z).
Las matrices 3D son un conjunto de 16 valores de coma flotante dispuestos en una cuadrícula de 4x4. Los algoritmos se usan para generar los valores requeridos y luego, usando la multiplicación de matriz-vector, estos números transforman un vector tridimensional (X, Y, Z).
[1,0,0,0][0,1,0,0][0,0,1,0][0,0,0,1]
Esta es la matriz de identidad . Esencialmente no hace nada a las coordenadas de un vector.
Modelo
El primero es el mundo o la matriz modelo . Esta matriz toma los vértices en un modelo individual (como una caja) modelado alrededor del origen (0, 0, 0) y los transforma en coordenadas de vértice mundial. Esto podría incluir escalar el objeto, rotarlo alrededor de su origen y finalmente traducirlo a donde está ubicado en la escena.
Ver
La segunda matriz es la matriz de vista . Esto toma las coordenadas del mundo y las transforma para que estén dentro del contexto de la vista. El concepto de cámara se usa típicamente para generar esta matriz.
La cámara generalmente contiene un vector de posición , un vector de dirección u objetivo , y un vector hacia arriba . Esta hasta vectorial describe el 'giro' de la cámara.
Estos vectores se utilizan para generar lo que se llama un mirada a la matriz.
El efecto que esto tiene es similar al del mundo. matriz en el hecho de que esencialmente gira y traduce el mundo alrededor de la cámara para "posicionar" la cámara.
Una cámara que tenga 10 unidades a lo largo del eje X traducirá las coordenadas mundiales 10 unidades en la otra dirección.
Proyección
La pieza final del rompecabezas es la matriz de proyección . En una proyección en perspectiva similar a una cámara, la matriz transforma casi coordenadas de pantalla para dar la ilusión de una perspectiva con un campo de visión de X grados.
Si piensa en términos de esquinas de la pantalla (para un juego de 640x480), así es como la proyección "alinea" las coordenadas a lo largo del eje Z dentro de las coordenadas 2D de la pantalla. Para la proyección ortográfica, no se realiza escala a lo largo del eje Z en la pantalla. Para la perspectiva, cuanto más lejos esté el objeto, más pequeño se vuelve en relación con la extensión de la pantalla.
Math.PI
, montones.Respuestas:
Los sprites 3D obtienen un nuevo eje Z que almacena profundidad, tamaño de escala y movimientos en el plano X / Y. Un sprite que está más lejos tiene un valor Z mayor. Ahora, divida el tamaño del sprite y los movimientos del eje X / Y por el eje Z. Como otros han señalado, esta es una proyección en perspectiva 3D . Aquí está la mejor ilustración que pude encontrar:
Esto tiene sentido conceptualmente porque las cosas que están más lejos se ven más pequeñas. Sus movimientos aparentes también parecen más pequeños.
Además, los objetos cercanos deben dibujarse encima de los objetos lejanos. Nuevamente, esto tiene sentido conceptualmente porque los objetos cercanos ocluyen la vista de los objetos detrás de ellos.
Estas técnicas se pueden implementar a nivel de sprite. Sin embargo, para la proyección más realista, cada sprite tiene un modelo 3D y se representa a nivel de píxel.
fuente
Es similar a cómo puedes capturar imágenes 2D de nuestro mundo en la cámara. El entorno 3D se describe en términos de coordenadas X, Y y Z, pero en última instancia, debe asignarlo a una pantalla 2D con solo los ejes X e Y. Esto se hace por proyección , donde cada punto 3D se proyecta en un plano de vista 2D.
En pocas palabras, puede imaginar líneas de proyección que van desde la cámara virtual en el espacio 3D a cada punto 3D pasando a través del plano de vista. El punto donde una línea de proyección se cruza con el plano 2D es la proyección del punto 3D. En la proyección ortográfica, estas líneas de proyección son todas paralelas; La distancia entre el objeto y la cámara no hace ninguna diferencia para la forma proyectada. Este tipo de proyección no es realista, pero es útil en ciertos casos, como dibujar gráficos 2D utilizando un motor 3D (el HUD, por ejemplo). El otro tipo de proyección es la proyección en perspectiva, donde estas líneas convergen haciendo que los objetos más distantes parezcan más pequeños y dando resultados más realistas. Esta página tiene algunas cifras que podrían ayudarlo a visualizar el proceso.
La proyección es uno de los varios objetos de transformación que experimentan en la tubería de gráficos , y generalmente se realiza utilizando una matriz de proyección . Tenga en cuenta que aunque la proyección implica descartar la coordenada Z, en realidad un valor Z transformado todavía se usa como una medida de la profundidad de la pantalla para que podamos determinar qué objetos son visibles y cuáles están ocluidos por otros objetos. Esto se conoce como z-buffering .
fuente
Se trata de proyeccion , una operación geométrica que le permite definir un espacio desde otro espacio de dimensión superior (básicamente, en su caso, está describiendo una imagen 2D de un entorno 3D).
En pocas palabras, así es como los motores de renderizado 3D generan una imagen (dada una escena 3D y una proyección):
Por cada píxel de la imagen resultante
Por supuesto, este es un modelo simple, no estoy hablando de objetos reflectantes / refractivos / translúcidos de efectos especiales como el humo ...
fuente
La matriz . O más bien, muchas matemáticas de matriz.
Es algo aterrador para los no iniciados. Por lo general, hay tres matrices 4x4 involucradas en convertir un montón de coordenadas 3D en el espacio en coordenadas 2D en la pantalla (incluida la profundidad en la pantalla como Z).
Las matrices 3D son un conjunto de 16 valores de coma flotante dispuestos en una cuadrícula de 4x4. Los algoritmos se usan para generar los valores requeridos y luego, usando la multiplicación de matriz-vector, estos números transforman un vector tridimensional (X, Y, Z).
Esta es la matriz de identidad . Esencialmente no hace nada a las coordenadas de un vector.
Modelo
El primero es el mundo o la matriz modelo . Esta matriz toma los vértices en un modelo individual (como una caja) modelado alrededor del origen (0, 0, 0) y los transforma en coordenadas de vértice mundial. Esto podría incluir escalar el objeto, rotarlo alrededor de su origen y finalmente traducirlo a donde está ubicado en la escena.
Ver
La segunda matriz es la matriz de vista . Esto toma las coordenadas del mundo y las transforma para que estén dentro del contexto de la vista. El concepto de cámara se usa típicamente para generar esta matriz.
La cámara generalmente contiene un vector de posición , un vector de dirección u objetivo , y un vector hacia arriba . Esta hasta vectorial describe el 'giro' de la cámara.
Estos vectores se utilizan para generar lo que se llama un mirada a la matriz.
El efecto que esto tiene es similar al del mundo. matriz en el hecho de que esencialmente gira y traduce el mundo alrededor de la cámara para "posicionar" la cámara.
Una cámara que tenga 10 unidades a lo largo del eje X traducirá las coordenadas mundiales 10 unidades en la otra dirección.
Proyección
La pieza final del rompecabezas es la matriz de proyección . En una proyección en perspectiva similar a una cámara, la matriz transforma casi coordenadas de pantalla para dar la ilusión de una perspectiva con un campo de visión de X grados.
Si piensa en términos de esquinas de la pantalla (para un juego de 640x480), así es como la proyección "alinea" las coordenadas a lo largo del eje Z dentro de las coordenadas 2D de la pantalla. Para la proyección ortográfica, no se realiza escala a lo largo del eje Z en la pantalla. Para la perspectiva, cuanto más lejos esté el objeto, más pequeño se vuelve en relación con la extensión de la pantalla.
fuente