Traçado de raio (gráficos) - Ray tracing (graphics)

Este traçado de raio recursivo de esferas coloridas reflexivas em uma superfície branca demonstra os efeitos da profundidade de campo rasa , fontes de luz de "área" e inter- reflexão difusa .

Na computação gráfica 3D , o traçado de raio é uma técnica para modelar o transporte de luz para uso em uma ampla variedade de algoritmos de renderização para gerar imagens digitais .

Em um espectro de custo computacional e fidelidade visual, ray tracing baseado no render técnicas de fundição de raios , o traçado de raios recursiva , o traçado de raios distribuição , mapeamento de fotões para o rastreio caminho são geralmente mais lenta e maior fidelidade do que scanline render métodos. Assim, o traçado de raio foi implantado pela primeira vez em aplicativos em que o tempo relativamente longo para renderizar poderia ser tolerado, como em imagens ainda geradas por computador e efeitos visuais de filme e televisão (VFX), mas era menos adequado para aplicativos em tempo real, como como videogames , onde a velocidade é crítica na renderização de cada quadro .

Desde 2018, no entanto, a aceleração de hardware para rastreamento de raio em tempo real tornou-se padrão em novas placas gráficas comerciais, e APIs gráficas seguiram o exemplo, permitindo que os desenvolvedores usem rastreamento de raio híbrido e renderização baseada em rasterização em jogos e outros aplicativos em tempo real com um acerto menor nos tempos de renderização dos quadros.

O rastreamento de raio é capaz de simular uma variedade de efeitos ópticos , como reflexão , refração , sombras suaves , espalhamento , profundidade de campo , desfoque de movimento , cáusticos , oclusão ambiental e fenômenos de dispersão (como aberração cromática ). Ele também pode ser usado para rastrear o caminho das ondas sonoras de maneira semelhante às ondas de luz, tornando-se uma opção viável para um design de som mais envolvente em videogames ao renderizar reverberações e ecos realistas . Na verdade, qualquer onda física ou fenômeno de partícula com movimento aproximadamente linear pode ser simulado com traçado de raio .

As técnicas de renderização com base em rastreamento de raios que envolvem a amostragem de luz sobre um domínio geram artefatos de ruído de imagem que podem ser tratados rastreando um grande número de raios ou usando técnicas de redução de ruído .

História

Esta xilogravura de Albrecht Dürer de 1525 mostra o uso de uma porta de Dürer.
Esta imagem de Albrecht Dürer de 1532 mostra um homem usando um layout de grade para criar uma imagem. O artista alemão renascentista é o primeiro a descrever a técnica.

A ideia do traçado de raios vem desde o século 16, quando foi descrito por Albrecht Dürer , que é creditado por sua invenção. Em Four Books on Measurement , ele descreveu um aparelho chamado porta de Dürer usando um fio preso à ponta de uma caneta que um assistente move ao longo dos contornos do objeto a desenhar. O fio passa pela moldura da porta e, em seguida, por um gancho na parede. O fio forma um raio e o gancho atua como o centro de projeção e corresponde à posição da câmera no traçado do raio.

O uso de um computador para rastreamento de raios para gerar imagens sombreadas foi realizado pela primeira vez por Arthur Appel em 1968. Appel usou rastreamento de raios para visibilidade primária (determinando a superfície mais próxima da câmera em cada ponto da imagem) e traçou raios secundários para a fonte de luz de cada ponto sendo sombreado para determinar se o ponto estava na sombra ou não.

Mais tarde, em 1971, Goldstein e Nagel do MAGI (Mathematical Applications Group, Inc.) publicaram “3-D Visual Simulation”, em que o traçado de raios é usado para fazer imagens sombreadas de sólidos simulando o processo fotográfico ao contrário. Eles lançam um raio através de cada elemento da imagem (pixel) na tela na cena para identificar a superfície visível. A primeira superfície cortada pelo raio era a visível. Este algoritmo de renderização baseado em traçado de raio não recursivo é hoje chamado de " lançamento de raio ". No ponto de interseção da superfície do raio encontrado, eles calcularam a normal da superfície e, sabendo a posição da fonte de luz, calcularam o brilho do pixel na tela. A publicação deles descreve um curta (30 segundos) filme “feito usando o hardware de exibição da Universidade de Maryland equipado com uma câmera de 16 mm. O filme mostrou o helicóptero e uma simples colocação de canhão no nível do solo. O helicóptero foi programado para passar por uma série de manobras, incluindo curvas, decolagens e pousos, etc., até que finalmente seja derrubado e caído. ” Um computador CDC 6600 foi usado. MAGI produziu um vídeo de animação chamado MAGI / SynthaVision Sampler em 1974.

