Tecnologia de renderização de gráficos 3D

Como usar o plano 2D para exibir gráficos 3D

Gráficos 2D

Com dois pontos num plano, conhecendo suas coordenadas XY, você pode conectá-los e traçar uma linha.

Uma linha pode ser controlada controlando as coordenadas XY dos pontos A e B

Em imagens 3D, as coordenadas dos pontos possuem um sistema adicional de coordenadas do eixo Z.

Mas é impossível ter eixos de coordenadas tridimensionais XYZ em coordenadas de tela 2D.

Portanto, é necessário um algoritmo gráfico para "achatar" as coordenadas 3D e exibi-las na tela 2D. Isso é chamado de projeção 3D.

Depois de converter pontos 3D em pontos 2D, use o método anterior de vincular pontos 2D para conectar esses pontos. Isso é chamado de renderização de wireframe.

Inspiração de projeção: dois métodos de projeção

artigo recomendado:

zhuanlan.zhihu.com/p/473031788

De modo geral, trata-se de mover um gráfico 3D para o sistema de coordenadas 2D, e o centro corresponde à origem do sistema de coordenadas, e então as coordenadas 2D do 3D podem ser obtidas.

Se você usar luz para localizar um objeto 3D e usar uma superfície plana para exibir a projeção, quando o objeto 3D for girado, a projeção parecerá um objeto 3D, mesmo que a superfície de projeção seja plana.

Os computadores também fazem isso para converter 3D em 2D. Em primeiro lugar, a tela é um plano de projeção 2D. De acordo com o algoritmo de projeção, o 3D pode ser convertido em coordenadas 2D.

Projeção ortográfica

Os lados do cubo são paralelos entre si na projeção. Pode-se dizer que a matemática é usada para converter 3D em um sistema de coordenadas 2D.

A projeção ortográfica é um tipo de projeção paralela, semelhante a usar um feixe de luz paralelo para projetar a imagem de um objeto verticalmente no solo.

projeção em perspectiva

A projeção em perspectiva pode produzir efeitos quase grandes e muito pequenos, semelhantes à forma como os humanos observam o mundo.

No mundo 3D real, segmentos de linha paralelos convergirão para um ponto distante

Por que os triângulos são usados ​​para desenhar formas complexas

Em gráficos 3D, chamamos triângulos de “polígonos”

Uma coleção de polígonos é chamada de "grade"

Quanto mais densa a malha, mais lisa será a superfície e mais detalhes

Primeiro, vamos falar sobre por que triângulos são usados ​​em vez de quadrados

Num espaço, três pontos definem um plano

Se forem fornecidos 3 pontos 3D, um plano pode ser desenhado. Mas não é necessariamente o caso com quatro pontos.

Se forem dois pontos, não basta definir um plano, só pode definir um segmento de reta; se forem quatro pontos, é possível definir mais de um plano, então 3 é um número perfeito.

Algoritmo gráfico preenchido

Renderização de linha de varredura

Renderizações de wireframe são legais, mas imagens 3D precisam de preenchimento

etapa:
  1. Primeiro coloque uma camada de rede de pixels

  1. O algoritmo da linha de varredura primeiro lerá os três pontos do polígono, encontrará os valores máximo e mínimo de Y e só trabalhará entre esses dois pontos.

  1. O algoritmo funciona então de cima para baixo, uma linha por vez, calculando os dois pontos em que cada linha intercepta o polígono. O algoritmo da linha de varredura preencherá os pixels entre dois pontos de interseção. Por ser um triângulo, se cruzar um lado, deverá cruzar o outro lado.

Anti-aliasing

Esse tipo de triângulo é feio porque as bordas estão cheias de bordas irregulares.

Um método de reduzir o aliasing é chamado de anti-aliasing

Anti-aliasing: em vez de pintar cada pixel da mesma forma, você pode ajustar a cor avaliando o quanto o polígono corta o pixel.

Se o pixel preencher a cor diretamente dentro do polígono; se o polígono cortar o pixel, a cor será mais clara.

Algoritmo de renderização de oclusão

Existem muitos polígonos em uma cena 3D, mas apenas alguns deles são visíveis porque outros estão obscurecidos.

Algoritmo de classificação (algoritmo do pintor)

A maneira mais simples de lidar com isso

