Traçado de raio

 Nota: Não confundir com Ray tracing (física).
Este traçado de raios recursivo de esferas coloridas reflexivas sobre uma superfície branca demonstra os efeitos de profundidade de campo rasa, fontes de luz de área e inter-reflexão difusa.

Na computação gráfica 3D, o ray tracing (ou traçado de raios) é uma técnica de modelagem de transporte de luz utilizada em uma ampla variedade de algoritmos de renderização para a geração de imagens digitais.

Em um espectro de custo computacional e fidelidade visual, as técnicas de renderização baseadas em traçado de raios — tais como ray casting, traçado de raios recursivo, traçado de raios distribuído, mapeamento de fótons e path tracing — são geralmente mais lentas e oferecem maior fidelidade do que os métodos de renderização por varredura (scanline). Assim, o traçado de raios foi inicialmente empregado em aplicações nas quais um tempo de renderização relativamente longo podia ser tolerado, como em imagens estáticas geradas por computador (CGI) e efeitos visuais (VFX) para cinema e televisão, sendo menos adequado para aplicações em tempo real, como jogos eletrônicos, onde a velocidade é crítica na renderização de cada fotograma.

Desde 2018, contudo, a aceleração por hardware para ray tracing em tempo real tornou-se padrão em novas placas de vídeo comerciais, e as APIs gráficas seguiram essa tendência, permitindo aos desenvolvedores utilizar uma abordagem híbrida de traçado de raios e renderização baseada em rasterização em jogos e outras aplicações em tempo real, com menor impacto no tempo de renderização dos quadros.

O traçado de raios é capaz de simular uma variedade de efeitos ópticos, tais como reflexão, refração, sombras suaves, espalhamento de luz, profundidade de campo, desfoque de movimento, cáusticas, oclusão de ambiente e fenômenos de dispersão (como a aberração cromática). Também pode ser utilizado para traçar o caminho de ondas sonoras de maneira similar às ondas de luz, tornando-se uma opção viável para um design de som mais imersivo em jogos eletrônicos ao renderizar reverberação e ecos realistas. De fato, qualquer fenômeno físico de onda ou partícula com movimento aproximadamente linear pode ser simulado com o traçado de raios.

Técnicas de renderização baseadas em traçado de raios que realizam amostragem de luz sobre um domínio normalmente geram múltiplos raios e frequentemente dependem de algoritmos de desruído (denoising) para reduzir o ruído resultante.

História

Desenhista fazendo um desenho em perspectiva de uma mulher reclinada, de Albrecht Dürer, possivelmente de 1532, retrata um homem usando um arranjo em grade para compor uma imagem. O artista renascentista alemão é creditado como o primeiro a descrever a técnica.
Xilogravura de Dürer ilustrando a invenção de Jacob de Keyser. Com o dispositivo de de Keyser, o ponto de vista do artista era fixado por um gancho inserido na parede. Este era conectado por um fio de seda a um instrumento semelhante a uma mira de arma, com um elemento vertical pontiagudo na frente e um orifício ocular atrás. O artista mirava no objeto e traçava seu contorno sobre o vidro, mantendo a ocular alinhada com o fio para preservar o ângulo correto de visão.

A ideia do traçado de raios remonta ao século XVI, quando foi descrita por Albrecht Dürer, a quem se atribui sua invenção. Dürer descreveu múltiplas técnicas para projetar cenas tridimensionais sobre um plano de imagem. Algumas delas projetam a geometria escolhida sobre o plano da imagem, tal como se faz com a rasterização na atualidade. Outras determinam qual geometria é visível ao longo de um determinado raio, como ocorre no traçado de raios.

A primeira publicação referente ao uso de um computador para traçado de raios visando gerar imagens sombreadas é atribuída a Arthur Appel em 1968 (embora softwares comerciais de traçado de raios já estivessem sendo apresentados no final de 1967 pela MAGI (Mathematical Applications Group, Inc.)). Appel utilizou o traçado de raios para determinar a visibilidade primária (identificando a superfície mais próxima da câmera em cada ponto da imagem) traçando um raio através de cada ponto a ser sombreado em direção à cena para encontrar a superfície visível. A superfície mais próxima interceptada pelo raio era a considerada visível. Esse algoritmo de renderização não recursivo baseado em traçado de raios é denominado atualmente ray casting. Seu algoritmo traçava em seguida raios secundários em direção à fonte de luz a partir de cada ponto sombreado para determinar se o ponto se encontrava em sombra ou não.

Mais tarde, em 1971, Goldstein e Nagel, da MAGI, publicaram 3-D Visual Simulation, artigo no qual o traçado de raios foi empregado para produzir imagens sombreadas de sólidos. No ponto de intersecção entre o raio e a superfície, eles computavam a normal da superfície e, conhecendo a posição da fonte luminosa, calculavam o brilho do pixel na tela. A publicação descreve um curta-metragem (de 30 segundos) produzido utilizando o hardware de exibição da Universidade de Maryland equipado com uma câmera de 16 mm. O filme exibia o helicóptero e uma simples posição de artilharia em terra. O helicóptero foi programado para realizar uma série de manobras, incluindo curvas, decolagens e pousos, etc., até ser finalmente abatido e colidir contra o solo. Foi utilizado um computador CDC 6600. A MAGI produziu um vídeo de animação intitulado MAGI/SynthaVision Sampler em 1974.

Flip book criado em 1976 no Caltech.

Outro exemplo pioneiro de ray casting ocorreu em 1976, quando Scott Roth criou uma animação em flip book no curso de computação gráfica de Bob Sproull no Caltech. As páginas escaneadas são exibidas como vídeo na imagem ao lado. O programa de computador de Roth registrava um ponto de borda na localização de um pixel se o raio interceptasse um plano delimitado diferente do de seus vizinhos. Naturalmente, um raio poderia interceptar múltiplos planos no espaço, mas apenas o ponto de superfície mais próximo da câmera era considerado visível. A plataforma consistia em um DEC PDP-10, um monitor de tubo de armazenamento Tektronix e uma impressora que reproduzia a imagem da tela sobre papel térmico em rolo. Roth expandiu a estrutura teórica, introduziu o termo ray casting no contexto da computação gráfica e da modelagem sólida, e publicou seu trabalho em 1982 enquanto atuava nos Laboratórios de Pesquisa da General Motors (GM Research Labs).

