O que são harmônicos esféricos e sondas de luz?

14

O que são harmônicos esféricos e sondas de luz ? Quão úteis eles são em computação gráfica? O que exatamente eles fazem? Eu já ouvi a palavra harmônicos esféricos e sondas de luz em todos os lugares, desde apresentações siggraficas até postagens de blog.

Recentemente, Matt Pettineo publicou uma série de blogs de 6 partes sobre eles, mas ainda não entendo o que são.

É outra maneira de melhorar a iluminação ambiente?

Arjan Singh
fonte

Respostas:

11

Noções básicas de harmônicos esféricos

Harmônicos esféricos é uma maneira de representar uma função 2D na superfície de uma esfera. Em vez do domínio espacial (como o mapa do cubo), o SH é definido no domínio da frequência com algumas propriedades e operações interessantes relevantes para a iluminação que podem ser executadas com eficiência. Com o aumento da "ordem" de SH, você pode representar frequências mais altas (detalhes) de funções, como ilustrado na imagem abaixo ( é a ordem de SH). Ao escalar e somar as "funções básicas" abaixo, você pode representar qualquer tipo de função 2D na esfera até a frequência definida pelas funções. As funções básicas são definidas com " polinômios de Legendre associados ", mas geralmente você não precisa derivá-los, mas pode usar derivações existentes para harmônicos esféricos reais . euinsira a descrição da imagem aqui

Uma dessas operações que podem ser executadas com eficiência no SH é denominada " convolução ", o que significa integrar o produto de duas funções esféricas 2D em uma esfera. Essa é uma operação comum nos cálculos de iluminação, por exemplo, uma das funções pode ser a iluminação incidente e uma função é o BRDF. Quando representada como SH, essa operação é simplesmente o produto escalar de dois vetores de coeficiente SH.

Outra operação interessante é a capacidade de fazer uma filtragem passa-baixo eficiente. Como a SH é representada no domínio da frequência, isso é simplesmente a questão de dimensionar ou zerar alguns dos coeficientes da SH. Algumas outras operações, por outro lado, podem ser difíceis de executar no SH em comparação com o domínio espacial, por exemplo, se você deseja girar a função representada como SH, pode ficar muito caro para SH de ordem superior. Portanto, realmente depende do problema se é adequado para ser executado no SH ou não.

SH é geralmente usado para representar apenas funções de baixa frequência (ou seja, funções que mudam suavemente) porque frequências mais altas exigem aumento da quantidade de armazenamento (coeficientes SH) e processamento. É por isso que você não vê o SH sendo usado, por exemplo, para substituir reflexões especulares em superfícies brilhantes. Há também Harmônicas esféricas zonais , que podem ser usadas para reduzir o armazenamento e o cálculo de funções 2D que são simétricas rotacionalmente em relação ao eixo z, armazenando apenas elementos diagonais da matriz do coeficiente SH. Além disso , os Harmônicos Hemisféricos podem ser usados ​​se você precisar lidar apenas com funções hemisféricas (também comuns na iluminação) com a vantagem de poder representar frequências semelhantes às SH com menos coeficientes.

Uma operação que você também precisa executar é a "projeção SH" para transformar dados do domínio espacial em SH. Você pode fazer essa operação executando a convolução de dados do domínio espacial com funções básicas SH. Uma propriedade interessante do SH é que, diferentemente das representações de domínio espacial, o SH não sofre alias, portanto, você não possui artefatos de alias, mesmo ao projetar um SH de ordem muito baixa.

Sondas de luz

Agora que você entende as operações e propriedades básicas da SH, podemos pensar em como aplicá-las à GI. Uma sonda de luz registra quanta luz vem de todas as direções até o ponto em que a sonda está localizada. Esta é uma função 2D em uma esfera e pode ser representada como SH (ou a função 3 SH para vermelho, verde e azul). Dependendo da quantidade de detalhes de iluminação que queremos codificar nas sondas, podemos escolher a ordem SH.

Para sondas de luz que são usadas apenas para iluminação difusa lambertiana, a SH de ordem muito baixa é suficiente, pois a convolução é realizada com lobo cosseno, que pode ser representado com a SH de ordem 2 (9 coeficientes). Os coeficientes SH para sondas de luz podem ser gerados simplesmente renderizando um mapa de cubo no ponto da sonda e depois projetando-o para SH.

Ao renderizar a geometria, poucas sondas de luz mais próximas são obtidas e seus resultados são interpolados para obter a função de iluminação incidente em um ponto no espaço. Isso pode ser feito, por exemplo, interpolando diretamente os coeficientes SH de sondas próximas e, em seguida, realizando a convolução com o lóbulo cosseno normal orientado a pixels no domínio SH.

