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:
- Primeiro coloque uma camada de rede de pixels
- 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.
- 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
- A primeira etapa é classificar de longe para perto (a distância entre os três triângulos A amarelo, B azul e C verde)
- 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
- 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.
- 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
- Correspondência entre coordenadas poligonais e coordenadas de textura
- 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
Link original: tecnologia de renderização de gráficos 3D - Nuggets (juejin.cn)