Turner Whitted foi o primeiro a demonstrar o traçado de raios recursivo para reflexão especular e refração através de objetos translúcidos — com um ângulo determinado pelo índice de refração do sólido — e a aplicar o traçado de raios para anti-aliasing. Whitted também apresentou sombras geradas por traçado de raios. Ele produziu um filme demonstrativo com traçado de raios recursivo intitulado The Compleat Angler em 1979, enquanto atuava como engenheiro nos Bell Labs. O algoritmo de traçado de raios profundamente recursivo de Whitted reformulou a renderização, transformando-a de um problema focado primordialmente na determinação da visibilidade de superfícies em um problema de transporte de luz. Seu artigo inspirou uma série de trabalhos subsequentes de outros pesquisadores, incluindo o traçado de raios distribuído e, finalmente, o path tracing não enviesado, que fornece o arcabouço da equação de renderização, viabilizando a produção de imagens geradas por computador fidedignas à realidade física.

Por décadas, a iluminação global em grandes produções cinematográficas com imagens geradas por computador foi aproximada mediante a inserção de luzes adicionais. A renderização baseada em traçado de raios acabou por transformar esse cenário ao viabilizar o transporte de luz com base física. Entre os primeiros longas-metragens inteiramente renderizados com path tracing figuram Monster House (2006), Cloudy with a Chance of Meatballs (2009) e Monsters University (2013).

Visão geral do algoritmo

O algoritmo de traçado de raios compõe uma imagem projetando raios para o interior de uma cena, refletindo-os em superfícies e direcionando-os para fontes de luz a fim de aproximar o valor de cor dos pixels.
Ilustração do algoritmo de traçado de raios para um pixel (até o primeiro impacto).

O traçado de raios óptico descreve um método para a produção de imagens visuais construídas em ambientes de computação gráfica 3D, com maior fotorrealismo do que as técnicas de ray casting ou renderização por varredura. Ele funciona traçando uma trajetória a partir de um olho imaginário através de cada pixel em uma tela virtual e calculando a cor do objeto visível por meio dele.

Cenas no traçado de raios são descritas matematicamente por um programador ou por um artista visual (normalmente utilizando ferramentas intermediárias). As cenas também podem incorporar dados de imagens e modelos capturados por meios como fotografia digital.

Tipicamente, cada raio deve ser testado quanto à intersecção com algum subconjunto de todos os objetos na cena. Uma vez identificado o objeto mais próximo, o algoritmo estimará a luz incidente no ponto de intersecção, examinará as propriedades materiais do objeto e combinará essas informações para calcular a cor final do pixel. Certos algoritmos de iluminação e materiais reflexivos ou translúcidos podem exigir que mais raios sejam relançados para o interior da cena.

A princípio, pode parecer contraintuitivo ou ao contrário disparar raios a partir da câmera para longe dela, em vez de em direção a ela (como a luz real faz na natureza), mas fazer isso é muitas ordens de magnitude mais eficiente. Visto que a esmagadora maioria dos raios de luz provenientes de uma dada fonte luminosa não atinge diretamente o olho do observador, uma simulação direta poderia potencialmente desperdiçar uma enorme quantidade de processamento computacional em trajetórias de luz que jamais seriam registradas.

Portanto, o atalho adotado no traçado de raios consiste em pressupor que um dado raio intercepta o plano de visão. Após atingir um número máximo de reflexões ou após um raio percorrer uma determinada distância sem intersecção, o raio cessa sua trajetória e o valor do pixel é atualizado.

Cálculo de raios para uma viewport retangular

Como entrada temos (nos cálculos utilizamos a normalização vetorial e o produto vetorial):

Esquema da viewport com pixels, olho E e alvo T, centro da viewport C

A ideia consiste em encontrar a posição do centro de cada pixel da viewport , o que nos permite traçar a reta que parte do olho através desse pixel e finalmente obter o raio descrito pelo ponto e pelo vetor (ou sua normalização ). Primeiro precisamos encontrar as coordenadas do pixel inferior esquerdo da viewport e obter o próximo pixel efetuando um deslocamento ao longo de direções paralelas à viewport (vetores , ) multiplicados pelo tamanho do pixel. Abaixo apresentamos as fórmulas que incluem a distância entre o olho e a viewport. Contudo, esse valor será cancelado durante a normalização do raio (de modo que se pode assumir e suprimi-lo dos cálculos).

Pré-cálculos: determinamos e normalizamos o vetor e os vetores paralelos à viewport (todos representados na figura acima):

Note-se que o centro da viewport é ; a seguir, calculamos as dimensões da viewport divididas por 2, incluindo a proporção de aspecto inversa :

e calculamos em seguida os vetores de deslocamento entre pixels vizinhos ao longo de direções paralelas à viewport (), e o centro do pixel inferior esquerdo :

Cálculos: observe que e o raio é , logo:

Descrição detalhada do algoritmo computacional de traçado de raios e sua gênese

O que acontece na natureza (simplificado)

Na natureza, uma fonte luminosa emite um raio de luz que se propaga até atingir uma superfície que interrompe sua trajetória. Pode-se conceber esse raio como um feixe contínuo de fótons percorrendo o mesmo caminho. Em vácuo perfeito, esse raio constituirá uma linha reta (desconsiderando efeitos relativísticos). Qualquer combinação de quatro fenômenos fundamentais pode ocorrer com esse raio de luz: absorção, reflexão, refração e fluorescência. Uma superfície pode absorver parte do raio luminoso, resultando em perda de intensidade da luz refletida e/ou refratada. Pode também refletir toda ou parte da radiação em uma ou mais direções. Se a superfície possuir propriedades transparentes ou translúcidas, ela refrata uma fração do feixe luminoso em seu interior em uma direção distinta, enquanto absorve parte (ou a totalidade) do espectro visível (alterando potencialmente a cor resultante). Menos frequentemente, uma superfície pode absorver uma fração da luz e reemiti-la por fluorescência em um comprimento de onda maior e em direção aleatória, embora esse fenômeno seja suficientemente raro para poder ser desconsiderado na maioria das aplicações de renderização. Somando absorção, reflexão, refração e fluorescência, toda a luz incidente deve ser rigorosamente contabilizada, sem excedente: uma superfície não pode, por exemplo, refletir 66% de um raio de luz incidente e refratar 50%, pois a soma totalizaria 116%. A partir desse ponto, os raios refletidos e/ou refratados podem incidir sobre outras superfícies, onde suas propriedades de absorção, refração, reflexão e fluorescência voltam a atuar sobre os raios incidentes. Alguns desses raios percorrem caminhos tais que acabam atingindo nossos olhos, permitindo-nos visualizar a cena e compondo, assim, a imagem renderizada final.

Algoritmo de ray casting

A ideia por trás do ray casting, o antecessor do traçado de raios recursivo, consiste em lançar raios a partir do ponto de vista do observador (um por pixel) e encontrar o objeto mais próximo que bloqueia a trajetória desse raio. Pode-se visualizar a imagem como uma tela aramada, onde cada quadrículo corresponde a um pixel: o objeto interceptado é aquilo que o olho visualiza através daquele pixel específico. Utilizando as propriedades do material e os parâmetros das fontes luminosas na cena, o algoritmo consegue calcular o sombreamento desse objeto. Adota-se a premissa simplificadora de que, se uma superfície estiver voltada para uma fonte de luz, a radiação a alcançará sem bloqueios ou sombras intermediárias. O sombreamento da superfície é então processado mediante modelos tradicionais de sombreamento da computação gráfica 3D. Uma vantagem marcante que o ray casting oferecia em relação aos antigos algoritmos de varredura era sua capacidade de lidar facilmente com sólidos e superfícies não planares, como cones e esferas. Se uma superfície matemática puder ser interceptada analiticamente por uma reta, ela poderá ser renderizada por ray casting. Objetos elaborados podem ser concebidos mediante técnicas de modelagem sólida e prontamente renderizados.

Algoritmo de volume ray casting

No método de volume ray casting (traçado de raios volumétrico), cada raio é traçado de modo que a cor e/ou a densidade possam ser amostradas continuamente ao longo do trajeto do raio e, em seguida, compostas na cor final do pixel. Esse procedimento é comumente empregado quando os elementos não podem ser adequadamente representados por superfícies explícitas (como malhas poligonais triangulares), como ocorre na renderização de nuvens, fumaça ou exames de tomografia computadorizada 3D na medicina.

Visualização do algoritmo de SDF ray marching.

Algoritmo de SDF ray marching

No SDF ray marching (marcha de raios por SDF), ou sphere tracing, cada raio avança em passos múltiplos para aproximar o ponto de intersecção entre o raio e uma superfície definida por uma função de distância com sinal (SDF). A SDF é avaliada a cada iteração a fim de permitir passos tão longos quanto possível sem ultrapassar ou perder nenhuma porção da superfície. Um limiar de tolerância é estipulado para interromper as iterações quando se atinge um ponto suficientemente próximo da superfície. Esse método é frequentemente empregado na renderização de fractais tridimensionais.

Algoritmo de ray tracing recursivo

O traçado de raios permite criar imagens fotorrealistas.
Além do alto grau de realismo, o traçado de raios pode simular os efeitos de uma câmera decorrentes da profundidade de campo e do formato da abertura do diafragma (neste caso, um hexágono).
O número de reflexões que um raio pode realizar e como ele é afetado a cada superfície encontrada são determinados pelas configurações do software. Nesta imagem, cada raio pôde refletir até 16 vezes, tornando visíveis múltiplas reflexões de reflexões. (Imagem gerada com o Cobalt).
O número de refrações que um raio pode realizar e como ele é modificado a cada transição através de materiais transparentes são controlados por parâmetros no software. Aqui, cada raio foi configurado para refratar ou refletir (a profundidade) até 9 vezes. Foram utilizadas reflexões de Fresnel e há cáusticas visíveis. (Imagem gerada com o V-Ray).

Os algoritmos primitivos traçavam raios do olho em direção à cena até atingirem um objeto, mas determinavam a cor do ponto sem traçar novos raios recursivamente. O traçado de raios recursivo expande esse processo: quando um raio atinge uma superfície, raios adicionais podem ser lançados devido a fenômenos de reflexão, refração e sombra:

Esses raios recursivos conferem expressivo realismo às imagens geradas por traçado de raios.

Vantagens sobre outros métodos de renderização

A popularidade da renderização fundamentada em traçado de raios decorre de sua fidelidade na simulação física do transporte de luz, em contraposição a outros métodos, como a rasterização, que se concentram primariamente na projeção da geometria. Efeitos como reflexões especulares perfeitas e sombras nítidas ou suaves, que demandam aproximações complexas em outros algoritmos, constituem desdobramentos naturais do traçado de raios. A independência computacional de cada raio torna o processo favorável a níveis básicos de paralelização, embora a divergência das trajetórias dos raios no espaço tridimensional torne difícil alcançar alta taxa de ocupação em processadores fortemente paralelos na prática.

Desvantagens

Uma desvantagem histórica considerável do traçado de raios reside em seu custo computacional, embora ele possa, teoricamente, ser mais rápido do que a renderização tradicional por linhas de varredura dependendo da complexidade da cena versus o número de pixels a exibir. Até o final dos anos 2010, o traçado de raios em tempo real para cenas complexas era geralmente considerado inviável em hardwares de consumo. Algoritmos de varredura aproveitam a coerência espacial para compartilhar cálculos entre pixels adjacentes, enquanto o traçado de raios normalmente inicia o processo de forma independente para cada raio que parte do olho. Não obstante, essa dissociação propicia vantagens notáveis, como a possibilidade de lançar raios adicionais sob demanda para realizar anti-aliasing espacial e refinar a qualidade visual onde for necessário.

