Traçado de raio: diferenças entre revisões

Origem: Wikipédia, a enciclopédia livre.
Conteúdo apagado Conteúdo adicionado
m Renato de carvalho ferreira moveu Ray tracing para Traçado de raio
Linha 1: Linha 1:
{{Sem-fontes|data=dezembro de 2010| angola=| arte=| Brasil=| ciência=| geografia=| música=| Portugal=| sociedade=|1=|2=|3=|4=|5=|6=}}
{{Mais fontes|data=dezembro de 2010}}
[[Ficheiro:3chromeballs.png|thumb|direita|250px|Imagem renderizada com raytracing pelo [[POV-Ray]]]]
[[imagem:3chromeballs.png|thumb|250px|Imagem renderizada com traçado de raio pelo [[POV-Ray]]]]
[[Ficheiro:Ray tracing.jpg|thumb|direita|250px|Imagem renderizada com ray-tracing adicionando sombras e smooth]]
[[imagem:Ray tracing.jpg|thumb|250px|Imagem renderizada com ray-tracing adicionando sombras e smooth]]


'''Ray tracing''' (''traçado de raios'') é um [[algoritmo]] de [[computação gráfica]] usado para síntese ([[renderização]]) de [[imagens tridimensionais]].
'''Traçado de raio'''<ref>{{Citar periódico|título=Ciência Hoje - Revista de Divulgação Científica da Sociedade Brasileira para o Progresso da Ciência|volume=10|número=55-60|página=45}}</ref> ({{langx|en|''Ray tracing''}}) é um [[algoritmo]] de [[computação gráfica]] usado para síntese ([[renderização]]) de [[imagens tridimensionais]].


O método utilizado pelo algoritmo chamado Ray Tracing, baseia-se na [[simulação]] do trajecto que os raios de [[luz]] percorreriam no mundo real, mas, neste caso, de trás para a frente. Ou seja, no mundo real, os raios de luz são emitidos a partir de uma fonte de luz, percorrendo o espaço até encontrar um objecto. Após os raios de luz atingirem o objecto, estes são refractados ou reflectidos, de acordo com as características do objecto, nomeadamente, cor, textura e transparência, alterando assim a sua trajectória, e fazendo com que apenas uma infinitésima minoria dos raios que partiram da fonte de luz atinjam, por fim, os olhos do observador.
O método utilizado pelo algoritmo baseia-se na [[simulação]] do trajecto que os raios de [[luz]] percorreriam no mundo real, mas, neste caso, de trás para a frente. Ou seja, no mundo real, os raios de luz são emitidos a partir de uma fonte de luz, percorrendo o espaço até encontrar um objecto. Após os raios de luz atingirem o objecto, estes são refractados ou reflectidos, de acordo com as características do objecto, nomeadamente, cor, textura e transparência, alterando assim a sua trajectória, e fazendo com que apenas uma infinitésima minoria dos raios que partiram da fonte de luz atinjam, por fim, os olhos do observador.


Como se pode perceber facilmente, implementar computacionalmente um sistema que simulasse o que foi descrito no parágrafo anterior, para além de ser incomportável com os meios informáticos que hoje dispomos, devido à quantidade de processamento exigido, seria um desperdício já que a quantidade de raios de luz que atingem o olho do observador (úteis) é extremamente pequena comparativamente com a quantidade de raios emitidos pela fonte. Assim sendo, o algoritmo ''ray tracing'' limita-se a inverter o sentido do trajecto dos raios de luz, passando agora o observador a ser a fonte, e desta forma apenas serão processados os raios que efectivamente são vistos pelo observador.
Como se pode perceber facilmente, implementar computacionalmente um sistema que simulasse o que foi descrito no parágrafo anterior, para além de ser incomportável com os meios informáticos que hoje dispomos, devido à quantidade de processamento exigido, seria um desperdício já que a quantidade de raios de luz que atingem o olho do observador (úteis) é extremamente pequena comparativamente com a quantidade de raios emitidos pela fonte. Assim sendo, o algoritmo limita-se a inverter o sentido do trajecto dos raios de luz, passando agora o observador a ser a fonte, e desta forma apenas serão processados os raios que efectivamente são vistos pelo observador.