Flip book criado em 1976 na Caltech

Outro exemplo inicial de elenco de raios ocorreu em 1976, quando Scott Roth criou uma animação flip book no curso de computação gráfica de Bob Sproull na Caltech . As páginas digitalizadas são mostradas como um vídeo à direita. O programa de computador de Roth notou um ponto de borda em uma localização de pixel se o raio cruzou um plano limitado diferente daquele de seus vizinhos. Claro, um raio pode cruzar vários planos no espaço, mas apenas o ponto da superfície mais próximo da câmera foi considerado visível. As bordas são irregulares porque apenas uma resolução grosseira era prática com o poder de computação do DEC PDP-10 de compartilhamento de tempo usado. O “terminal” era um display de tubo de armazenamento Tektronix para texto e gráficos. Anexada ao visor estava uma impressora que criaria uma imagem do visor em papel térmico em rolo. Roth estendeu a estrutura, introduziu o termo ray casting no contexto de computação gráfica e modelagem de sólidos e, posteriormente, publicou seu trabalho enquanto trabalhava no GM Research Labs.

Turner Whitted foi o primeiro a mostrar o traçado de raio recursivo para reflexão de espelho e para refração através de objetos translúcidos, com um ângulo determinado pelo índice de refração do sólido, e a usar o traçado de raio para anti-aliasing . Whitted também mostrou sombras traçadas por raios. Ele produziu um filme de traçado de raio recursivo chamado The Compleat Angler em 1979, quando era engenheiro no Bell Labs. O algoritmo de rastreamento de raios profundamente recursivo de Whitted reformulou a renderização de ser principalmente uma questão de determinação de visibilidade de superfície para uma questão de transporte de luz. Seu artigo inspirou uma série de trabalhos subsequentes de outros que incluíram o rastreamento de raio de distribuição e, finalmente , o rastreamento de caminho imparcial , que fornece a estrutura de equação de renderização que permitiu que as imagens geradas por computador fossem fiéis à realidade.

Por décadas, a iluminação global em grandes filmes usando imagens geradas por computador foi falsificada com luzes adicionais. A renderização baseada em rastreamento de raio acabou mudando isso, permitindo o transporte de luz baseado em física. Os primeiros filmes renderizados inteiramente usando rastreamento de caminho incluem Monster House (2006), Cloudy with a Chance of Meatballs (2009) e Monsters University (2013).

Visão geral do algoritmo

O algoritmo de rastreamento de raios constrói uma imagem estendendo os raios em uma cena e refletindo-os nas superfícies e em direção a fontes de luz para aproximar o valor da cor dos pixels.
Ilustração do algoritmo de rastreamento de raio para um pixel (até o primeiro salto)

O traçado de raio óptico descreve um método para produzir imagens visuais construídas em ambientes de computação gráfica 3D , com mais fotorrealismo do que técnicas de projeção de raio ou renderização de linha de varredura . Ele funciona traçando um caminho de um olho imaginário através de cada pixel em uma tela virtual e calculando a cor do objeto visível através dela.

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

Normalmente, cada raio deve ser testado para interseção com algum subconjunto de todos os objetos na cena. Uma vez que o objeto mais próximo tenha sido identificado, o algoritmo estimará a luz que entra no ponto de interseçã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 lançados na cena.

Pode parecer à primeira vista contra-intuitivo ou "para trás" enviar raios para longe da câmera, em vez de para ela (como a luz real faz na realidade), mas fazer isso é muitas ordens de magnitude mais eficiente. Uma vez que a esmagadora maioria dos raios de luz de uma determinada fonte de luz não chega diretamente aos olhos do observador, uma simulação "direta" poderia potencialmente desperdiçar uma enorme quantidade de computação em caminhos de luz que nunca são registrados.

Portanto, o atalho tomado no traçado de raio é pressupor que um determinado raio intercepta o quadro de vista. Após um número máximo de reflexões ou um raio viajando por uma certa distância sem interseção, o raio para de viajar e o valor do pixel é atualizado.

Calcular raios para janela de visualização retangular