O algoritmo recursivo clássico no estilo de Whitted calcula inter-reflexões e refrações, mas não atinge por si só o fotorrealismo integral. Um realismo aprimorado é obtido quando a equação de renderização é calculada plenamente, já que ela contempla formalmente todos os fenômenos físicos do fluxo luminoso. Todavia, a avaliação analítica exata é inviável perante os recursos computacionais disponíveis e as limitações na modelagem de materiais. O path tracing avalia numericamente essa equação mediante métodos de Monte Carlo, oferecendo simulações de alta fidelidade da iluminação no mundo real.

Inversão da direção de percurso da cena pelos raios

O procedimento de disparar raios a partir do olho em direção à fonte de luz para renderizar uma imagem é por vezes chamado de traçado de raios reverso (backwards ray tracing), visto que segue a direção oposta à percorrida pelos fótons na natureza. Todavia, essa terminologia gera ambiguidade. Os pioneiros da área sempre traçaram os raios a partir do ponto de observação, e autores como James Arvo empregavam a expressão backwards ray tracing para designar o disparo de raios a partir das fontes luminosas e a subsequente coleta dos dados. Assim, mostra-se mais preciso distinguir o traçado de raios baseado no olho (eye-based) daquele baseado na luz (light-based).

Enquanto a iluminação direta é amostrada com mais eficiência por raios partindo da câmera, determinados efeitos de iluminação indireta beneficiam-se do lançamento de raios originados nas lâmpadas. Cáusticas são padrões luminosos concentrados gerados pela reflexão ou refração da luz em regiões curvas sobre superfícies difusas. Um algoritmo que projeta raios diretamente das fontes sobre corpos refletores ou refratores, acompanhando sua trajetória até o olho, registrará esse fenômeno com precisão superior. A integração das abordagens baseadas no olho e na luz é formalizada no path tracing bidirecional, no qual trajetórias são traçadas simultaneamente a partir da câmera e das fontes de luz, unindo-se por um segmento conector intermediário.

O mapeamento de fótons é outro método que conjuga ambas as estratégias: em uma primeira etapa, pacotes de fótons energéticos são disparados a partir das fontes luminosas para compilar uma estimativa tridimensional do fluxo radiante acumulado no espaço (o mapa de fótons propriamente dito). Na etapa seguinte, raios são projetados a partir da câmera para determinar a visibilidade primária das superfícies, empregando-se o mapa de fótons para interpolar a iluminação incidente. A vantagem do mapeamento de fótons em relação ao traçado bidirecional reside na capacidade de reutilizar as informações de iluminação para múltiplos pixels vizinhos, atenuando o tempo de processamento em troca da introdução de um viés estatístico sutil.

Dificuldades suplementares surgem quando a luz precisa transpor aberturas minúsculas para iluminar um recinto (como uma fresta em uma porta comunicando uma sala escura a um cômodo iluminado), ou em configurações espaciais onde grande parte das superfícies carece de linha de visada direta com as luminárias. Nessas conjunturas, apenas uma fração ínfima das trajetórias transportará energia; o algoritmo de transporte de luz de Metropolis inicia com uma busca estocástica no espaço de caminhos e, ao detectar trajetórias energéticas, reutiliza essas informações explorando o espaço vetorial de raios vizinhos.

Ilustração de raios gerados recursivamente a partir do observador (através do plano de projeção) até a fonte luminosa após colidirem com duas superfícies difusas.

À direita ilustra-se um exemplo de trajetória de raios gerados recursivamente a partir da câmera (ou olho) até a fonte de luz. Uma superfície difusa reflete a luz incidente em todas as direções.

Primeiramente, um raio parte da posição da câmera, atravessa um pixel do plano de projeção e penetra na cena, interceptando uma superfície difusa. A partir desse ponto, o algoritmo gera recursivamente um raio de reflexão que avança pelo espaço até colidir com uma segunda superfície difusa. Dali, um novo raio secundário é lançado e atinge a fonte luminosa, onde é absorvido. A cor final do pixel dependerá dos pigmentos de reflectância da primeira e da segunda superfície difusa, bem como da intensidade e matiz da luz emitida pela fonte. Se, por exemplo, a lâmpada irradiar luz branca e ambas as superfícies possuírem tonalidade azul, a cor resultante computada para o pixel será azul.

Exemplo

Nó trifólio, modelado por equação paramétrica e renderizado por traçado de raios em Python.

Como demonstração prática dos princípios matemáticos do traçado de raios, considere-se o cálculo da intersecção analítica entre uma reta e uma esfera tridimensional. Trata-se da geometria subjacente à intersecção reta-esfera e à conseguinte determinação cromática do pixel correspondente.

Na notação vetorial, a equação de uma esfera de centro e raio expressa-se por:

Qualquer ponto situado ao longo de um raio que parte do ponto de origem com vetor de direção (sendo um vetor unitário) pode ser parametrizado como:

onde quantifica a distância escalar entre e . Em nosso problema, são conhecidos , , e , cabendo determinar o parâmetro . Substituindo na equação da esfera:

Definindo para simplificação:

Como é um vetor unitário (), obtém-se:

Esta equação do segundo grau fornece as soluções:

Os valores reais calculados para determinam os pontos onde o raio atravessa a fronteira da esfera.

Qualquer valor negativo para indica que a intersecção situa-se atrás da origem do raio (na semirreta oposta).

Se o valor sob o radical (o discriminante) for negativo, o raio não intercepta a esfera.

Assumindo a existência de soluções reais positivas, toma-se o menor valor de , que representa o impacto mais próximo. Supondo que a esfera seja o corpo mais próximo do ponto de observação e que seu material seja reflexivo, calcula-se a trajetória do raio refletido. A lei da reflexão estabelece que o ângulo de reflexão é igual e simétrico ao ângulo de incidência em relação ao vetor normal no ponto de impacto.