Esta técnica apesar de, computacionalmente, ser muito mais exigente do que a técnica [[scanline rendering]], é capaz de produzir um grau de fotorrealismo muito elevado tornando-se ideal para aplicações onde podemos, previamente, tratar a imagem, como no [[cinema]], [[televisão]] e [[efeitos especiais]], e menos adequado para aplicações em tempo real como [[jogos de computador]] onde a velocidade é crítica.
Esta técnica apesar de, computacionalmente, ser muito mais exigente do que a técnica [[scanline rendering]], é capaz de produzir um grau de fotorrealismo muito elevado tornando-se ideal para aplicações onde podemos, previamente, tratar a imagem, como no [[cinema]], [[televisão]] e [[efeitos especiais]], e menos adequado para aplicações em tempo real como [[jogos de computador]] onde a velocidade é crítica.


== Descrição ==
== Descrição ==
[[Ficheiro:raytracing2.png|thumb|direita|250px| Reflexões e refracções de um raio e as componentes]]
[[imagem:raytracing2.png|thumb|250px| Reflexões e refracções de um raio e as componentes]]


O algoritmo ''ray tracing'' é um algoritmo recursivo que consiste em projectar, a partir do observador, um vector (raio) por cada um dos [[pixel|pixeis]] constituintes da nossa cena/imagem, vector este que irá intersectar os objectos que formam a cena em análise. As intersecções a que estão sujeitos cada um dos vectores projectados tem que ser confirmadas para todos os objectos que compõe a imagem a fim de determinar qual o que está mais próximo do observador.
O algoritmo é um algoritmo recursivo que consiste em projectar, a partir do observador, um vector (raio) por cada um dos [[pixel|pixeis]] constituintes da nossa cena/imagem, vector este que irá intersectar os objectos que formam a cena em análise. As intersecções a que estão sujeitos cada um dos vectores projectados tem que ser confirmadas para todos os objectos que compõe a imagem a fim de determinar qual o que está mais próximo do observador.


Se um determinado raio não intersectar nenhum objecto no seu trajecto, é atribuído ao pixel, por onde o raio passa, a cor do fundo da cena. No caso de o raio intersectar algum objecto, e após ter-se confirmado que esta é a intersecção mais próxima do observador para esse mesmo raio, é necessário determinar a cor do pixel correspondente. Para tal é necessário calcular a iluminação no ponto da cena que o raio atinge, iluminação esta que pode ser proveniente directamente de fontes de luz, pode ser luz proveniente de outro objecto que por reflexão ilumina o ponto que estamos a analisar, pode ser luz refractada transmitida através do objecto e que assim ilumina o ponto, ou pode ainda ser uma combinação de mais do que uma destas formas de iluminação, que é a situação mais comum.
Se um determinado raio não intersectar nenhum objecto no seu trajecto, é atribuído ao pixel, por onde o raio passa, a cor do fundo da cena. No caso de o raio intersectar algum objecto, e após ter-se confirmado que esta é a intersecção mais próxima do observador para esse mesmo raio, é necessário determinar a cor do pixel correspondente. Para tal é necessário calcular a iluminação no ponto da cena que o raio atinge, iluminação esta que pode ser proveniente directamente de fontes de luz, pode ser luz proveniente de outro objecto que por reflexão ilumina o ponto que estamos a analisar, pode ser luz refractada transmitida através do objecto e que assim ilumina o ponto, ou pode ainda ser uma combinação de mais do que uma destas formas de iluminação, que é a situação mais comum.
Linha 26: Linha 26:
Cada um destes raios possui características e objectivos diferentes que podem, facilmente, ser identificados pelo seu nome. A partir da intersecção destes raios secundários com os objectos, e de acordo com a informação que cada um deles transporta, o algoritmo calcula então as características da luz e qual a contribuição para a iluminação do ponto de intersecção do raio primário com o objecto.
Cada um destes raios possui características e objectivos diferentes que podem, facilmente, ser identificados pelo seu nome. A partir da intersecção destes raios secundários com os objectos, e de acordo com a informação que cada um deles transporta, o algoritmo calcula então as características da luz e qual a contribuição para a iluminação do ponto de intersecção do raio primário com o objecto.


[[Ficheiro:raytracing3.png|thumb|direita|250px|Trajectória do Raio Sombra]]
[[imagem:raytracing3.png|thumb|250px|Trajectória do Raio Sombra]]