Na entrada, temos (no cálculo, usamos normalização vetorial e produto vetorial ):

  • posição dos olhos
  • Posição do alvo
  • campo de visão - para humanos, podemos assumir
  • número de pixels quadrados na direção vertical e horizontal da janela de visualização
  • números de pixel real
  • vetor vertical que indica onde está para cima e para baixo, geralmente (não visível na imagem) - componente de rolo que determina a rotação da janela de visualização em torno do ponto C (onde o eixo de rotação é a seção ET)

Esquema da janela de visualização com pixels, olho E e alvo T, centro da janela de visualização C

A ideia é encontrar a posição do centro de cada pixel da janela de visualização, o que nos permite encontrar a linha que vai do olho até aquele pixel e, finalmente, obter o raio descrito por ponto e vetor (ou sua normalização ). Primeiro, precisamos encontrar as coordenadas do pixel inferior esquerdo da janela de visualização e encontrar o próximo pixel, fazendo uma mudança ao longo de direções paralelas à janela de visualização (vetores i ), multiplicado pelo tamanho do pixel. Abaixo, apresentamos fórmulas que incluem a distância entre o olho e a janela de visualização. No entanto, este valor será reduzido durante a normalização do raio (então você também pode aceitar isso e removê-lo dos cálculos).

Pré-cálculos: vamos encontrar e normalizar o vetor e os vetores que são paralelos à janela de visualização (todos representados na imagem acima)

observe que no centro da janela de visualização , a seguir calculamos os tamanhos da janela de visualização divididos por 2, incluindo a proporção

e então calculamos os vetores de deslocamento do próximo pixel ao longo de direções paralelas à janela de visualização ( ) e o centro do pixel inferior esquerdo

Cálculos: nota e raio assim

A fórmula acima foi testada neste projeto javascript (funciona no navegador).

Descrição detalhada do algoritmo de computador de rastreamento de raios e sua gênese

O que acontece na natureza (simplificada)

Na natureza, uma fonte de luz emite um raio de luz que viaja, eventualmente, para uma superfície que interrompe seu progresso. Pode-se pensar neste "raio" como um fluxo de fótons viajando ao longo do mesmo caminho. Em um vácuo perfeito, esse raio será uma linha reta (ignorando os efeitos relativísticos ). Qualquer combinação de quatro coisas pode acontecer com este raio de luz: absorção , reflexão , refração e fluorescência . Uma superfície pode absorver parte do raio de luz, resultando em uma perda de intensidade da luz refletida e / ou refratada. Também pode refletir todo ou parte do raio de luz, em uma ou mais direções. Se a superfície tiver qualquer propriedade transparente ou translúcida , ela refrata uma parte do feixe de luz em si mesma em uma direção diferente enquanto absorve parte (ou todo) do espectro (e possivelmente altera a cor). Menos comumente, uma superfície pode absorver alguma parte da luz e reemitir fluorescentemente a luz em uma cor de comprimento de onda mais longo em uma direção aleatória, embora isso seja raro o suficiente para que possa ser desconsiderado da maioria dos aplicativos de renderização. Entre a absorção, reflexão, refração e fluorescência, toda a luz que entra deve ser contabilizada, e nada mais. Uma superfície não pode, por exemplo, refletir 66% de um raio de luz de entrada e refratar 50%, uma vez que os dois somariam 116%. A partir daqui, os raios refletidos e / ou refratados podem atingir outras superfícies, onde suas propriedades absortivas, refrativas, reflexivas e fluorescentes afetam novamente o progresso dos raios incidentes. Alguns desses raios viajam de tal forma que atingem nossos olhos, fazendo com que vejamos a cena e assim contribuam para a imagem final renderizada.

Algoritmo de Ray Cast

A ideia por trás do lançamento de raios, o predecessor do rastreamento recursivo de raios, é rastrear os raios do olho, um por pixel, e encontrar o objeto mais próximo bloqueando o caminho desse raio. Pense em uma imagem como uma porta de tela, com cada quadrado na tela sendo um pixel. Este é então o objeto que o olho vê através daquele pixel. Usando as propriedades do material e o efeito das luzes na cena, esse algoritmo pode determinar o sombreamento desse objeto. A suposição simplificadora é feita de que se uma superfície estiver voltada para uma luz, a luz alcançará essa superfície e não será bloqueada ou na sombra. O sombreamento da superfície é calculado usando modelos tradicionais de sombreamento de gráficos de computador 3D. Uma vantagem importante oferecida pelo ray casting em relação aos algoritmos de linha de varredura mais antigos era sua capacidade de lidar facilmente com superfícies não planas e sólidos, como cones e esferas . Se uma superfície matemática pode ser interceptada por um raio, ela pode ser renderizada usando a projeção de raios. Objetos elaborados podem ser criados usando técnicas de modelagem de sólidos e facilmente renderizados.

