Fundamentos de Ray Tracing
Ontem terminei alguns desafios do React do bootcamp que estou fazendo.
Também aprendi sobre Hierarquia de volume delimitador
e a Equação de renderização.
Uma Hierarquia de volume delimitador é uma estrutura em árvore que
delimita os objetos que precisamos renderizar em uma cena.
Cada nó nesta árvore é um objeto que podemos ter que renderizar,
ou um objeto virtual que contém mais de um objeto.
Se lançamos um raio e atingirmos um nó na árvore sabemos que só precisamos verficar se o raio atinge algum dos objetos abaixo desse nó, reduzindo a quantidade de objetos que precisamos verificar. É uma otimização básica que aumenta drasticamente o desempenho conforme as cenas têm mais objetos e os objetos se tornam mais complexos (com diferentes texturas e polígonos).
A Equação de Renderização é um modelo simples, mas completo
de como funciona um ray-tracer:
O termo à esquerda
representam a radiância espectral de um raio arbitrário que emitimos.
Em termos de computação, a radiância espectral é praticamente o rgba,
a tonalidade que calculamos para o raio.
O objetivo de um mecanismo de rastreamento de raios é solucionar esse termo
para cada pixel em uma tela.
O primeiro termo à direita
é chamada de radiação espectral emitida, que é basicamente a luz de ambiente.
O segundo termo à direita
representam todas as interações entre o raio e o ponto na superfície que estamos renderizando. Existem muitos fenômenos físicos interessantes que este termo leva em consideração:
a incidência do raio com a normal da superfície no ponto de intersecção
o que reduz a internsidade da cor conforme o ângulo aumenta.
a quantidade de luz refletida de volta para a origem do raio no ponto de intersecção
o que em si é outro problema de rastreamento de raios. Geralmente há muita recursão e paralelismo nos algoritmos de ray-tracing.
a
função de distribuição de refletância bidirecionalé basicamente como contabilizamos os efeitos da luz em diferentes superfícies: superficie brilhante, refletiva, fosca e outras.
Hoje vou fazer alguns Desafios Node e Elixir do meu bootcamp. Quero tirá-los do caminho rapidamente e começar a me concentrar no Ray Tracer.
References:
- https://en.wikipedia.org/wiki/Bounding_volume_hierarchy
- https://www.youtube.com/watch?v=AODo_RjJoUA
- https://en.wikipedia.org/wiki/Rendering_equation
- https://en.wikipedia.org/wiki/Bidirectional_reflectance_distribution_function