thumb|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 thumb|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. thumb|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.

thumb|right|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 right|thumb|300px|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. left|thumb|300px|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):

: posição do olho (câmera) : posição do alvo (target) : campo de visão (field of view) — para humanos, podemos assumir : número de pixels quadrados nas direções vertical e horizontal da viewport : índices do pixel correspondente : vetor vertical que indica a orientação de cima e baixo, usualmente — componente de rolamento (roll) que determina a rotação da viewport em torno do ponto C (onde o eixo de rotação é o segmento ET)

708px|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: