Unixtopia

main/ artigos/

Renderização 3D

Em computação gráfica, é o processo de computação de imagens que representam uma visão projetada de objetos 3D por meio de uma câmera virtual. Existem métodos e algoritmos para fazer isso, diferindo em aspectos, como complexidade de computação, de implementação, realismo do resultado, representação dos dados 3D, limitações de visualização e assim por diante. Se você está interessado apenas na renderização 3D em tempo real usada em gaymes hoje, provavelmente está interessado na rasterização 3D acelerada por GPU com APIs como OpenGL e Vulkan.

Métodos

Como a maioria das "estruturas" 3D existentes são prejudiciais, um programador SMR provavelmente escreverá seu próprio sistema de renderização 3D que melhor se adapte ao seu programa, portanto, devemos listar alguns métodos comuns para obter 3D. Uma percepção muito importante de um programador gráfico é que a renderização 3D é, em grande parte, sobre falsificação, especialmente o 3D em tempo real convencionaL, é um esforço que busca produzir algo que pareça de alguma forma familiar à visão humana especificamente e embora os métodos sejam matemáticos, o esforço é realmente uma arte no final, não muito diferente do de um mágico que procura por hacks de "fumaça e espelhos para produzir ilusões para o público. A realidade é infinitamente complexa, não usamos nada além de aproximações e negligências que dependem de suposições sobre a visão humana, como "60 FPS parece um movimento suave para o olho humano", "o espectro infravermelho é invisível", "os humanos não conseguem dizer que um reflexo de espelho está um pouco errado", "os cantos internos são geralmente mais escuros do que superfícies planas", "nenhuma sombra é completamente preta porque a luz se espalha na atmosfera". Na verdade, gráficos 3D nada mais são do que procurar o que parece bom o suficiente, e decidir isso depende de um julgamento subjetivo de um humano, e às vezes de cada indivíduo. Em teoria, se tivéssemos computadores infinitamente poderosos, apenas programaríamos algumas linhas de equações eletromagnéticas e executaríamos a simulação precisa da luz se propagando em um ambiente 3D para produzir um resultado absolutamente realista, mas embora alguns métodos tentem chegar perto dessa abordagem, simplesmente nunca teremos computadores infinitamente poderosos. Para isso, temos que recorrer a uma abordagem um pouco mais feia de identificar fenômenos específicos notáveis da vida real individualmente, cáusticos, Fresnel, reflexos de espelho, refrações, dispersão de subsuperfície, metalicidade, ruído, desfoque de movimento e miríades de outros e abordar cada um individualmente com tratamento especial, muitas vezes corrigindo e mascarando nossas imperfeições aplicando antialiasing porque ousamos usar um modelo simplificado de amostragem de luz, aplicando filtragem de textura porque ousamos usar apenas uma quantidade finita de memória para nossos dados, aplicando pós-processamento.

Espectro de renderização: o livro Real-Time Rendering menciona que métodos para renderização 3D podem ser vistos como estando em um espectro, um extremo do qual é a reprodução da aparência e o outro a simulação da física. Métodos mais próximos de tentar imitar a aparência tentam simplesmente focar em imitar a aparência de um objeto no monitor que o objeto 3D real teria na vida real, sem se preocupar com como essa aparência surge na vida real, mais próximos da abordagem de "falsificação" mencionada acima, estes podem usar dados de imagem como fotografias, estes métodos podem depender de campos de luz ou texturas de fotos. Os métodos de simulação física tentam replicar o comportamento da luz na vida real, seu objetivo principal é resolver a equação de renderização, ainda apenas mais ou menos aproximadamente, e assim, através da imitação interna dos mesmos processos, chegam a resultados visuais semelhantes que surgem no mundo real: estes métodos dependem da criação de geometria 3D, aquela feita de triângulos ou voxels, computando reflexões de luz e iluminação global. Isto é frequentemente mais fácil de programar, mas mais exigente computacionalmente. A maioria dos métodos fica em algum lugar entre esses dois extremos, outdoors e sistemas de partículas podem usar uma textura para representar um objeto enquanto, ao mesmo tempo, usam quads 3D, modelos 3D muito simples, para deformar corretamente as texturas por perspectiva e resolver sua visibilidade. Os modelos 3D poligonais clássicos também costumam ficar em algum lugar no meio, a geometria 3D e o sombreamento tentam simular a física, mas uma textura de foto mapeada em tal modelo 3D é a abordagem oposta baseada em aparência, PBR tenta ainda mudar o uso de texturas mais para o fim da simulação física.

Vamos agora dar uma olhada nas possíveis classificações de métodos de renderização 3D:

Por ordem: Por velocidade: Por limitação relativa: Por abordagem, lados do espectro de renderização mencionado acima: Por método ou algoritmo principal: Por dados 3D, a classificação vetor vs raster se aplica aqui, assim como em gráficos 2D: Por hardware: Pelo realismo da saída:.

Agora uma tabela de alguns métodos comuns de renderização 3D, incluindo os simples, os mais e alguns não convencionais. Observe que aqui falamos sobre métodos e técnicas em vez de algoritmos, abordagens gerais que são frequentemente modificadas e combinadas em um algoritmo de renderização específico. A rasterização de triângulo tradicional às vezes é combinada com raytracing para adicionar reflexos realistas. Os métodos também podem ser enriquecidos com recursos como texturização, antialiasing e assim por diante. A tabela abaixo deve ajudá-lo a escolher o método de renderização 3D base para seu programa específico. Os métodos podem ser marcados com o seguinte:


Impulsionado por nada. Todo conteúdo é disponível sob CC0 1.0 domínio público. Envie comentários e correções para Mr. Unix em victor_hermian@disroot.org.