Cosa sono le armoniche sferiche e le sonde luminose?


14

Cosa sono le armoniche sferiche e le sonde luminose ? Quanto sono utili nella computer grafica? Cosa fanno esattamente? Ho sentito ovunque la parola armoniche sferiche e sonde di luce, dalle presentazioni siggraph ai post sul blog.

Di recente Matt Pettineo ha pubblicato una serie di blog in 6 parti , ma non capisco ancora cosa siano.

È un altro modo per migliorare l'illuminazione ambientale?

Risposte:


11

Nozioni di base sulle armoniche sferiche

Le armoniche sferiche sono un modo per rappresentare una funzione 2D su una superficie di una sfera. Invece del dominio spaziale (come cubemap), SH è definito nel dominio della frequenza con alcune proprietà e operazioni interessanti relative all'illuminazione che possono essere eseguite in modo efficiente. Con "ordine" crescente di SH è possibile rappresentare frequenze più alte (dettagli) delle funzioni, come illustrato nell'immagine seguente ( è l'ordine SH). Ridimensionando e sommando le "funzioni di base" di seguito è possibile rappresentare qualsiasi tipo di funzione 2D sulla sfera fino alla frequenza definita dalle funzioni. Le funzioni di base sono definite con " polinomi Legendre associati ", ma di solito non è necessario derivarle da sole ma è possibile utilizzare derivazioni esistenti per vere armoniche sferiche . linserisci qui la descrizione dell'immagine

Una tale operazione che può essere eseguita in modo efficiente in SH è chiamata " convoluzione ", il che significa integrare il prodotto di due funzioni sferiche 2D su una sfera. Questa è un'operazione comune nei calcoli dell'illuminazione, ad esempio una delle funzioni potrebbe essere l'illuminazione incidente e una funzione il BRDF. Quando rappresentata come SH, questa operazione è semplicemente il prodotto punto di due vettori di coefficiente SH.

Un'altra operazione interessante è la capacità di eseguire un filtro passa-basso efficiente. Poiché SH è rappresentato nel dominio della frequenza, si tratta semplicemente di ridimensionare o azzerare alcuni dei coefficienti SH. D'altra parte, alcune operazioni possono essere difficili da eseguire in SH rispetto al dominio spaziale, ad esempio se si desidera ruotare la funzione rappresentata come SH, può diventare piuttosto costosa per SH di ordine superiore. Quindi dipende davvero dal problema se è adatto per essere eseguito in SH o no.

SH è generalmente usato per rappresentare solo le funzioni a bassa frequenza (cioè funzioni che cambiano senza intoppi) perché frequenze più alte richiedono un aumento della quantità di memoria (coefficienti SH) e di elaborazione. Questo è il motivo per cui non vedi SH usato ad esempio per sostituire i riflessi speculari su superfici lucide. Esistono anche armoniche sferiche zonali , che possono essere utilizzate per ridurre la memorizzazione e il calcolo di funzioni 2D simmetriche in senso rotazionale rispetto all'asse z, semplicemente memorizzando elementi diagonali della matrice del coefficiente SH. Anche le armoniche emisferiche possono essere utilizzate se è necessario occuparsi solo delle funzioni emisferiche (comuni anche nell'illuminazione) con il vantaggio di poter rappresentare frequenze simili a quelle di SH con meno coefficienti.

Un'operazione che è inoltre necessario eseguire è "Proiezione SH" per trasformare i dati del dominio spaziale in SH. È possibile eseguire questa operazione eseguendo la convoluzione dei dati del dominio spaziale con le funzioni di base SH. Una proprietà interessante di SH è che, a differenza delle rappresentazioni di domini spaziali, SH non soffre di alias, quindi non si hanno artefatti di alias anche quando si proietta su SH di ordine molto basso.

Sonde luminose

