Traçador de caminho - materiais multicamadas e amostragem de importância

12

Atualmente, estou tentando implementar um rastreador de caminho de Monte Carlo. Eu fiz algumas pesquisas e parece que uma abordagem comum dos materiais é usar um modelo em camadas. Algo assim:

insira a descrição da imagem aqui

Quando a luz atinge a superfície, Fresnel nos diz quanto dessa luz é refletida pela primeira camada e quanto vai para a segunda, e assim por diante.

Então fiz algo parecido, mas mais simples: apenas uma camada de especular e outra de difusa. Nenhuma transmissão ainda. Até aqui tudo bem, uso um brdf simples com cosseno para o meu difuso e o modelo microfacetado Cook-Torrance para o meu especular.

Agora vem a parte difícil: o que devo fazer quando um raio atingir a superfície? Normalmente, eu selecionava o brdf correspondente ao material da superfície, mostrava uma direção da luz incidente, avaliava o brdf e dividia pela função de distribuição de probabilidade correta.

Mas aqui, uma batida na superfície corresponde efetivamente a vários materiais. A maneira ingênua de lidar com isso seria fazer uma amostra uma vez para cada camada atingida. Mas isso claramente é fonte de um enorme impacto no desempenho, fazendo com que meu caminho se torne efetivamente uma árvore.

Existe uma solução melhor?

Castan
fonte
1
Você não pode 'monte-carlo' as camadas de material? Por exemplo, pese cada camada de acordo com sua refletividade e escolha uma aleatoriamente com base nisso. Camadas mais profundas precisarão de alguma atenuação com base na soma da absorção de todas as camadas acima delas.
21917 PaulHK
PaulHK É exatamente o que estou fazendo no meu rastreador de caminho, roleta russa para cada interface entre camadas, portanto, nenhuma ramificação. Infelizmente, minha implementação ainda não está concluída, portanto não tenho informações sobre o desempenho real. Baseei minha implementação no artigo "Superfícies de micro-faceta arbitrariamente em camadas", de Andrea Weidlich e Alexander Wilkie, que parece ser mais limitado do que o quadro de Wenzel Jakob (apontado na resposta de Stefan), mas que é capaz de gerar bons resultados e é muito mais simples de implementar.
Christian Pagot

Respostas:

7

Wenzel Jakob et al apresentaram uma estrutura para materiais em camadas no SIGGRAPH 2014. A seção 6.2 explica a amostragem de importância. Se você preferir código sobre equações, o método é implementado no renderizador Mitsuba .

Stefan Werner
fonte
2
Observe que o método de Jakob et al. confia na renderização de dados de BSDF tabulados em alguma representação especializada de Fourier. Para detalhes, consulte também o relatório técnico correspondente . Uma implementação de código aberto também está disponível na terceira edição mais recente do PBRT . Os arquivos BSDF podem ser gerados com o layerlab em Python.
tizian