O vetor normal unitário à esfera no ponto de contato é expresso por:

onde é a coordenada de impacto. A direção do raio refletido é obtida pela reflexão vetorial de em relação a :

Assim, o raio refletido é parametrizado como:

Calcula-se então a intersecção desse novo raio com as demais superfícies e fontes luminosas da cena. Por fim, a cor apurada nessa cadeia recursiva é combinada com os coeficientes de cor da esfera para definir o tom cromático exibido no pixel correspondente.

Controle adaptativo de profundidade

O controle adaptativo de profundidade consiste em interromper a geração de novos raios refletidos ou transmitidos quando a intensidade luminosa residual estimada cai abaixo de um determinado limiar de relevância visual. Um limite máximo estrito de recursão deve ser sempre configurado, sob pena de o programa entrar em laço infinito de processamento. Todavia, não é mandatório atingir a profundidade máxima se os materiais não possuírem refletividade expressiva. O algoritmo mantém o produto cumulativo dos coeficientes de atenuação e reflexão à medida que os raios se propagam.

Exemplo: considere um coeficiente de reflexão Kr = 0,5 para um grupo de superfícies. O primeiro impacto contribuirá com no máximo 50% (0,5) para a cor final; o segundo, com 0,5 × 0,5 = 0,25 (25%); o terceiro, com 0,125; o quarto, com 0,0625; o quinto, com 0,03125, decrescendo progressivamente. Pode-se introduzir paralelamente um fator de atenuação pela distância quadrática (1/D²), atenuando ainda mais o sinal.

Para raios refratados aplica-se mecanismo equivalente, com a taxa de atenuação agravada pela absorção sofrida ao atravessar a espessura do meio. Avaliações conduzidas por Hall & Greenberg constataram que, mesmo em cenas com alta densidade de materiais reflexivos, limitar a profundidade máxima em 15 níveis resultou em uma árvore de raios com profundidade média de apenas 1,7 na prática.

Volumes envolventes (Bounding volumes)

O encapsulamento de grupos de objetos tridimensionais em estruturas de hierarquia de volumes envolventes (BVH, do inglês bounding volume hierarchies) reduz drasticamente a quantidade de testes de intersecção demandados pelo traçado de raios. O raio disparado é testado primariamente contra o volume delimitador externo; se houver intersecção com o invólucro, a estrutura é percorrida recursivamente subdividindo os volumes até alcançar a geometria original contida em seu interior. A tipologia do volume envolvente (esferas ou caixas delimitadoras alinhadas aos eixos — AABB) é selecionada em função da morfologia dos modelos: sólidos delgados e alongados geram excesso de espaço vazio se envolvidos por esferas, sendo mais adequadamente circunscritos por caixas, as quais também facilitam a estruturação hierárquica.

A adoção de esquemas hierárquicos otimizados reduz a complexidade assintótica dos cálculos de intersecção de uma relação linear com o número total de objetos para uma dependência sublinear ou logarítmica. Em um arranjo ideal, cada teste de volume descarta metade das geometrias candidatas, emulando uma busca em árvore binária. Ademais, essas estruturas de aceleração espacial tornam o processamento sensível à saída, fazendo com que o custo computacional dependa mais dos elementos que efetivamente cruzam os raios do que da densidade poligonal total da cena.

Kay & Kajiya formularam um conjunto de diretrizes de otimização para hierarquias de volumes envolventes:

Traçado de raios interativo

A primeira implementação funcional de um sistema de traçado de raios interativo foi o computador LINKS-1, concebido em 1982 na Faculdade de Engenharia da Universidade de Osaka pelos professores Ohmura Kouichi, Shirakawa Isao e Kawata Toru, em cooperação com cinquenta estudantes. O equipamento constituía um arranjo de processamento massivamente paralelo dotado de 514 microprocessadores (257 unidades Zilog Z8001 e 257 unidades iAPX 86), dedicado à síntese acelerada de gráficos 3D. Segundo a Sociedade de Processamento de Informação do Japão (IPSJ), o LINKS-1 viabilizou a computação independente e paralela de cada pixel da imagem, permitindo gerar em alta velocidade projeções realistas apresentadas na Exposição Internacional de Tsukuba em 1985.

O sistema subsequente a alcançar taxas de amostragem em tempo real reconhecidas pela conferência SIGGRAPH de 2005 foram os módulos REMRT/RT, desenvolvidos em 1986 por Mike Muuss para o pacote de modelagem sólida BRL-CAD. Divulgado formalmente na conferência da USENIX de 1987, o motor operava em rede distribuída paralela, atingindo múltiplos quadros por segundo em tarefas de visualização científica através do motor otimizado LIBRT.

Ao longo dos anos 1990 e 2000, programadores da demoscene produziram motores gráficos experimentais em software baseados em traçado de raios voltados a computadores pessoais. Em 1999, pesquisadores da Universidade de Utah, liderados por Steven Parker, demonstraram um motor interativo capaz de renderizar um modelo de 35 milhões de esferas a 15 quadros por segundo com resolução de 512×512 pixels utilizando 60 CPUs em paralelo. O projeto de código aberto OpenRT buscou consolidar uma API similar ao OpenGL para padronizar o traçado de raios interativo, enquanto chips conceituais, como a Unidade de Processamento de Raios (RPU) desenvolvida na Universidade do Sarre, testavam a viabilidade de circuitos integrados dedicados.

Demonstração de Quake Wars: Ray Traced.

A viabilização do traçado de raios em jogos eletrônicos atraiu atenção destacada nos anos 2000. O pesquisador Daniel Pohl, sob orientação de Philipp Slusallek na Universidade do Sarre, adaptou os motores de jogos de Quake III Arena e Quake 4 para operar integralmente via traçado de raios, exibindo os protótipos na feira CeBIT em 2007. A Intel contratou Pohl e financiou projetos de pesquisa para explorar a renderização como argumento técnico para chips multinúcleo.:99–100 Em 12 de junho de 2008, a Intel apresentou uma versão modificada de Enemy Territory: Quake Wars, denominada Quake Wars: Ray Traced, renderizada em resolução HD (720p) entre 14 e 29 quadros por segundo em uma estação de trabalho equipada com quatro processadores quad-core Intel Xeon Tigerton operando a 2,93 GHz.