Ora che hai capito le operazioni e le proprietà di base di SH, possiamo pensare come applicarle a IG. Una sonda di luce registra quanta luce proviene da ogni direzione fino al punto in cui si trova la sonda. Questa è una funzione 2D su una sfera e può essere rappresentata come SH (o funzione 3 SH per rosso, verde e blu). A seconda della quantità di dettagli di illuminazione che vogliamo codificare nelle sonde, possiamo scegliere l'ordine SH.

Per le sonde luminose che vengono utilizzate solo per l'illuminazione diffusa lambertiana, è sufficiente un SH di ordine abbastanza basso poiché la convoluzione viene eseguita con il lobo del coseno, che può essere rappresentato con SH dell'ordine del 2 (9 coefficienti). I coefficienti SH per le sonde luminose possono essere generati semplicemente eseguendo il rendering di una cubemap nel punto della sonda e quindi proiettandola su SH.

Quando si esegue il rendering della geometria, vengono prese alcune sonde di luce più vicine e i loro risultati vengono interpolati per ottenere la funzione di illuminazione incidente in un punto nello spazio. Questo può essere fatto ad esempio interpolando direttamente i coefficienti SH delle sonde vicine e quindi eseguendo la convoluzione con lobo di coseno orientato normale pixel nel dominio SH.


Quali sono i vantaggi dell'utilizzo di questo metodo rispetto all'illuminazione basata su immagini più semplice?
Arjan Singh,

Puoi avere un'illuminazione a bassa frequenza di qualità migliore con requisiti di archiviazione e prestazioni simili rispetto a quelli che utilizzano le cubemap.
JarkkoL,

16

Armoniche sferiche

Se sai cos'è una trasformata di Fourier, sai quasi già quali sono le armoniche sferiche: sono solo una trasformata di Fourier ma su base sferica anziché lineare. Cioè, mentre una trasformata di Fourier è un modo diverso di rappresentare una funzione , le armoniche sferiche sono la cosa analoga per le funzioni polari .f ( θ , ϕ )f(x)f(θ,ϕ)

Se non sai cos'è una trasformata di Fourier, devi sapere prima di poter comprendere le armoniche sferiche. La trasformata di Fourier ti consente di rappresentare un segnale come una serie di onde sinusoidali e coseno, ognuna con il doppio della frequenza dell'ultima. Cioè, è possibile rappresentare il segnale come media, più un'onda sinusoidale la cui lunghezza d'onda è uguale alla lunghezza del segnale, più un'onda sinusoidale doppia della lunghezza d'onda e così via. Poiché la trasformata di Fourier ti fissa su queste lunghezze d'onda particolari, devi solo registrare l'ampiezza di ciascuna.

Usiamo comunemente trasformate di Fourier per rappresentare immagini, che sono solo segnali digitali 2D. È utile perché puoi eliminare alcune delle onde sinusoidali (o ridurre la precisione con cui memorizzi la loro ampiezza) senza cambiare in modo significativo l'aspetto dell'immagine agli occhi umani. OTOH, gettando via i pixel cambia molto l'aspetto dell'immagine.

In un segnale campionato come un'immagine, se usi lo stesso numero di onde sinusoidali che c'erano campioni (pixel) nell'immagine originale, puoi ricostruire esattamente l'immagine, quindi una volta che inizi a buttare via qualsiasi frequenza, stai facendo il l'immagine richiede meno spazio di archiviazione.

Le armoniche sferiche sono proprio come le trasformate di Fourier, ma invece delle onde sinusoidali, usano una funzione sferica, quindi al posto delle funzioni lineari (come le immagini), possono rappresentare le funzioni definite sulla sfera (come le mappe ambientali).

Sonde luminose

Proprio come il modo in cui un'immagine standard registra tutta la luce che raggiunge un determinato punto attraverso il piano dell'immagine, una sonda di luce registra tutta la luce che raggiunge un certo punto da tutte le direzioni. Sono usciti per la prima volta dagli effetti cinematografici. Se vuoi aggiungere un oggetto generato dal computer a una scena del mondo reale, devi essere in grado di illuminare l'oggetto sintetico con l'illuminazione del mondo reale. Per fare ciò, devi sapere quale luce raggiunge il punto nella scena in cui si troverà l'oggetto sintetico. (NB Anche se dico "illuminazione", stai registrando un'immagine di tutta la luce, quindi può essere utilizzata anche per i riflessi.)

