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 .
eu
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.
Harmônicas esféricas
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.
fonte
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.
Em vez de armazenar sua matriz de valores, você pode armazenar apenasuma b
O problema é que uma equação linear é provavelmente uma fraca aproximação aos seus dados.
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.
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
fonte