Algoritmo de rastreamento de raio recursivo

O rastreamento de raios pode criar imagens fotorrealistas.
Além do alto grau de realismo, o traçado de raio pode simular os efeitos de uma câmera devido à profundidade de campo e ao formato da abertura (neste caso, um hexágono ).
O número de reflexos, ou saltos, que um “raio” pode fazer, e como ele é afetado cada vez que encontra uma superfície, é controlado por configurações no software. Nesta imagem, cada raio foi permitido refletir até 16 vezes . Múltiplos “reflexos de reflexos” podem, portanto, ser vistos nessas esferas. (Imagem criada com Cobalt .)
O número de refrações que um “raio” pode fazer, e como ele é afetado cada vez que encontra uma superfície que permite a transmissão de luz , é controlado por configurações no software. Aqui, cada raio foi configurado para refratar ou refletir (a "profundidade") até 9 vezes . Reflexos de Fresnel foram usados ​​e cáusticos são visíveis. (Imagem criada com V-Ray .)

Algoritmos anteriores rastreavam os raios do olho para a cena até atingirem um objeto, mas determinavam a cor do raio sem rastrear mais raios recursivamente. O rastreamento de raio recursivo continua o processo. Quando um raio atinge uma superfície, raios adicionais podem ser lançados por causa da reflexão, refração e sombra:

  • Um raio de reflexão é traçado na direção do reflexo do espelho. O objeto mais próximo que ela cruza é o que será visto no reflexo.
  • Um raio de refração viajando através de um material transparente funciona de forma semelhante, com a adição de que um raio de refração pode estar entrando ou saindo de um material. Turner Whitted estendeu a lógica matemática para raios que passam por um sólido transparente para incluir os efeitos de refração.
  • Um raio de sombra é traçado em direção a cada luz. Se algum objeto opaco for encontrado entre a superfície e a luz, a superfície está na sombra e a luz não a ilumina.

Esses raios recursivos adicionam mais realismo às imagens traçadas por raio.

Vantagens sobre outros métodos de renderização

A popularidade da renderização baseada em Ray tracing deriva de sua base em uma simulação realista de transporte de luz , em comparação com outros métodos de renderização, como a rasterização , que se concentra mais na simulação realista da geometria. Efeitos como reflexos e sombras , que são difíceis de simular usando outros algoritmos, são um resultado natural do algoritmo de traçado de raio. A independência computacional de cada raio torna o traçado de raio acessível a um nível básico de paralelização , mas a divergência dos caminhos dos raios torna a alta utilização sob paralelismo bastante difícil de alcançar na prática.

Desvantagens

Uma séria desvantagem do traçado de raio é o desempenho (embora possa, em teoria, ser mais rápido do que a renderização de linha de varredura tradicional, dependendo da complexidade da cena em relação ao número de pixels na tela). Até o final da década de 2010, o rastreamento de raio em tempo real era geralmente considerado impossível no hardware do consumidor para tarefas não triviais. Os algoritmos Scanline e outros algoritmos usam coerência de dados para compartilhar cálculos entre pixels, enquanto o traçado de raio normalmente inicia o processo de novo, tratando cada raio de olho separadamente. No entanto, essa separação oferece outras vantagens, como a capacidade de disparar mais raios conforme necessário para realizar o anti-aliasing espacial e melhorar a qualidade da imagem quando necessário.

Embora lide com a inter-reflexão e os efeitos ópticos, como a refração, com precisão, o traçado de raio tradicional também não é necessariamente fotorrealístico . O fotorrealismo verdadeiro ocorre quando a equação de renderização é bem próxima ou totalmente implementada. Implementar a equação de renderização fornece fotorrealismo verdadeiro, pois a equação descreve cada efeito físico do fluxo de luz. No entanto, isso geralmente é inviável, dados os recursos de computação necessários.

O realismo de todos os métodos de renderização pode ser avaliado como uma aproximação da equação. O rastreamento de raio, se for limitado ao algoritmo de Whitted, não é necessariamente o mais realista. Métodos que rastreiam os raios, mas incluem técnicas adicionais ( mapeamento de fótons , rastreamento de caminho ), fornecem uma simulação muito mais precisa da iluminação do mundo real.