Organize de longe para perto e renderize de longe para perto. Isso é chamado de algoritmo do pintor, porque o pintor também desenha o fundo primeiro e depois desenha as coisas mais próximas
.

etapa
  1. A primeira etapa é classificar de longe para perto (a distância entre os três triângulos A amarelo, B azul e C verde)

  1. Após o pedido, use o algoritmo de linha de varredura para preencher vários polígonos, um de cada vez. (A ordem é de longe para perto)

buffer de profundidade

Este algoritmo tem a mesma ideia do algoritmo do pintor, mas o método é diferente.

E o algoritmo do buffer de profundidade não precisa ser classificado, então será mais rápido

O algoritmo Z-buffering registra a distância entre cada pixel da cena e a câmera e armazena uma matriz digital na memória.

etapa
  1. Primeiro, a distância de cada pixel é inicializada para "infinito" e, em seguida, o buffer Z inicia o processamento a partir do primeiro polígono da lista, que é A

Possui a mesma lógica do algoritmo de linha de varredura, mas em vez de preencher os pixels com cor, compara a distância do polígono com a distância no buffer Z. Ele sempre registra o valor mais baixo.

  1. Assim que o buffer Z for concluído, ele será usado em conjunto com uma versão aprimorada e avançada do algoritmo de "linha de varredura", que pode não apenas detectar interseções de linha, mas também saber se um determinado pixel está visível na cena final . Se não estiver visível, o algoritmo scanline irá pular essa parte

Mas haverá uma dúvida: se a distância for a mesma, qual está desenhada em cima?

Os polígonos são movidos na memória e a ordem de acesso muda constantemente, portanto, qual deles é gasto costuma ser imprevisível.

Uma otimização para jogos 3D: seleção de backface

Um triângulo tem dois lados, frontal e posterior.

Apenas o lado externo da cabeça do personagem do jogo ou o chão podem ser vistos, portanto, para economizar tempo de processamento, o verso do polígono é ignorado, reduzindo o número de faces gerais do polígono.

Mas também há um erro: se você olhar o modelo de fora, a cabeça e o chão irão realmente desaparecer.

Sombreamento de cena 3D

Em uma cena 3D, a superfície de um objeto deve apresentar alterações de claro e escuro.

Desta vez usei um bule para o experimento, diferente do exemplo anterior. Desta vez o que devemos considerar é a direção em que os polígonos estão voltados: eles não estão paralelos à tela, mas sim em direções diferentes. A direção que você está enfrentando é chamada de "normal da superfície"

Use uma pequena seta perpendicular à superfície para mostrar esta direção

Adicione uma fonte de luz. Como polígonos diferentes estão voltados para a fonte de luz em ângulos diferentes, quanto mais a direção da seta se sobrepõe à direção iluminada pela fonte de luz, mais brilhante é o polígono.

Texturas

A textura nos gráficos refere-se à aparência, não à sensação.

As texturas também possuem vários algoritmos

mapeamento de textura

O uso mais simples

Quando usamos o algoritmo de linha de varredura para preencher a cor antes, poderíamos olhar a imagem da textura na memória e decidir qual cor usar ao preencher a área do pixel.

Para fazer isso, você precisa corresponder às coordenadas do polígono e às coordenadas da textura

  1. Correspondência entre coordenadas poligonais e coordenadas de textura
  2. Ao decidir qual cor escolher para preencher o pixel atual, o algoritmo de textura consulta a textura, pega a cor média da área correspondente e a preenche no polígono.

GPU: processador gráfico

Podemos fabricar hardware especializado para esta operação específica para agilizar

Em segundo lugar, podemos dividir a cena 3D em múltiplas partes pequenas e renderizá-las em paralelo, em vez de sequencialmente.

A CPU não foi projetada para isso, portanto as operações gráficas não são rápidas, então os engenheiros de computação criaram um processador especial para gráficos, chamado de GPU "Unidade de Processamento Gráfico"

A GPU fica na placa gráfica, cercada por RAM dedicada onde estão todas as malhas e texturas, permitindo que os múltiplos núcleos da GPU a acessem em alta velocidade

Link de referência

www.bilibili.com/video/av213…

Link original: tecnologia de renderização de gráficos 3D - Nuggets (juejin.cn)

Acho que você gosta

Origin blog.csdn.net/m0_65909361/article/details/132989033
Recomendado
Clasificación