Na conferência SIGGRAPH de 2009, a Nvidia lançou o OptiX, uma interface de programação de aplicações (API) programável desenhada para acelerar o traçado de raios em suas placas de vídeo, sendo integrada posteriormente a softwares como Autodesk Arnold, Blender, Adobe After Effects e Autodesk Maya. Em 2014, o jogo The Tomorrow Children, desenvolvido para o PlayStation 4, utilizou uma variação adaptada de traçado de cone de raios em grade de voxels em cascata para calcular iluminação e reflexões indiretas.

Em setembro de 2018, a Nvidia introduziu comercialmente suas placas gráficas GeForce RTX e Quadro RTX baseadas na arquitetura Turing, pioneiras no suporte a traçado de raios acelerado por núcleos funcionais dedicados em silício (os núcleos RT). Em novembro do mesmo ano, Battlefield V tornou-se o primeiro jogo comercial a incorporar a tecnologia no mercado por intermédio da API DirectX Raytracing (DXR) da Microsoft. A AMD, que disponibilizava soluções baseadas em OpenCL por meio do Radeon ProRender, oficializou em outubro de 2020 sua linha Radeon RX série 6000 com microarquitetura RDNA 2, trazendo suporte nativo por hardware ao traçado de raios. O advento da nona geração de consoles de videogame, representada pelo PlayStation 5 e pelo Xbox Series X e Series S, integrou circuitos integrados compatíveis com aceleração de traçado de raios nas plataformas de jogos domésticas.

No segmento móvel, a Imagination Technologies anunciou em novembro de 2021 a GPU IMG CXT com blocos dedicados de traçado de raios. Em janeiro de 2022, a Samsung apresentou o processador Exynos 2200 com GPU Xclipse fundamentada em RDNA 2. A Arm oficializou sua GPU Immortalis-G715 com suporte a ray tracing em junho de 2022, e a Qualcomm revelou o chip Snapdragon 8 Gen 2 em novembro de 2022 com aceleração de hardware correspondente.

Em setembro de 2023, a Apple introduziu núcleos de aceleração de traçado de raios em seu silício, iniciando com o processador A17 Pro no iPhone 15 Pro, e expandindo o suporte no mesmo ano para os computadores Mac equipados com a família de chips M3. Essa tecnologia é acessível em dispositivos iOS, iPadOS e macOS através da API Metal, suportando travessia de estruturas de aceleração acelerada por hardware e comandos via RayQuery e RayPipeline.

Complexidade computacional

Diversos resultados formais de teoria da complexidade foram demonstrados para variantes do problema de traçado de raios. Em particular, ao modelar o problema sob uma formulação de decisão — dado o ponto inicial e a direção de um raio luminoso e um determinado ponto de destino, o raio acabará por alcançar esse ponto? — demonstram-se as seguintes conclusões analíticas:

Arquitetura de software

Middleware

APIs gráficas

Ver também

