Aplicativo de Integração Monte Carlo em Renderização

Todos estudamos métodos numéricos no curso de matemática. Esses são métodos como integração, interpolação, série e assim por diante. Existem dois tipos de métodos numéricos: determinístico e aleatório.

Método típico de integração de funções determinísticas f no intervalo [a,b] Parece assim: tomamos n+1 pontos uniformemente espaçados t0=a,t1=a+ fracban, ldots,tnb calcular f no ponto médio  fracti+ti+12 de cada um dos intervalos definidos por esses pontos, resuma os resultados e multiplique pela largura de cada intervalo  fracbab . Para funções suficientemente contínuas f com o aumento n o resultado convergirá para o valor correto.


O método probabilístico, ou o método de Monte Carlo , para cálculo ou, mais precisamente, uma estimativa aproximada da integral f no intervalo [a,b] fica assim: vamos X1, ldots,Xn - pontos selecionados aleatoriamente no intervalo [a,b] . Então Y=(ba) frac1n sumni=1f(Xi) É um valor aleatório cuja média é uma integral  int[a,b]f . Para implementar o método, usamos um gerador de números aleatórios que gera n pontos no intervalo [a,b] calculamos em cada f , calcule a média dos resultados e multiplique por ba . Isso nos fornece o valor aproximado da integral, como mostrado na figura abaixo.  int11 sqrt1x2dx 20 amostras aproxima o resultado correto igual a  frac pi2 .


Obviamente, toda vez que calcularmos um valor aproximado, obteremos um resultado diferente. A variação desses valores depende da forma da função. f . Se gerarmos pontos aleatórios xi de forma desigual, então precisamos alterar ligeiramente a fórmula. Mas, graças ao uso de distribuição desigual de pontos, obtemos uma enorme vantagem: forçar a distribuição desigual a dar preferência a pontos xi onde f(x) grande, podemos reduzir significativamente a variação dos valores aproximados. Este princípio de amostragem não uniforme é chamado amostragem por significância .


Como nas últimas décadas ocorreu uma transição em larga escala de abordagens determinísticas para randomizadas nas técnicas de renderização, estudaremos as abordagens aleatórias usadas para resolver equações de renderização. Para fazer isso, usamos variáveis ​​aleatórias, expectativa matemática e variância. Estamos lidando com valores discretos, porque os computadores são de natureza discreta. Quantidades contínuas tratam da função densidade de probabilidade , mas no artigo não a consideraremos. Vamos falar sobre a função de massa de probabilidade. O PMF possui duas propriedades:

  1. Para cada s emS existe p(s) geq0 .
  2.  sums emSp(s)=1

A primeira propriedade é chamada não-negatividade. O segundo é chamado de "normalidade". Intuitivamente, isso S representa o conjunto de resultados de algumas experiências e p(s) É o resultado da probabilidade s membro S . O resultado é um subconjunto do espaço de probabilidade. A probabilidade de um resultado é a soma dos elementos de PMF desse resultado, uma vez que

Pr \ {E \} = \ sum_ {s \ em S} p (s)

Pr \ {E \} = \ sum_ {s \ em S} p (s)


Uma variável aleatória é uma função, geralmente indicada por uma letra maiúscula, que coloca números reais no espaço de probabilidade:

X:S rightarrow boldsymbolR.


Observe que a função X - Esta não é uma variável, mas uma função com valores reais. Ela também não é aleatória , X(s) É um número real separado para qualquer resultado s emS .

Uma variável aleatória é usada para determinar os resultados. Por exemplo, muitos resultados s para qual X(s)=1 , ou seja, se ht e th são o conjunto de linhas que denotam "águias" ou "caudas", então

E=s emS:X(s)=1


e

=ht,th



é um resultado com probabilidade  frac12 . Nós escrevemos como Pr \ {X = 1 \} = \ frac {1} {2}Pr \ {X = 1 \} = \ frac {1} {2} . Nós usamos o predicado X=1 como uma entrada abreviada para o resultado determinado pelo predicado.

Vamos dar uma olhada em um fragmento de código que simula um experimento descrito pelas fórmulas apresentadas acima:

headcount = 0 if (randb()): // first coin flip headcount++ if (randb()): // second coin flip headcount++ return headcount 

Aqui denotamos por ranb() função booleana que retorna true na metade dos casos. Como isso está relacionado à nossa abstração? Imagine muito S todas as execuções possíveis do programa, declarando duas execuções os mesmos valores retornados por ranb , idênticos em pares. Isso significa que existem quatro execuções possíveis do programa em que duas chamadas ranb() retornam TT, TF, FT e FF. Pela nossa própria experiência, podemos dizer que essas quatro realizações são igualmente prováveis, ou seja, cada uma ocorre em cerca de um quarto dos casos.

Agora a analogia está se tornando mais clara. As muitas execuções possíveis de um programa e as probabilidades associadas a eles são um espaço de probabilidade. Variáveis ​​de programa que dependem de chamadas ranb são variáveis ​​aleatórias. Espero que esteja tudo claro para você agora.

Vamos discutir o valor esperado, também chamado de média. Essa é essencialmente a soma do produto do PMF e uma variável aleatória:

E[X]= sums emSp(s)X(s)


Imagine que h são "águias" e t são "caudas". Já cobrimos ht e th. Há também hh e tt. Portanto, o valor esperado será o seguinte:

E[X]=p(hh)X(hh)+p(ht)X(ht)+p(th)X(th)+p(tt)X(tt)


= frac14.2+ frac14.1+ frac14.1+ frac14.0


=1 textQED


Você pode se perguntar de onde veio X . Aqui eu quis dizer que deveríamos atribuir significado X sozinho. Nesse caso, atribuímos h a 1 e t a 0. X(hh) é igual a 2 porque contém 2 h .

Vamos falar sobre distribuição. A distribuição de probabilidade é uma função que fornece as probabilidades de vários resultados de um evento.

Quando dizemos que uma variável aleatória X tem uma distribuição f então deve indicar X simf .

Valores de dispersão acumulados em torno de X é chamado de dispersão e é definido da seguinte forma:

 boldsymbolVar[X]=E[(X barraX)2]


Onde  barX É mediano X .

 sqrt boldsymbolVar chamado desvio padrão . Variáveis ​​aleatórias X e Y são chamados independentes se:

Pr \ {X = x \ text {e} Y = y \} = Pr \ {X = x \}. Pr \ {Y = y \}


Propriedades importantes de variáveis ​​aleatórias independentes:

  1. E[XY]=E[X]E[Y]
  2.  boldsymbolVar[X+Y]= boldsymbolVar[X]+ boldsymbolVar[Y]

Quando comecei com uma história sobre probabilidade, comparei probabilidades contínuas e discretas. Examinamos a probabilidade discreta. Agora vamos falar sobre a diferença entre probabilidades contínuas e discretas:

  1. Os valores são contínuos. Ou seja, os números são infinitos.
  2. Alguns aspectos da análise requerem sutilezas matemáticas, como mensurabilidade .
  3. Nosso espaço de probabilidade será infinito. Em vez do PMF, devemos usar a função de densidade de probabilidade (PDF).

Propriedades do PDF:

  1. Para cada s emS nós temos p(s) geq0
  2.  ints emSp(s)=1

Mas se a distribuição S uniformemente , o pdf é definido assim:

imagem

Com probabilidade contínua E[X] definido da seguinte forma:

E[X]:= ints emSp(s)X(s)


Agora compare as definições de PMF e PDF:

\ mathbb {PMF} \ rightarrow p_y (t) = Pr \ {Y = t \} \ text {para} t \ em T


\ mathbb {PDF} \ rightarrow Pr \ {a \ leq X \ leq b \} = \ int_a ^ bp (r) dr


No caso de probabilidade contínua, as variáveis ​​aleatórias são melhor chamadas de pontos aleatórios . Porque se S O espaço de probabilidade e Y:S rightarrowT exibido em um espaço diferente  mathbbR então devemos ligar Y ponto aleatório , não uma variável aleatória. O conceito de densidade de probabilidade é aplicável aqui, porque podemos dizer que para qualquer U subconjuntoT nós temos:

imagem

Agora vamos aplicar o que aprendemos na esfera. A esfera possui três coordenadas: latitude, longitude e complemento de latitude. Usamos a adição de longitude e latitude somente em  mathbbR2 , coordenadas cartesianas bidimensionais aplicadas a uma variável aleatória S transformá-la em S2 . Temos os seguintes detalhes:

Y:[0,1] times[0,1] rightarrowS2:(u,v) rightarrow( cos(2 piu) sin( piv), cos( piv) sin(2 piu)pecado( piv))


Começamos com uma densidade de probabilidade uniforme p às [0,1] vezes[0,1] ou p(u,v)=1 . Veja a fórmula uniforme de densidade de probabilidade acima. Por conveniência, escreveremos (x,y,z)=Y(u,v) .

Temos um entendimento intuitivo de que se você selecionar pontos de maneira uniforme e aleatória em um quadrado de unidade e usar f para convertê-los em pontos em uma esfera unitária, eles se acumularão ao lado do polo. Isso significa que a densidade de probabilidade obtida em T não será uniforme. Isso é mostrado na figura abaixo.


Agora discutiremos maneiras de aproximar o valor esperado de uma variável aleatória contínua e sua aplicação para determinar as integrais. Isso é importante porque, na renderização, precisamos determinar o valor da integral de refletividade :

Lref(P, omegao)= int omegai emS2+L(P, omegai)fs(P, omegai, omega0) omegai. boldsymbolnd omegai,


para vários valores P e  omega0 . Valor  omega É a direção da luz incidente. Código que gera um número aleatório uniformemente distribuído no intervalo [0,1] e usando a raiz quadrada, cria um valor no intervalo de 0 a 1. Se usarmos o PDF para ele, como esse é um valor uniforme, o valor esperado será igual  frac23 . Além disso, este valor é o valor médio f(x)= sqrtx nesse intervalo. O que isso significa?

Considere o Teorema 3.48 do livro Computer Graphics: Principles and Practice. Ela diz que se f:[a,b] rightarrow mathbbR é uma função com valores reais e X sim boldsymbolU(a,b) é uma variável aleatória uniforme no intervalo [a,b] então (ba)f(x) É uma variável aleatória cujo valor esperado tem a forma:

E[(ba)f(x)]= intbaf(x)dx.


O que isso nos diz? Isso significa que você pode usar um algoritmo aleatório para calcular o valor da integral se executarmos o código várias vezes e calcularmos a média dos resultados .

No caso geral, obtemos um certo valor C , como na integral mostrada acima, que precisa ser determinada e em algum algoritmo aleatório que retorna um valor aproximado C . Essa variável aleatória para uma quantidade é chamada de estimador . Um estimador é considerado livre de distorção se seu valor esperado for C . No caso geral, estimadores sem distorções são preferíveis a distorções.

Já discutimos probabilidades discretas e contínuas. Mas existe um terceiro tipo, chamado probabilidades mistas e usado na renderização. Tais probabilidades surgem devido a pulsos nas funções de distribuição do espalhamento bidirecional ou pulsos causados ​​por fontes pontuais de iluminação. Tais probabilidades são definidas em um conjunto contínuo, por exemplo, no intervalo [0,1] mas não estritamente definido pela função PDF. Considere o seguinte programa:

 if uniform(0, 1) > 0.6 : return 0.3 else : return uniform(0, 1) 

Em sessenta por cento dos casos, o programa retornará 0,3 e, nos 40% restantes, retornará um valor uniformemente distribuído em [0,1] . O valor de retorno é uma variável aleatória com uma massa de probabilidade de 0,6 a 0,3 e seu PDF em todos os outros pontos é especificado como d(x)=0,4 . Devemos definir o PDF como:

imagem

Em geral, uma variável aleatória de probabilidade mista é aquela para a qual existe um conjunto finito de pontos na área de definição do PDF e vice-versa, pontos uniformemente distribuídos nos quais o PMF não está definido.

Source: https://habr.com/ru/post/pt461805/


All Articles