JarkkoL
fonte
Quais são os benefícios de usar esse método em vez da iluminação baseada em imagem mais simples?
Arjan Singh
Você pode obter iluminação de baixa frequência de melhor qualidade com requisitos de armazenamento e desempenho semelhantes aos dos cubemaps.
JarkkoL
16

Harmônicas esféricas

f(x)f(θ,ϕ)

Se você não sabe o que é uma transformação de Fourier, é necessário saber antes de entender as harmônicas esféricas. A transformação de Fourier permite representar um sinal como uma série de ondas seno e cosseno, cada uma com o dobro da frequência da última. Ou seja, você pode representar o sinal como sua média, além de uma onda senoidal cujo comprimento de onda é igual ao comprimento do sinal, além de uma onda senoidal duas vezes maior que o comprimento de onda, e assim por diante. Como a transformação de Fourier fixa você a esses comprimentos de onda específicos, você só precisa registrar a amplitude de cada um.

Geralmente usamos transformadas de Fourier para representar imagens, que são apenas sinais digitais 2D. É útil porque você pode jogar fora algumas das ondas senoidais (ou reduzir a precisão com a qual armazena sua amplitude) sem alterar significativamente a aparência da imagem para os olhos humanos. OTOH, jogar fora os pixels altera muito a aparência da imagem.

Em um sinal amostrado como uma imagem, se você usar o mesmo número de ondas senoidais que havia amostras (pixels) na imagem original, poderá reconstruir a imagem exatamente. Assim, quando começar a jogar fora todas as frequências, estará fazendo o A imagem ocupa menos espaço.

Harmônicas esféricas são como transformadas de Fourier, mas em vez de ondas senoidais, elas usam uma função esférica; portanto, em vez de funções lineares (como imagens), elas podem representar funções definidas na esfera (como mapas do ambiente).

Sondas de luz

Assim como uma imagem padrão registra toda a luz que atinge um determinado ponto através do plano da imagem, uma sonda de luz registra toda a luz que atinge um determinado ponto em todas as direções. Eles saíram primeiro dos efeitos do filme. Se você deseja adicionar um objeto gerado por computador a uma cena do mundo real, é necessário iluminar o objeto sintético com a iluminação do mundo real. Para fazer isso, você precisa saber qual luz atinge o ponto da cena em que o objeto sintético estará. (Nota: embora eu diga "iluminação", você está gravando uma imagem de toda a luz, para que também possa ser usada para reflexões.)

Como você não pode ter uma câmera com uma lente esférica que registra toda a luz atingindo um único ponto de todas as direções, você grava isso tirando fotografias normais de um espelho esférico e, em seguida, reprojetando as imagens em uma esfera.

Fora dos efeitos do filme, é mais comum usar sondas de luz geradas a partir de uma cena artificial. Imagine que você tenha algum algoritmo caro para calcular a iluminação global (IG) em uma cena e também tenha alguns objetos menores se movendo nessa cena (como um nível de jogo com jogadores nela). Você não pode executar o algoritmo GI inteiro toda vez que um objeto se move, portanto, você o executa uma vez com a cena estática e salva as sondas de luz obtidas em vários pontos do nível. Então você pode obter uma boa aproximação ao IG, iluminando o jogador com a sonda de luz mais próxima.

Usando-os juntos

Geralmente, você deseja filtrar as arestas vivas da iluminação global de qualquer maneira, portanto, deseja uma maneira de representá-las que seja compacta e que permita jogar fora as altas frequências. É nisso que as harmônicas esféricas são realmente boas! É por isso que você ouvirá esses dois termos usados ​​muito juntos.

Você calcula probes de luz com seu caro algoritmo GI - normalmente na ferramenta de design de nível, ou talvez uma vez por segundo (em vez de uma vez por quadro), se desejar incluir seus objetos dinâmicos. Você as armazena de maneira barata com harmônicas esféricas - 16 flutuadores são suficientes para uma iluminação de alta qualidade, mas não para reflexos. Em seguida, para cada objeto dinâmico que você deseja iluminar, escolha a sonda de luz mais próxima (ou interpole linearmente várias juntas) e use-a como uma entrada uniforme ou constante para o seu shader. Também é comum usar harmônicos esféricos para representar dados de oclusão ambiental, e é muito barato convencê-lo com a sonda de luz, embora exista alguma complexidade em torno das funções harmônicas esféricas rotativas.