Poiché non è possibile avere una fotocamera con una lente sferica che registra tutta la luce che raggiunge un singolo punto da tutte le direzioni, è possibile registrarla scattando normali fotografie di uno specchio sferico e quindi riproiettando le immagini su una sfera.

Al di fuori degli effetti cinematografici, è più comune utilizzare le sonde luminose generate da una scena artificiale. Immagina di avere un algoritmo costoso per calcolare l'illuminazione globale (GI) in una scena e di avere anche degli oggetti più piccoli che si muovono in questa scena (come un livello di gioco con giocatori dentro). Non è possibile eseguire l'intero algoritmo GI ogni volta che si sposta un oggetto, quindi lo si esegue una volta con la scena statica e si salvano le sonde luminose prese in vari punti del livello. Quindi puoi ottenere una buona approssimazione al GI illuminando il giocatore con la sonda di luce più vicina.

Usandoli insieme

In genere si desidera filtrare comunque i bordi nitidi nell'illuminazione globale, quindi si desidera un modo per rappresentarli compatto e che consente di eliminare facilmente le alte frequenze. Ecco cosa sono davvero brave le armoniche sferiche! Ecco perché ascolterai questi due termini usati molto insieme.

Calcoli le sonde luminose con il tuo costoso algoritmo GI, in genere nello strumento di progettazione del livello, o forse una volta al secondo (anziché una volta per fotogramma) se vuoi includere i tuoi oggetti dinamici. Li conservi a buon mercato con armoniche sferiche: 16 galleggianti sono sufficienti per un'illuminazione di alta qualità, ma non per i riflessi. Quindi, per ogni oggetto dinamico che vuoi illuminare, scegli la sonda di luce più vicina (o interpoli linearmente più insieme) e la usi come input uniforme o costante per il tuo shader. È anche comune usare armoniche sferiche per rappresentare i dati di occlusione ambientale, ed è molto economico contorcerlo con la sonda di luce, sebbene ci sia una certa complessità nel ruotare le funzioni armoniche sferiche.


Ottima risposta questo ha davvero chiarito tutto! Quindi, in sostanza, le sonde luminose sono un modo semplice per calcolare l'illuminazione dei personaggi in movimento che ci impediscono di ricalcolare il GI per l'intera scena. Le armoniche sferiche invece vengono utilizzate per filtrare le alte frequenze. (Correggimi se sbaglio, sto solo cercando di vedere se ho la giusta comprensione).
Arjan Singh,

"se usi lo stesso numero di onde sinusoidali presenti nell'immagine originale (pixel), puoi ricostruire esattamente l'immagine", in realtà non è vero. Ad esempio, l'onda quadra richiede un numero infinito di frequenze per la rappresentazione esatta
JarkkoL

@JarkkoL Certo, una vera onda quadra lo fa. Ma se lo hai discretizzato campionando, allora hai bisogno solo dello stesso numero di frequenze per rendere l'errore inferiore all'errore di campionamento. È un risultato utile del teorema di Nyquist (che la frequenza più alta presente nel segnale campionato è la metà della frequenza di campionamento).
Dan Hulme

Ah sì, è vero ovviamente. Suppongo che tu abbia bisogno della metà della frequenza ma di risultati di dominio di frequenza complessi (vs reali). Oppure usa DCT e dominio reale con una frequenza doppia di DFT.
JarkkoL,

5

Armoniche sferiche

Supponiamo che tu abbia alcuni dati in un array ma vuoi rappresentarli con un numero minore di byte.

Un modo per farlo potrebbe essere quello di esprimere i dati come una funzione anziché i valori grezzi.

Potresti rappresentarlo come una funzione lineare: y=ax+b

Poi invece di memorizzare la matrice di valori è possibile memorizzare solo e .bab