Direção invertida da travessia da cena pelos raios

O processo de disparar raios do olho para a fonte de luz para renderizar uma imagem às vezes é chamado de traçado de raio reverso , uma vez que é a direção oposta que os fótons realmente viajam. No entanto, há confusão com essa terminologia. O rastreamento inicial de raios sempre foi feito a partir do olho, e os primeiros pesquisadores, como James Arvo, usaram o termo rastreamento de raios reversos para significar disparar raios das luzes e coletar os resultados. Portanto, é mais clara a distinção baseada olhos contra a luz baseado em ray tracing.

Embora a iluminação direta seja geralmente melhor amostrada usando rastreamento de raios com base no olho, certos efeitos indiretos podem se beneficiar dos raios gerados pelas luzes. Os cáusticos são padrões brilhantes causados ​​pela focalização da luz em uma ampla região reflexiva em uma área estreita de superfície (quase) difusa. Um algoritmo que emite raios diretamente de luzes em objetos reflexivos, traçando seus caminhos até o olho, vai ter uma melhor amostra desse fenômeno. Essa integração de raios baseados em olhos e raios baseados em luz é frequentemente expressa como rastreamento de caminho bidirecional, no qual os caminhos são rastreados a partir do olho e das luzes, e os caminhos subsequentemente unidos por um raio de conexão após algum comprimento.

O mapeamento de fótons é outro método que usa rastreamento de raios baseado em luz e no olho; em uma passagem inicial, os fótons energéticos são rastreados ao longo dos raios da fonte de luz para calcular uma estimativa do fluxo radiante como uma função do espaço tridimensional (o próprio mapa de fótons homônimo). Em uma passagem subsequente, os raios são traçados do olho para a cena para determinar as superfícies visíveis, e o mapa de fótons é usado para estimar a iluminação nos pontos visíveis da superfície. A vantagem do mapeamento de fótons em relação ao rastreamento de caminho bidirecional é a capacidade de alcançar uma reutilização significativa de fótons, reduzindo a computação, ao custo de um viés estatístico.

Um problema adicional ocorre quando a luz deve passar por uma abertura muito estreita para iluminar a cena (considere uma sala escura, com uma porta ligeiramente entreaberta levando a uma sala bem iluminada), ou uma cena em que a maioria dos pontos não tem linha direta de - visão para qualquer fonte de luz (como luminárias direcionadas ao teto ou tochas ). Nesses casos, apenas um pequeno subconjunto de caminhos transportará energia; O transporte de luz em metrópole é um método que começa com uma busca aleatória do espaço do caminho e, quando caminhos energéticos são encontrados, reutiliza essa informação explorando o espaço de raios próximo.

Imagem mostrando raios gerados recursivamente do "olho" (e através de um plano de imagem) para uma fonte de luz após encontrar duas superfícies difusas .

À direita está uma imagem que mostra um exemplo simples de um caminho de raios gerado recursivamente da câmera (ou olho) para a fonte de luz usando o algoritmo acima. Uma superfície difusa reflete a luz em todas as direções.

Primeiro, um raio é criado em um ponto de visão e traçado através de um pixel até a cena, onde atinge uma superfície difusa. A partir dessa superfície, o algoritmo gera recursivamente um raio de reflexão, que é traçado pela cena, onde atinge outra superfície difusa. Finalmente, outro raio de reflexão é gerado e traçado pela cena, onde atinge a fonte de luz e é absorvido. A cor do pixel agora depende das cores da primeira e da segunda superfície difusa e da cor da luz emitida pela fonte de luz. Por exemplo, se a fonte de luz emitiu luz branca e as duas superfícies difusas eram azuis, a cor resultante do pixel é azul.

Exemplo

Como uma demonstração dos princípios envolvidos no traçado de raio, considere como alguém encontraria a interseção entre um raio e uma esfera. Esta é apenas a matemática por trás da interseção linha-esfera e a subsequente determinação da cor do pixel que está sendo calculado. É claro que há muito mais no processo geral de rastreamento de raios, mas isso demonstra um exemplo dos algoritmos usados.

Em notação vetorial , a equação de uma esfera com centro e raio é

Qualquer ponto em um raio começando de um ponto com direção (aqui é um vetor unitário ) pode ser escrito como