Como podemos observar na figura um único raio pode ser reflectido e refractado indefinidamente, subdividindo-se em vários raios secundários, formando assim uma árvore de raios, mais ou menos, complexa, de acordo com a composição da nossa cena. Para conseguirmos processar esta informação, necessitamos de estabelecer um limite máximo de subdivisões. Um dos métodos utilizados para terminar a inspecção recursiva dos raios secundários, acontece quando a contribuição retornada pelos raios secundários para um determinado pixel, se torna inferior a um determinado valor mínimo previamente definido, ou então tal com referimos anteriormente, quando um raio primário não intersecta qualquer objecto dentro dos limites da cena pré-estabelecidos atribuindo nesse caso a cor de fundo ao pixel em análise.
Como podemos observar na figura um único raio pode ser reflectido e refractado indefinidamente, subdividindo-se em vários raios secundários, formando assim uma árvore de raios, mais ou menos, complexa, de acordo com a composição da nossa cena. Para conseguirmos processar esta informação, necessitamos de estabelecer um limite máximo de subdivisões. Um dos métodos utilizados para terminar a inspecção recursiva dos raios secundários, acontece quando a contribuição retornada pelos raios secundários para um determinado pixel, se torna inferior a um determinado valor mínimo previamente definido, ou então tal com referimos anteriormente, quando um raio primário não intersecta qualquer objecto dentro dos limites da cena pré-estabelecidos atribuindo nesse caso a cor de fundo ao pixel em análise.
Linha 66: Linha 66:
}
}
}
}

== Ver também ==
* [[Ray casting]]
* [[Z-buffer]]
* [[Blender]]
* [[Corel Bryce|Bryce]]
* [[Kerkythea]]
* [[POV-Ray]]
* [[V-Ray]]
* [[YafRay]]