Il problema è che un'equazione lineare è probabilmente una scarsa approssimazione ai tuoi dati.

Potresti invece provare un quadratico: y=ax2+bx+c

Ora, invece di memorizzare e , si memorizza , e .b a b cababc

Abbiamo aumentato la memoria e anche la complessità computazionale della memorizzazione e del recupero dei tuoi dati, rispetto all'equazione lineare, ma è una migliore approssimazione alla tua matrice di dati. Potremmo anche portarlo a una funzione cubica o superiore. L'aumento dell'ordine aumenta l'archiviazione, il calcolo e la precisione.

Le armoniche sferiche sono un modo per creare una funzione definita su una sfera anziché su una come stavo parlando sopra.f(x)

Proprio come negli esempi sopra, è possibile utilizzare una funzione di armoniche sferiche di ordine inferiore per creare qualcosa con una memoria inferiore e un calcolo inferiore per calcolare i dati, ma anche una precisione inferiore.

D'altra parte, è possibile aumentare l'ordine e ottenere una migliore approssimazione dei dati originali, ma a scapito di più spazio di archiviazione richiesto e più calcolo necessario per calcolare un punto di dati.

All'estremo, puoi usare tutti i termini armonici sferici di quanti avevi campioni nel tuo array e quindi puoi ricostruire esattamente il tuo array originale, ma spendi un sacco di calcoli nel farlo e stai usando lo stesso spazio di archiviazione come hai iniziato.

Per questo motivo, in pratica, le funzioni delle armoniche sferiche non offrono molti vantaggi se è necessario rappresentare dettagli precisi - come una forte riflessione su una sfera - ma possono essere economici per i dati che non hanno dettagli fini (dati che non avere molto contenuto ad alta frequenza). Sono anche utili per eseguire calcoli nel dominio della frequenza come analisi spettrali o convoluzione.

Uno di questi dati che sono bravi a memorizzare è l'irraggiamento che è la quantità di luce che colpisce un punto da altre direzioni. Tende a sembrare un po 'sfocato, il che significa che ha solo un contenuto a bassa frequenza ed è un buon candidato per essere memorizzato in una funzione sferica di armoniche.

Lascio la spiegazione delle sonde luminose ad un'altra persona: p


Perché il voto negativo? : P
Alan Wolfe,

Non è vero che le armoniche sferiche non sono brave a rappresentare dettagli fini. Come la trasformata di Fourier, possono ricostruire il segnale originale esattamente se si mantengono tutte le frequenze. È solo che rendono facile risparmiare spazio gettando via le alte frequenze se non ne hai bisogno.
Dan Hulme

E scusate, ho pensato che dopo aver espresso il voto fosse difficile sottoporre a voto negativo per una singola richiesta dubbia in una risposta altrimenti utile, ma il mio voto è stato bloccato quando ho avuto ripensamenti.
Dan Hulme

Ah. Sì, è possibile, allo stesso modo in cui è possibile rappresentare qualsiasi set di dati con un polinomio, ma in pratica, entrambi sono scelte sbagliate per la necessità di adattarsi a molti punti dati. Con un polinomio hai bisogno di N termini di una funzione di ordine N per adattarsi esattamente a N punti dati, ad esempio, il che lo rende una scelta peggiore di un semplice array poiché è un calcolo, non una ricerca, per ottenere un punto dati. Allo stesso modo, in termini pratici, le armoniche sferiche sono una cattiva scelta per i dati sferici con contenuto ad alta frequenza che si desidera conservare. Non è una buona scelta in quelle situazioni.
Alan Wolfe,

È vero se vuoi essere in grado di ricostruire singoli campioni, ma non tutti gli usi di Fourier lo richiedono, allo stesso modo per non tutti gli usi di SH. Se hai intenzione di fare una convoluzione, è molto più economico farlo nel dominio della frequenza prima di tornare ai campioni. Ti dispiacerebbe proporre una modifica per renderlo più chiaro nella tua risposta, dopo che avrò finito la mia risposta?
Dan Hulme
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.