Renderizar em 3D significa projetar uma cena com profundidade — posições em X, Y e Z — em uma tela plana de pixels. Esse processo depende de câmeras, matrizes de projeção e técnicas para decidir o que está na frente do quê.
Uma câmera 3D define de onde e para onde se olha. Dois tipos de projeção são usados com propósitos diferentes:
Para saber qual objeto aparece na frente de outro, cada pixel guarda a profundidade (z) do fragmento mais próximo já desenhado nele:
para cada pixel:
se novo_z < z_buffer[pixel]:
desenha fragmento
z_buffer[pixel] = novo_z
Sem essa comparação, objetos seriam desenhados na ordem em que o código os processa, ignorando qual está realmente mais perto da câmera.
Quando duas superfícies têm profundidades quase idênticas, o z-buffer não consegue decidir com precisão qual desenhar por cima — o resultado é um flicker entre as duas, chamado z-fighting. É corrigido afastando as superfícies ou ajustando a precisão do buffer.
Luzes (direcionais, pontuais, ambiente) determinam como as superfícies são sombreadas. Gizmos — os eixos e alças visuais usados para mover, rotacionar e escalar objetos — são a interface entre o usuário e a cena 3D.
Explore câmeras, z-buffer e gizmos no Canvas 3D interativo.