== Ligações externas ==
== Ligações externas ==
* {{Link||2=http://www.inf.ufsc.br/~awangenh/CG/raytracing/ |3=}}
* {{Link|pt|http://www.visgraf.impa.br/Data/RefBib/PS_PDF/silva94/rt.pdf|Introdução ao Ray Tracing}}
* {{Link||2=http://www.visgraf.impa.br/Data/RefBib/PS_PDF/silva94/rt.pdf |3=}}
* {{Link||2=http://www.ieeta.pt/~bss/aulas/Ray_Tracing_Nov07_JM.pdf |3=}}


{{Portal3|Tecnologias de informação}}
{{Portal3|Tecnologias de informação}}


{{Controle de autoridade}}
{{Controle de autoridade}}
{{DEFAULTSORT:Ray Tracing}}
[[Categoria:Algoritmos de computação gráfica]]
[[Categoria:Algoritmos de computação gráfica]]
[[Categoria:Óptica geométrica]]
[[Categoria:Óptica geométrica]]

Revisão das 21h31min de 15 de maio de 2021

Imagem renderizada com traçado de raio pelo POV-Ray
Imagem renderizada com ray-tracing adicionando sombras e smooth

Traçado de raio[1] (em inglês: Ray tracing) é um algoritmo de computação gráfica usado para síntese (renderização) de imagens tridimensionais.

O método utilizado pelo algoritmo baseia-se na simulação do trajecto que os raios de luz percorreriam no mundo real, mas, neste caso, de trás para a frente. Ou seja, no mundo real, os raios de luz são emitidos a partir de uma fonte de luz, percorrendo o espaço até encontrar um objecto. Após os raios de luz atingirem o objecto, estes são refractados ou reflectidos, de acordo com as características do objecto, nomeadamente, cor, textura e transparência, alterando assim a sua trajectória, e fazendo com que apenas uma infinitésima minoria dos raios que partiram da fonte de luz atinjam, por fim, os olhos do observador.

Como se pode perceber facilmente, implementar computacionalmente um sistema que simulasse o que foi descrito no parágrafo anterior, para além de ser incomportável com os meios informáticos que hoje dispomos, devido à quantidade de processamento exigido, seria um desperdício já que a quantidade de raios de luz que atingem o olho do observador (úteis) é extremamente pequena comparativamente com a quantidade de raios emitidos pela fonte. Assim sendo, o algoritmo limita-se a inverter o sentido do trajecto dos raios de luz, passando agora o observador a ser a fonte, e desta forma apenas serão processados os raios que efectivamente são vistos pelo observador.

Esta técnica apesar de, computacionalmente, ser muito mais exigente do que a técnica scanline rendering, é capaz de produzir um grau de fotorrealismo muito elevado tornando-se ideal para aplicações onde podemos, previamente, tratar a imagem, como no cinema, televisão e efeitos especiais, e menos adequado para aplicações em tempo real como jogos de computador onde a velocidade é crítica.

Descrição

Reflexões e refracções de um raio e as componentes

O algoritmo é um algoritmo recursivo que consiste em projectar, a partir do observador, um vector (raio) por cada um dos pixeis constituintes da nossa cena/imagem, vector este que irá intersectar os objectos que formam a cena em análise. As intersecções a que estão sujeitos cada um dos vectores projectados tem que ser confirmadas para todos os objectos que compõe a imagem a fim de determinar qual o que está mais próximo do observador.

Se um determinado raio não intersectar nenhum objecto no seu trajecto, é atribuído ao pixel, por onde o raio passa, a cor do fundo da cena. No caso de o raio intersectar algum objecto, e após ter-se confirmado que esta é a intersecção mais próxima do observador para esse mesmo raio, é necessário determinar a cor do pixel correspondente. Para tal é necessário calcular a iluminação no ponto da cena que o raio atinge, iluminação esta que pode ser proveniente directamente de fontes de luz, pode ser luz proveniente de outro objecto que por reflexão ilumina o ponto que estamos a analisar, pode ser luz refractada transmitida através do objecto e que assim ilumina o ponto, ou pode ainda ser uma combinação de mais do que uma destas formas de iluminação, que é a situação mais comum.

Para a determinação das componentes de luz que atingem o ponto em análise, o algoritmo recorre a três tipos de raios diferentes a que chamamos de raios secundários.

  • Raios reflectidos;
  • Raios refractados;
  • Raios de sombra.

Cada um destes raios possui características e objectivos diferentes que podem, facilmente, ser identificados pelo seu nome. A partir da intersecção destes raios secundários com os objectos, e de acordo com a informação que cada um deles transporta, o algoritmo calcula então as características da luz e qual a contribuição para a iluminação do ponto de intersecção do raio primário com o objecto.

Trajectória do Raio Sombra

Como podemos observar na figura um único raio pode ser reflectido e refractado indefinidamente, subdividindo-se em vários raios secundários, formando assim uma árvore de raios, mais ou menos, complexa, de acordo com a composição da nossa cena. Para conseguirmos processar esta informação, necessitamos de estabelecer um limite máximo de subdivisões. Um dos métodos utilizados para terminar a inspecção recursiva dos raios secundários, acontece quando a contribuição retornada pelos raios secundários para um determinado pixel, se torna inferior a um determinado valor mínimo previamente definido, ou então tal com referimos anteriormente, quando um raio primário não intersecta qualquer objecto dentro dos limites da cena pré-estabelecidos atribuindo nesse caso a cor de fundo ao pixel em análise.

As sombras são verificadas através de raios secundários que são lançados a partir do ponto de intersecção do raio primário com o objecto, em direcção ao foco de luz. Se no seu trajecto o raio voltar a cruzar-se com um objecto, é porque o ponto em análise se encontra na sombra, se não, é porque recebe luz directa.

Algoritmo

Para cada pixel da imagem

{
  Criar um raio a partir do ponto de visão (observador) e que passe pelo PixelActual
  Inicializar NearestT em INFINITO
  Inicializar NearestObject em NULL
  Para cada objecto da cena
     {
        Se a distância t da intercepção é menor que NearestT
        {
           Colocar NearestT = t distância da intercepção
           Colocar NearestObject = ObjectoActual
        }
     }
  }
  Se NearestObject = NULL
  {
     Preencher PixelActual com a cor do fundo
  }
  Senão
  {
     Lançar um novo raio a cada fonte de luz para comprovar as sombras
     Se a superfície é reflectora
     {
        gerar um raio reflector (recursivo)
     }
     Se a superfície é transparente
     {
        gerar um raio refractor (recursivo)
     }
     Usar NearestObject e NearestT para processar a função sombreado
     Preencher este pixel com a cor resultante da função sombreado
  }
}

Ligações externas

  1. «Ciência Hoje - Revista de Divulgação Científica da Sociedade Brasileira para o Progresso da Ciência». 10 (55-60): 45