onde está sua distância entre e . No nosso problema, nós sabemos , , (por exemplo, a posição de uma fonte de luz) e , e precisamos encontrar . Portanto, substituímos por :

Deixe para simplicidade; então

Saber que d é um vetor unitário nos permite esta pequena simplificação:

Esta equação quadrática tem soluções

Os dois valores de encontrados ao resolver esta equação são os dois tais que são os pontos onde o raio intercepta a esfera.

Qualquer valor negativo não está no raio, mas sim na meia-linha oposta (ou seja, aquela que começa com a direção oposta).

Se a quantidade sob a raiz quadrada (o discriminante ) for negativa, o raio não intercepta a esfera.

Suponhamos agora que haja pelo menos uma solução positiva, e que seja a mínima. Além disso, vamos supor que a esfera é o objeto mais próximo em nossa cena que cruza nosso raio e que é feita de um material reflexivo. Precisamos descobrir em que direção o raio de luz é refletido. As leis de reflexão afirmam que o ângulo de reflexão é igual e oposto ao ângulo de incidência entre o raio incidente e a normal à esfera.

O normal para a esfera é simplesmente

onde é o ponto de interseção encontrado antes. A direção do reflexo pode ser encontrada por um reflexo de em relação a , isto é

Assim, o raio refletido tem a equação

Agora, só precisamos calcular a interseção do último raio com nosso campo de visão , para obter o pixel que nosso raio de luz refletido atingirá. Por último, este pixel é definido com uma cor adequada, levando em consideração como a cor da fonte de luz original e a da esfera são combinadas pelo reflexo.

Controle de profundidade adaptativo

O controle de profundidade adaptável significa que o renderizador para de gerar raios refletidos / transmitidos quando a intensidade computada se torna menor que um certo limite. Deve sempre haver uma profundidade máxima definida ou então o programa geraria um número infinito de raios. Mas nem sempre é necessário ir à profundidade máxima se as superfícies não forem altamente refletivas. Para testar isso, o ray tracer deve calcular e manter o produto dos coeficientes globais e de reflexão à medida que os raios são traçados.

Exemplo: seja Kr = 0,5 para um conjunto de superfícies. Então, da primeira superfície, a contribuição máxima é 0,5, para a reflexão da segunda: 0,5 × 0,5 = 0,25, a terceira: 0,25 × 0,5 = 0,125, a quarta: 0,125 × 0,5 = 0,0625, a quinta: 0,0625 × 0,5 = 0,03125 , etc. Além disso, podemos implementar um fator de atenuação de distância, como 1 / D2, que também diminuiria a contribuição de intensidade.

Para um raio transmitido, poderíamos fazer algo semelhante, mas, nesse caso, a distância percorrida pelo objeto causaria uma diminuição de intensidade ainda mais rápida. Como um exemplo disso, Hall & Greenberg descobriram que mesmo para uma cena muito reflexiva, usar isso com uma profundidade máxima de 15 resultou em uma profundidade média da árvore de raios de 1,7.

Volumes delimitadores

O fechamento de grupos de objetos em conjuntos de volumes de limites hierárquicos diminui a quantidade de cálculos necessários para o traçado de raio. Um raio lançado é primeiro testado para uma interseção com o volume limite e, em seguida, se houver uma interseção, o volume é dividido recursivamente até que o raio atinja o objeto. O melhor tipo de volume delimitador será determinado pela forma do objeto ou objetos subjacentes. Por exemplo, se os objetos são longos e finos, uma esfera envolverá principalmente um espaço vazio em comparação com uma caixa. As caixas também são mais fáceis de gerar volumes de limites hierárquicos.

Observe que usar um sistema hierárquico como este (assumindo que seja feito com cuidado) muda o tempo computacional da interseção de uma dependência linear do número de objetos para algo entre uma dependência linear e logarítmica. Isso porque, para um caso perfeito, cada teste de interseção dividiria as possibilidades por dois e resultaria em uma estrutura do tipo árvore binária. Os métodos de subdivisão espacial, discutidos abaixo, tentam conseguir isso.

Kay e Kajiya fornecem uma lista de propriedades desejadas para volumes de limites hierárquicos:

  • As subárvores devem conter objetos próximos uns dos outros e quanto mais abaixo na árvore, mais próximos devem estar os objetos.
  • O volume de cada nó deve ser mínimo.
  • A soma dos volumes de todos os volumes delimitadores deve ser mínima.
  • Maior atenção deve ser dada aos nós próximos à raiz, pois podar um galho próximo à raiz removerá mais objetos potenciais do que um mais abaixo na árvore.
  • O tempo gasto na construção da hierarquia deve ser muito menor do que o tempo economizado ao usá-la.

