Criando um renderizador 3D em ASCII
(kciter.so)Explica o pipeline de renderização 3D enquanto implementa um renderizador 3D em ASCII
O resultado deste artigo pode ser visto, além do post no blog, nos links a seguir
GitHub: https://github.com/kciter/ascii-3d-renderer.js
Chromatic: https://6637eb83d047d2bb1b3cfe67-bdnazvfsel.chromatic.com/?path=/story…
- É possível fazer ASCII parecer 3D?
- ASCII é semelhante a pixels em preto e branco ampliados
- É possível ajustar o brilho de acordo com a densidade dos caracteres
- Como transformar coordenadas 3D em coordenadas 2D?
- O processo é dividido, em linhas gerais, em processamento de vértices, rasterização e processamento de fragmentos
- Coordenadas 3D são chamadas de vértices e representam "pontos" posicionados no espaço 3D
- Um único vértice não é suficiente para representar um objeto, então os vértices são agrupados para formar objetos
- A menor unidade para representar um objeto é chamada de polígono
- Processamento de vértices
- O processo de transformar vértices é chamado de processamento de vértices
- Segue a ordem de transformação de mundo, transformação de visão e transformação de projeção
- Cada transformação é calculada usando matrizes
- A transformação de mundo posiciona no espaço 3D os vértices contidos no arquivo do modelo 3D
- A transformação de visão posiciona a câmera e calcula de quais coordenadas e de qual ponto de vista o objeto será observado
- A transformação de projeção é o cálculo para expressar perspectiva. Normalmente usa-se projeção em perspectiva.
- Com a transformação de projeção, é possível converter para coordenadas no espaço 2D
- Rasterização
- É o processo de converter coordenadas no espaço 2D em coordenadas de pixel
- Passa por clipping, divisão por perspectiva, remoção de faces traseiras, transformação de viewport e varredura de linhas
- Neste artigo, essas etapas são implementadas misturadas de forma apropriada
- Processamento de fragmentos
- É o processo de tratar as coordenadas convertidas em pixels
- Em renderizadores 3D comuns, são feitos pós-processamentos como cálculos de shader
- Neste artigo, aplica-se apenas o resultado do cálculo de iluminação
- Como a parte de implementação é quase toda composta por código-fonte, ela foi omitida deste resumo
3 comentários
Gostei muito de ler. Foi bom relembrar a aula de computação gráfica que tive na graduação.
Foi uma leitura divertida. Fiquei impressionado com o fato de você ter trabalhado levando em conta até a posição da câmera.
Até a explicação do pipeline básico de renderização
foi um conteúdo muito interessante.