Como os mecanismos de jogos em 3D renderizam ambientes 3D em uma tela 2D?
9
Para jogos de sprite 2D, eu posso entender que os sprites se movem nos eixos X e Y. No entanto, para jogos 3D, como os mecanismos de jogo calculam como renderizar um ambiente 3D em um monitor de computador 2D plano?
Os diabinhos mágicos projetam a terra e, em seguida, fotografam a imagem na tela usando suas varinhas mágicas.
Math.PI, muitos disso.
Nick Bedford
Respostas:
10
Os sprites 3D obtêm um novo eixo Z que armazena profundidade, tamanho de escala e movimentos no plano X / Y. Um sprite mais distante tem um valor de Z maior. Agora, divida o tamanho do sprite e os movimentos do eixo X / Y pelo eixo Z. Como outros observaram, esta é uma projeção em perspectiva 3D . Aqui está a melhor ilustração que pude encontrar:
Isso faz sentido conceitualmente, porque as coisas mais distantes parecem menores. Seus movimentos aparentes também parecem menores.
Além disso, objetos próximos precisam ser desenhados sobre objetos distantes. Novamente, isso faz sentido conceitualmente porque os objetos próximos ocultam a visão dos objetos atrás deles.
Essas técnicas podem ser implementadas no nível do sprite. No entanto, para a projeção mais realista, cada sprite possui um modelo 3D e é renderizado no nível de pixel.
O diagrama foi o que me pegou. Uma imagem vale mais que mil palavras.
Kim Jong Woo
17
É semelhante a como você pode capturar imagens 2D do nosso mundo na câmera. O ambiente 3D é descrito em termos de coordenadas X, Y e Z, mas, em última análise, é necessário mapear isso para uma tela 2D com apenas os eixos X e Y. Isso é feito por projeção , onde cada ponto 3D é projetado em um plano de vista 2D.
Simplificando, você pode imaginar linhas de projeção indo da câmera virtual no espaço 3D para cada ponto 3D passando pelo plano da vista. O ponto em que uma linha de projeção cruza o plano 2D é a projeção do ponto 3D. Na projeção ortográfica, essas linhas de projeção são todas paralelas; a distância entre o objeto e a câmera não faz diferença para a forma projetada. Esse tipo de projeção não é realista, mas é útil em certos casos, como desenhar gráficos 2D usando um mecanismo 3D (o HUD, por exemplo). O outro tipo de projeção é a projeção em perspectiva, na qual essas linhas convergem, fazendo com que objetos mais distantes pareçam menores e produzam resultados mais realistas. Esta página possui algumas figuras que podem ajudá-lo a visualizar o processo.
A projeção é um dos vários objetos de transformação submetidos ao pipeline de gráficos e geralmente é feito usando uma matriz de projeção . Observe que, embora a projeção implique em descartar a coordenada Z, na realidade, um valor Z transformado ainda é usado para medir a profundidade da tela, para que possamos saber quais objetos são visíveis e quais são ocluídos por outros objetos. Isso é conhecido como z-buffering .
É tudo sobre projeção , uma operação geométrica que permite definir um espaço de outro espaço de dimensão superior (basicamente, no seu caso, você está descrevendo uma imagem 2D de um ambiente 3D).
Simplificando, é assim que os mecanismos de renderização 3D geram uma imagem (dada uma cena 3D e uma projeção):
Para cada pixel da imagem resultante
Calcule a direção da vista (de acordo com a projeção), é basicamente um vetor 3D
Encontre o objeto mais próximo da cena que é "visto" nessa direção (basta adivinhar quais objetos estão cruzados com o vetor e mantenha o mais próximo)
Calcule a cor deste objeto, você tem a cor do pixel!
Claro que este é um modelo simples, não estou falando de objetos refletivos / refrativos / translúcidos de efeitos especiais, como fumaça ...
É algo assustador para os não iniciados. Normalmente, existem três matrizes 4x4 envolvidas na transformação de várias coordenadas 3D no espaço em coordenadas 2D na tela (incluindo a profundidade da tela como Z).
Matrizes 3D são um conjunto de 16 valores de ponto flutuante organizados em uma grade 4x4. Os algoritmos são usados para gerar os valores necessários e, usando a multiplicação de vetores matriciais, esses números transformam um vetor tridimensional (X, Y, Z).
[1,0,0,0][0,1,0,0][0,0,1,0][0,0,0,1]
Esta é a matriz de identidade . Essencialmente , nada faz nas coordenadas de um vetor.
Modelo
O primeiro é o mundo ou matriz modelo . Essa matriz pega os vértices em um modelo individual (como uma caixa) modelado em torno da origem (0, 0, 0) e os transforma em coordenadas mundiais de vértices. Isso pode incluir dimensionar o objeto, girá-lo em torno de sua origem e finalmente traduzi-lo para onde ele está localizado na cena.
Visão
A segunda matriz é a matriz da vista . Isso pega as coordenadas do mundo e as transforma para que elas fiquem dentro do contexto da visualização. O conceito de câmera é normalmente usado para gerar essa matriz.
A câmara contém normalmente uma posição de vector, uma direcção ou alvo vector, e uma até vector. Isso se vetor descreve o 'spin' da câmera.
Esses vetores são usados para gerar o que é chamado de uma olhada na matriz.
O efeito que isso tem é semelhante à matriz mundial , no fato de estar essencialmente girando e traduzindo o mundo ao redor da câmera para "posicionar" a câmera.
Uma câmera de 10 unidades ao longo do eixo X converterá as coordenadas mundiais de 10 unidades na outra direção.
Projeção
A peça final do quebra-cabeça é a matriz de projeção . Em uma projeção em perspectiva semelhante à câmera, a matriz transforma o quase coordenadas da tela para dar a ilusão de uma perspectiva com um campo de visão de x graus.
Se você pensa em termos de cantos da tela (para um jogo de 640x480), é assim que a projeção "alinha" as coordenadas ao longo do eixo Z nas coordenadas 2D da tela. Para projeção ortográfica, nenhuma escala ocorre ao longo do eixo Z na tela. Por perspectiva, quanto mais longe o objeto, menor ele se torna em relação às extensões da tela.
Math.PI
, muitos disso.Respostas:
Os sprites 3D obtêm um novo eixo Z que armazena profundidade, tamanho de escala e movimentos no plano X / Y. Um sprite mais distante tem um valor de Z maior. Agora, divida o tamanho do sprite e os movimentos do eixo X / Y pelo eixo Z. Como outros observaram, esta é uma projeção em perspectiva 3D . Aqui está a melhor ilustração que pude encontrar:
Isso faz sentido conceitualmente, porque as coisas mais distantes parecem menores. Seus movimentos aparentes também parecem menores.
Além disso, objetos próximos precisam ser desenhados sobre objetos distantes. Novamente, isso faz sentido conceitualmente porque os objetos próximos ocultam a visão dos objetos atrás deles.
Essas técnicas podem ser implementadas no nível do sprite. No entanto, para a projeção mais realista, cada sprite possui um modelo 3D e é renderizado no nível de pixel.
fonte
É semelhante a como você pode capturar imagens 2D do nosso mundo na câmera. O ambiente 3D é descrito em termos de coordenadas X, Y e Z, mas, em última análise, é necessário mapear isso para uma tela 2D com apenas os eixos X e Y. Isso é feito por projeção , onde cada ponto 3D é projetado em um plano de vista 2D.
Simplificando, você pode imaginar linhas de projeção indo da câmera virtual no espaço 3D para cada ponto 3D passando pelo plano da vista. O ponto em que uma linha de projeção cruza o plano 2D é a projeção do ponto 3D. Na projeção ortográfica, essas linhas de projeção são todas paralelas; a distância entre o objeto e a câmera não faz diferença para a forma projetada. Esse tipo de projeção não é realista, mas é útil em certos casos, como desenhar gráficos 2D usando um mecanismo 3D (o HUD, por exemplo). O outro tipo de projeção é a projeção em perspectiva, na qual essas linhas convergem, fazendo com que objetos mais distantes pareçam menores e produzam resultados mais realistas. Esta página possui algumas figuras que podem ajudá-lo a visualizar o processo.
A projeção é um dos vários objetos de transformação submetidos ao pipeline de gráficos e geralmente é feito usando uma matriz de projeção . Observe que, embora a projeção implique em descartar a coordenada Z, na realidade, um valor Z transformado ainda é usado para medir a profundidade da tela, para que possamos saber quais objetos são visíveis e quais são ocluídos por outros objetos. Isso é conhecido como z-buffering .
fonte
É tudo sobre projeção , uma operação geométrica que permite definir um espaço de outro espaço de dimensão superior (basicamente, no seu caso, você está descrevendo uma imagem 2D de um ambiente 3D).
Simplificando, é assim que os mecanismos de renderização 3D geram uma imagem (dada uma cena 3D e uma projeção):
Para cada pixel da imagem resultante
Claro que este é um modelo simples, não estou falando de objetos refletivos / refrativos / translúcidos de efeitos especiais, como fumaça ...
fonte
Matrix . Ou melhor, muita matemática matricial.
É algo assustador para os não iniciados. Normalmente, existem três matrizes 4x4 envolvidas na transformação de várias coordenadas 3D no espaço em coordenadas 2D na tela (incluindo a profundidade da tela como Z).
Matrizes 3D são um conjunto de 16 valores de ponto flutuante organizados em uma grade 4x4. Os algoritmos são usados para gerar os valores necessários e, usando a multiplicação de vetores matriciais, esses números transformam um vetor tridimensional (X, Y, Z).
Esta é a matriz de identidade . Essencialmente , nada faz nas coordenadas de um vetor.
Modelo
O primeiro é o mundo ou matriz modelo . Essa matriz pega os vértices em um modelo individual (como uma caixa) modelado em torno da origem (0, 0, 0) e os transforma em coordenadas mundiais de vértices. Isso pode incluir dimensionar o objeto, girá-lo em torno de sua origem e finalmente traduzi-lo para onde ele está localizado na cena.
Visão
A segunda matriz é a matriz da vista . Isso pega as coordenadas do mundo e as transforma para que elas fiquem dentro do contexto da visualização. O conceito de câmera é normalmente usado para gerar essa matriz.
A câmara contém normalmente uma posição de vector, uma direcção ou alvo vector, e uma até vector. Isso se vetor descreve o 'spin' da câmera.
Esses vetores são usados para gerar o que é chamado de uma olhada na matriz.
O efeito que isso tem é semelhante à matriz mundial , no fato de estar essencialmente girando e traduzindo o mundo ao redor da câmera para "posicionar" a câmera.
Uma câmera de 10 unidades ao longo do eixo X converterá as coordenadas mundiais de 10 unidades na outra direção.
Projeção
A peça final do quebra-cabeça é a matriz de projeção . Em uma projeção em perspectiva semelhante à câmera, a matriz transforma o quase coordenadas da tela para dar a ilusão de uma perspectiva com um campo de visão de x graus.
Se você pensa em termos de cantos da tela (para um jogo de 640x480), é assim que a projeção "alinha" as coordenadas ao longo do eixo Z nas coordenadas 2D da tela. Para projeção ortográfica, nenhuma escala ocorre ao longo do eixo Z na tela. Por perspectiva, quanto mais longe o objeto, menor ele se torna em relação às extensões da tela.
fonte