Referências

  1. ↑ Shirley, Peter (9 de julho de 2003). Realistic Ray Tracing. [S.l.]: A K Peters/CRC Press; 2.ª edição. ISBN 978-1-56881-461-2
  2. ↑ «Sponsored Feature: Changing the Game - Experimental Cloud-Based Ray Tracing». www.gamasutra.com (em inglês). Consultado em 18 de março de 2021. Cópia arquivada em 9 de maio de 2012
  3. ↑ Ravenscraft, Eric. «Should Anyone Actually Care About Ray Tracing?». Wired (em inglês). ISSN 1059-1028. Consultado em 27 de fevereiro de 2026
  4. ↑ Kastbauer, Damian (28 de janeiro de 2010). «The Next Big Steps In Game Sound Design». Gamasutra (em inglês). Consultado em 18 de março de 2021. Cópia arquivada em 9 de maio de 2012
  5. ↑ Georg Rainer Hofmann (1990). «Who invented ray tracing?». The Visual Computer. 6 (3): 120–124. doi:10.1007/BF01911003.
  6. ↑ Steve Luecking (2013). «Dürer, drawing, and digital thinking - 2013 FATE Conference». brian-curtis.com. Consultado em 13 de agosto de 2020
  7. ↑ Steve Luecking. «Stephen J Luecking». Consultado em 13 de agosto de 2020
  8. ↑ «New Process Makes Shaded Pictures Of Nonexistent Objects». Computerworld (em inglês). 1 (15). Computerworld, Inc. 22 de novembro de 1967. p. 1. Consultado em 13 de fevereiro de 2026
  9. ↑ Freniere, Edward; Tourtellott, John (25 de setembro de 1997). «Brief history of generalized ray tracing». Conference Proceedings. 3130. doi:10.1117/12.284059
  10. ↑ Appel, Arthur (30 de abril de 1968). «Some techniques for shading machine renderings of solids». Proceedings of the April 30--May 2, 1968, spring joint computer conference on - AFIPS '68 (Spring) (PDF). [S.l.: s.n.] pp. 37–45. doi:10.1145/1468075.1468082. Consultado em 9 de agosto de 2011. Cópia arquivada (PDF) em 20 de julho de 2008
  11. ↑ Goldstein, Robert; Nagel, Roger (janeiro de 1971), «3-D Visual simulation», Simulation, 16 (1): 25–31, doi:10.1177/003754977101600104
  12. ↑ Syntha Vision Sampler. 1974 – via Internet Archive
  13. ↑ Roth, Scott D. (fevereiro de 1982), «Ray Casting for Modeling Solids», Computer Graphics and Image Processing, 18 (2): 109–144, doi:10.1016/0146-664X(82)90169-1
  14. 1 2 Whitted, T. (1979). «An Improved Illumination Model for Shaded Display». Proceedings of the 6th annual conference on Computer graphics and interactive techniques. [S.l.]: Association for Computing Machinery. ISBN 0-89791-004-4. Consultado em 9 de agosto de 2011. Cópia arquivada em 19 de outubro de 2012
  15. ↑ The Compleat Angler. Bell Laboratories. 1978 – via Internet Archive
  16. ↑ «Food for Laughs». Computer Graphics World
  17. ↑ M.s (28 de maio de 2013). «This Animated Life: Pixar's Lightspeed Brings New Light to Monsters University». This Animated Life. Consultado em 26 de maio de 2020. Cópia arquivada em 17 de julho de 2020
  18. ↑ Hart, John C. (junho de 1995), «Sphere Tracing: A Geometric Method for the Antialiased Ray Tracing of Implicit Surfaces» (PDF), The Visual Computer
  19. ↑ Hart, John C.; Sandin, Daniel J.; Kauffman, Louis H. (julho de 1989), «Ray Tracing Deterministic 3-D Fractals» (PDF), Computer Graphics, 23 (3): 289–296, doi:10.1145/74334.74363
  20. ↑ Tomas Nikodym (junho de 2010). «Ray Tracing Algorithm For Interactive Applications» (PDF). Czech Technical University, FEE. Cópia arquivada (PDF) em 3 de março de 2016
  21. ↑ Chalmers, A.; Davis, T.; Reinhard, E. (2002). Practical Parallel Rendering. [S.l.]: AK Peters. ISBN 1-56881-179-9
  22. ↑ Aila, Timo; Laine, Samulii (2009). «Understanding the Efficiency of Ray Traversal on GPUs». HPG '09: Proceedings of the Conference on High Performance Graphics 2009. [S.l.: s.n.] pp. 145–149. ISBN 978-1-60558-603-8. doi:10.1145/1572769.1572792
  23. ↑ Eric P. Lafortune and Yves D. Willems (dezembro de 1993). «Bi-Directional Path Tracing». Proceedings of Compugraphics '93: 145–153
  24. ↑ Péter Dornbach (1998). «Implementation of bidirectional ray tracing algorithm» (PDF). Consultado em 11 de junho de 2008
  25. ↑ Global Illumination using Photon Maps Arquivado em 2008-08-08 no Wayback Machine
  26. ↑ «Photon Mapping - Zack Waters». Consultado em 11 de junho de 2008. Cópia arquivada em 1 de junho de 2008
  27. ↑ Veach, Eric; Guibas, Leonidas J. (1997). «Metropolis Light Transport». SIGGRAPH '97: Proceedings of the 24th annual conference on Computer graphics and interactive techniques. [S.l.: s.n.] pp. 65–76. ISBN 0-89791-896-7. doi:10.1145/258734.258775
  28. ↑ Hall, Roy A.; Greenberg, Donald P. (novembro de 1983). «A Testbed for Realistic Image Synthesis». IEEE Computer Graphics and Applications. 3 (8): 10–20. Bibcode:1983ICGA....3h..10H. doi:10.1109/MCG.1983.263292
  29. ↑ «【Osaka University 】 LINKS-1 Computer Graphics System». IPSJ Computer Museum. Information Processing Society of Japan. Consultado em 15 de novembro de 2018. Cópia arquivada em 7 de maio de 2017
  30. ↑ Defanti, Thomas A. (1984). Advances in computers. Volume 23 (PDF). [S.l.]: Academic Press. p. 121. ISBN 0-12-012123-9. Consultado em 16 de novembro de 2018. Cópia arquivada (PDF) em 12 de janeiro de 2021
  31. ↑ Ver Proceedings of 4th Computer Graphics Workshop, Cambridge, MA, EUA, outubro de 1987. Usenix Association, 1987. pp 86–98.
  32. ↑ «About BRL-CAD». Consultado em 18 de janeiro de 2019. Cópia arquivada em 1 de setembro de 2009
  33. ↑ Piero Foscari. «The Realtime Raytracing Realm». ACM Transactions on Graphics. Consultado em 17 de setembro de 2007. Cópia arquivada em 15 de setembro de 2006
  34. ↑ Parker, Steven; Martin, William (26 de abril de 1999). «Interactive ray tracing». Proceedings of the 1999 symposium on Interactive 3-D graphics. Col: I3D '99. 5. [S.l.: s.n.] pp. 119–126. ISBN 1-58113-082-1. doi:10.1145/300523.300537. Consultado em 30 de outubro de 2019
  35. ↑ Mark Ward (16 de março de 2007). «Rays light up life-like graphics». BBC News. Consultado em 17 de setembro de 2007. Cópia arquivada em 5 de outubro de 2007
  36. ↑ Peddie, Jon (2019). Ray Tracing: A Tool for All. [S.l.]: Springer Nature Switzerland. ISBN 978-3-030-17490-3. Consultado em 2 de novembro de 2022
  37. ↑ Abi-Chahla, Fedy (22 de julho de 2009). «When Will Ray Tracing Replace Rasterization?». Tom's Hardware. Consultado em 4 de novembro de 2022. Cópia arquivada em 17 de maio de 2026
  38. ↑ Valich, Theo (12 de junho de 2008). «Intel converts ET: Quake Wars to ray tracing». TG Daily. Consultado em 16 de junho de 2008. Cópia arquivada em 2 de outubro de 2008
  39. ↑ Nvidia (18 de outubro de 2009). «Nvidia OptiX». Nvidia. Consultado em 6 de novembro de 2009
  40. ↑ Cuthbert, Dylan (24 de outubro de 2015). «Creating the beautiful, ground-breaking visuals of The Tomorrow Children on PS4». PlayStation Blog. Consultado em 7 de dezembro de 2015. Cópia arquivada em 11 de dezembro de 2015
  41. ↑ Kilgariff, Emmett; Moreton, Henry; Stam, Nick; Bell, Brandon (14 de setembro de 2018). «NVIDIA Turing Architecture In-Depth». Nvidia Developer. Consultado em 13 de novembro de 2022. Cópia arquivada em 13 de novembro de 2022
  42. ↑ Takahashi, Dean (20 de agosto de 2018). «Nvidia unveils GeForce RTX graphics chips for real-time ray tracing games». VentureBeat. Consultado em 13 de novembro de 2022. Cópia arquivada em 13 de novembro de 2022
  43. ↑ Chacos, Brad (14 de novembro de 2018). «RTX on! Battlefield V becomes the first game to support DXR real-time ray tracing». PCWorld. Consultado em 13 de novembro de 2018. Cópia arquivada em 13 de novembro de 2022
  44. ↑ «Real-Time Ray Tracing with Radeon ProRender». GPUOpen. 20 de março de 2018. Consultado em 13 de novembro de 2022. Cópia arquivada em 13 de novembro de 2022
  45. ↑ Harada, Takahiro (23 de novembro de 2020). «Hardware-Accelerated Ray Tracing in AMD Radeon™ ProRender 2.0». GPUOpen. Consultado em 13 de novembro de 2022. Cópia arquivada em 13 de novembro de 2022
  46. ↑ Garreffa, Anthony (9 de setembro de 2020). «AMD to reveal next-gen Big Navi RDNA 2 graphics cards on October 28». TweakTown. Consultado em 9 de setembro de 2020. Cópia arquivada em 10 de setembro de 2020
  47. ↑ Lyles, Taylor (9 de setembro de 2020). «AMD's next-generation Zen 3 CPUs and Radeon RX 6000 'Big Navi' GPU will be revealed next month». The Verge. Consultado em 10 de setembro de 2020. Cópia arquivada em 9 de setembro de 2020
  48. ↑ «AMD Teases Radeon RX 6000 Card Performance Numbers: Aiming For 3080?». anandtech.com. AnandTech. 8 de outubro de 2020. Consultado em 25 de outubro de 2020. Cópia arquivada em 8 de outubro de 2020
  49. ↑ «AMD Announces Ryzen "Zen 3" and Radeon "RDNA2" Presentations for October: A New Journey Begins». anandtech.com. AnandTech. 9 de setembro de 2020. Consultado em 25 de outubro de 2020. Cópia arquivada em 10 de setembro de 2020
  50. ↑ Judd, Will (28 de outubro de 2020). «AMD unveils three Radeon 6000 graphics cards with ray tracing and RTX-beating performance». Eurogamer. Consultado em 28 de outubro de 2020. Cópia arquivada em 10 de setembro de 2021
  51. ↑ Warren, Tom (8 de junho de 2019). «Microsoft hints at next-generation Xbox 'Scarlet' in E3 teasers». The Verge. Consultado em 8 de outubro de 2019. Cópia arquivada em 9 de junho de 2019
  52. ↑ Chaim, Gartenberg (8 de outubro de 2019). «Sony confirms PlayStation 5 name, holiday 2020 release date». The Verge. Consultado em 8 de outubro de 2019
  53. ↑ Warren, Tom (24 de fevereiro de 2020). «Microsoft reveals more Xbox Series X specs, confirms 12 teraflops GPU». The Verge. Consultado em 25 de fevereiro de 2020. Cópia arquivada em 24 de fevereiro de 2020
  54. ↑ Warren, Tom (9 de setembro de 2020). «Microsoft reveals Xbox Series S specs, promises four times the processing power of Xbox One». The Verge. Consultado em 9 de setembro de 2020. Cópia arquivada em 9 de setembro de 2020
  55. ↑ Vandervell, Andy (4 de janeiro de 2020). «Making sense of the rampant Xbox Series X rumour mill». Wired. Consultado em 13 de novembro de 2022. Cópia arquivada em 13 de novembro de 2022
  56. ↑ 93digital (4 de novembro de 2021). «Imagination launches the most advanced ray tracing GPU». Imagination (em inglês). Consultado em 17 de setembro de 2023
  57. ↑ «Ray Tracing». Imagination (em inglês). Consultado em 17 de setembro de 2023
  58. ↑ «Samsung Introduces Game Changing Exynos 2200 Processor With Xclipse GPU Powered by AMD RDNA 2 Architecture». news.samsung.com (em inglês). Consultado em 17 de setembro de 2023
  59. ↑ «Gaming Performance Unleashed with Arm's new GPUs - Announcements - Arm Community blogs - Arm Community». community.arm.com (em inglês). 28 de junho de 2022. Consultado em 17 de setembro de 2023
  60. ↑ «Snapdragon 8 Gen 2 Defines a New Standard for Premium Smartphones». www.qualcomm.com (em inglês). Consultado em 17 de setembro de 2023. Cópia arquivada em 2 de abril de 2023
  61. ↑ «New, Snapdragon 8 Gen 2: 8 extraordinary mobile experiences, unveiled». www.qualcomm.com (em inglês). Consultado em 17 de setembro de 2023
  62. ↑ Bonshor, Ryan Smith, Gavin. «The Apple 2023 Fall iPhone Event Live Blog (Starts at 10am PT/17:00 UTC)». www.anandtech.com. Consultado em 17 de setembro de 2023. Cópia arquivada em 12 de setembro de 2023
  63. ↑ «Apple unveils iPhone 15 Pro and iPhone 15 Pro Max». Apple Newsroom (em inglês). Consultado em 27 de outubro de 2024. Cópia arquivada em 12 de setembro de 2023
  64. ↑ «Apple unveils M3, M3 Pro, and M3 Max, the most advanced chips for a personal computer». Apple Newsroom (em inglês). Consultado em 27 de outubro de 2024. Cópia arquivada em 8 de junho de 2026
  65. ↑ «Discover ray tracing with Metal - WWDC20 - Videos». Apple Developer (em inglês). Consultado em 27 de outubro de 2024
  66. ↑ «Computability and Complexity of Ray Tracing» (PDF). CS.Duke.edu. Consultado em 4 de fevereiro de 2014. Cópia arquivada (PDF) em 17 de janeiro de 2015

Ligações externas