Traçado de raio interativo

A primeira implementação de um ray tracer interativo foi o LINKS-1 Computer Graphics System construído em 1982 na Escola de Engenharia da Universidade de Osaka , pelos professores Ohmura Kouichi, Shirakawa Isao e Kawata Toru com 50 alunos. Era um sistema de computador de processamento massivamente paralelo com 514 microprocessadores (257 Zilog Z8001s e 257 iAPX 86s ), usado para renderizar gráficos de computador 3D realistas com rastreamento de raios de alta velocidade. De acordo com a Sociedade de Processamento de Informação do Japão : "O núcleo da renderização de imagens 3D é calcular a luminância de cada pixel que compõe uma superfície renderizada a partir de um determinado ponto de vista, fonte de luz e posição do objeto. O sistema LINKS-1 foi desenvolvido para realizar um metodologia de renderização de imagem na qual cada pixel pode ser processado em paralelo de forma independente usando traçado de raio. Ao desenvolver uma nova metodologia de software especificamente para renderização de imagem em alta velocidade, o LINKS-1 foi capaz de renderizar rapidamente imagens altamente realistas. " Ele foi usado para criar um dos primeiros vídeos em 3D do céu, semelhante a um planetário, feito inteiramente com computação gráfica. O vídeo foi apresentado no pavilhão da Fujitsu na Exposição Internacional de Tsukuba em 1985. “Foi o segundo sistema a fazê-lo depois do Evans & Sutherland Digistar em 1982. O LINKS-1 foi relatado como o computador mais poderoso do mundo em 1984.

O primeiro registro público de traçado de raio em "tempo real" com renderização interativa (ou seja, atualizações maiores que um quadro por segundo) foi creditado na conferência de computação gráfica SIGGRAPH 2005 como sendo as ferramentas REMRT / RT desenvolvidas em 1986 por Mike Muuss para o Sistema de modelagem de sólidos BRL-CAD . Publicado inicialmente em 1987 na USENIX , o ray tracer BRL-CAD foi uma implementação inicial de um sistema de traçado de raio distribuído em rede paralela que alcançou vários quadros por segundo no desempenho de renderização. Esse desempenho foi obtido por meio do mecanismo de rastreamento de raios LIBRT altamente otimizado, mas independente de plataforma, em BRL-CAD e pelo uso de geometria CSG implícita sólida em várias máquinas paralelas de memória compartilhada em uma rede de commodities. O raytracer do BRL-CAD, incluindo as ferramentas REMRT / RT, continua disponível e desenvolvido hoje como software de código aberto.

Desde então, tem havido esforços e pesquisas consideráveis ​​para implementar o rastreamento de raios em velocidades em tempo real para uma variedade de propósitos em configurações de desktop autônomo. Essas finalidades incluem aplicativos gráficos 3D interativos, como produções demoscene , jogos de computador e vídeo e renderização de imagens. Alguns motores 3D de software em tempo real baseados em traçado de raio foram desenvolvidos por programadores de demonstração amadores desde o final dos anos 1990.

Em 1999, uma equipe da Universidade de Utah , liderada por Steven Parker, demonstrou o traçado de raios interativo ao vivo no Simpósio de 1999 sobre gráficos 3D interativos. Eles renderizaram um modelo de 35 milhões de esferas com resolução de 512 por 512 pixels, rodando a aproximadamente 15 quadros por segundo em 60 CPUs.

O projeto OpenRT incluiu um núcleo de software altamente otimizado para traçado de raios, juntamente com uma API semelhante a OpenGL , a fim de oferecer uma alternativa à abordagem atual baseada em rasterização para gráficos 3D interativos. O hardware de rastreamento de raios , como o Ray Processing Unit experimental desenvolvido por Sven Woop na Universidade de Saarland , foi projetado para acelerar algumas das operações computacionalmente intensivas de rastreamento de raios. Em 16 de março de 2007, a Universidade de Saarland revelou uma implementação de um mecanismo de rastreamento de raios de alto desempenho que permitia que jogos de computador fossem renderizados por rastreamento de raios sem uso intensivo de recursos.