Dan Hulme
fonte
Ótima resposta isso realmente esclareceu tudo! Então, basicamente, as sondas de luz são uma maneira fácil de calcular a iluminação dos personagens em movimento, o que nos impede de recalcular o IG para toda a cena. Os harmônicos esféricos, por outro lado, são usados ​​para filtrar as altas frequências. (Corrija-me se estiver errado, só estou tentando ver se tenho o entendimento correto).
Arjan Singh
"se você usar o mesmo número de ondas senoidais de amostras (pixels) na imagem original, poderá reconstruir a imagem exatamente", na verdade não é verdade. Por exemplo, onda quadrada requer número infinito de frequências para representação exata
JarkkoL
@JarkkoL Claro, uma verdadeira onda quadrada sim. Mas se você o discretizou por amostragem, precisará apenas do mesmo número de frequências para reduzir o erro ao erro de amostragem. É um resultado útil do teorema de Nyquist (que a maior frequência presente no sinal amostrado é metade da taxa de amostragem).
Dan Hulme
Ah sim, isso é verdade, é claro. Suponho que você precise da metade da frequência, mas com resultados complexos (vs reais) no domínio da frequência. Ou use DCT e domínio real com o dobro da frequência de DFT.
JarkkoL
5

Harmônicas esféricas

Digamos que você tenha alguns dados em uma matriz, mas deseja representá-los com um número menor de bytes.

Uma maneira de fazer isso pode ser expressar os dados como uma função em vez dos valores brutos.

y=umax+b

Em vez de armazenar sua matriz de valores, você pode armazenar apenas umab

O problema é que uma equação linear é provavelmente uma fraca aproximação aos seus dados.

y=umax2+bx+c

umabumabc

Aumentamos o armazenamento de memória e também a complexidade computacional de armazenamento e recuperação de dados, em comparação com a equação linear, mas é uma aproximação melhor à sua matriz de dados. Também poderíamos levá-lo a uma função cúbica ou superior. Aumentar a ordem aumenta o armazenamento, a computação e a precisão.

f(x)

Assim como nos exemplos acima, você pode usar uma função harmônica esférica de ordem inferior para criar algo com menor armazenamento e computação mais baixa para calcular dados, mas também menor precisão.

Por outro lado, você pode aumentar a ordem e obter uma melhor aproximação dos dados originais, mas com o custo de mais espaço de armazenamento necessário e mais computação necessária para calcular um ponto de dados.

No extremo, você pode usar tantos termos harmônicos esféricos quanto amostras em sua matriz e, em seguida, você pode reconstruir sua matriz original exatamente, mas gasta muita computação fazendo isso e está usando o mesmo espaço de armazenamento como você começou.

Por esse motivo, na prática, as funções de harmônicas esféricas não oferecem muito benefício se você precisar representar detalhes finos - como um reflexo nítido em uma esfera - mas elas podem ser baratas para dados que não possuem detalhes finos (dados que não tem muito conteúdo de alta frequência). Eles também são úteis para fazer cálculos no domínio da frequência, como análise espectral ou convolução.

Um desses dados que eles são bons para armazenar é a "irradiância", que é a quantidade de luz que atinge um ponto de outras direções. Ele tende a parecer um pouco embaçado, o que significa que possui apenas conteúdo de baixa frequência e é um bom candidato para ser armazenado em uma função de harmônica esférica.

Vou deixar a explicação das sondas de luz para outra pessoa: p

Alan Wolfe
fonte
Por que o voto negativo? : P
Alan Wolfe
Não é verdade que os harmônicos esféricos não sejam bons em representar detalhes finos. Como a transformada de Fourier, eles podem reconstruir o sinal original exatamente se você mantiver todas as frequências. É que eles facilitam a economia de espaço jogando fora as frequências altas, se você não precisar delas.
Dan Hulme
E desculpe, pensei que, depois da votação, era difícil votar em favor de uma única alegação duvidosa em uma resposta útil, mas meu voto foi bloqueado quando pensei duas vezes.
Dan Hulme
Ah Sim, é possível, da mesma maneira que é possível representar qualquer conjunto de dados com um polinômio, mas, na prática, ambos são más escolhas por precisar de ajustes próximos a muitos pontos de dados. Com um polinômio, você precisa de N termos de uma função de ordem N para ajustar exatamente N pontos de dados, por exemplo, o que a torna uma escolha pior do que apenas uma matriz, pois é cálculo, não pesquisa, para obter uma indicação de dados. Da mesma forma, em termos práticos, os harmônicos esféricos são uma má escolha para dados esféricos com conteúdo de alta frequência que você deseja preservar. Não é uma boa escolha nessas situações.
Alan Wolfe
Isso é verdade se você deseja reconstruir amostras individuais, mas nem todos os usos de Fourier exigem isso - da mesma forma para nem todos os usos de SH. Se você vai fazer uma convolução, é muito mais barato fazer isso no domínio da frequência antes de voltar a amostras. Você se importaria de propor uma edição para deixar isso mais claro em sua resposta, depois que eu terminar minha própria resposta?
Dan Hulme