Traçado do raio do Quake Wars

Em 12 de junho de 2008, a Intel demonstrou uma versão especial de Enemy Territory: Quake Wars , intitulada Quake Wars: Ray Traced , usando ray tracing para renderização, rodando em resolução HD básica (720p). ETQW operou em 14–29 quadros por segundo. A demonstração foi executada em um sistema Xeon Tigerton de 16 núcleos (4 soquetes, 4 núcleos) rodando a 2,93 GHz.

No SIGGRAPH 2009, a Nvidia anunciou OptiX , uma API gratuita para rastreamento de raios em tempo real em GPUs Nvidia. A API expõe sete pontos de entrada programáveis ​​dentro do pipeline de rastreamento de raio, permitindo câmeras personalizadas, interseções primitivas de raio, sombreadores, sombreamento, etc. Esta flexibilidade permite rastreamento de caminho bidirecional, transporte de luz Metropolis e muitos outros algoritmos de renderização que não podem ser implementados com recursão da cauda. Os renderizadores baseados em OptiX são usados ​​no Autodesk Arnold, Adobe AfterEffects , Bunkspeed Shot, Autodesk Maya , 3ds max e muitos outros renderizadores.

A Imagination Technologies oferece uma API gratuita chamada OpenRL que acelera algoritmos de renderização baseados em traçado de raio recursivo da cauda e, junto com seu hardware de traçado de raio proprietário, funciona com o Autodesk Maya para fornecer o que o 3D World chama de " traçado de raio em tempo real para o artista do dia-a-dia".

Em 2014, uma demonstração do PlayStation 4 videogame The Tomorrow Crianças , desenvolvido pela Q-Games e Japan Studio , demonstrou novas iluminação técnicas desenvolvidas por Q-Games, nomeadamente em cascata voxel cone ray tracing, que simula a iluminação em tempo real e usos reflexos mais realistas em vez de reflexos do espaço da tela .

A Nvidia oferece rastreamento de raio acelerado por hardware em suas GPUs GeForce RTX e Quadro RTX, atualmente baseadas na arquitetura Ampere . O hardware da Nvidia usa um bloco funcional separado, publicamente chamado de "núcleo RT". Esta unidade é comparável a uma unidade de textura em tamanho, latência e interface com o núcleo do processador. A unidade apresenta travessia de BVH, descompressão de nó BVH comprimido, teste de interseção de raio-AABB e teste de interseção de raio-triângulo.

A AMD oferece ray tracing interativo sobre OpenCL em placas de vídeo Vega por meio do Radeon ProRender . Em outubro de 2020, a empresa apresentou a série Radeon RX 6000 , sua segunda geração de GPUs Navi com suporte para ray tracing acelerado por hardware em um evento online.

O PlayStation 5 , Xbox Series X e Series S suportam componentes de hardware de ray tracing dedicados em suas GPUs para efeitos de ray tracing em tempo real.

Complexidade computacional

Vários resultados de complexidade foram comprovados para certas formulações do problema de rastreamento de raios. Em particular, se a versão de decisão do problema de traçado de raio é definida como segue - dada a posição inicial de um raio de luz e direção e algum ponto fixo, o raio eventualmente atinge aquele ponto, então o artigo referenciado prova os seguintes resultados:

  • O rastreamento de raios em sistemas ópticos 3D com um conjunto finito de objetos reflexivos ou refrativos representados por um sistema de desigualdades quadráticas racionais é indecidível .
  • O rastreamento de raios em sistemas ópticos 3D com um conjunto finito de objetos refrativos representados por um sistema de desigualdades lineares racionais é indecidível.
  • O rastreamento de raios em sistemas ópticos 3D com um conjunto finito de objetos retangulares reflexivos ou refrativos é indecidível.
  • O rastreamento de raios em sistemas ópticos 3D com um conjunto finito de objetos reflexivos ou parcialmente reflexivos representados por um sistema de desigualdades lineares, algumas das quais podem ser irracionais, é indecidível.
  • O rastreamento de raios em sistemas ópticos 3D com um conjunto finito de objetos reflexivos ou parcialmente reflexivos representados por um sistema de desigualdades lineares racionais é PSPACE difícil.
  • Para qualquer dimensão igual ou superior a 2, o traçado de raio com um conjunto finito de superfícies reflexivas paralelas e perpendiculares representadas por desigualdades lineares racionais está em PSPACE.

Veja também

Referências

links externos