Compensazione della perdita di energia nei modelli BSDF a microfacet a dispersione singola


11

Modelli di superficie basati su microfacet a dispersione singola come l'originale Torrance-Sparrow BRDF o modelli derivati ​​come il BSDF per superfici dielettriche ruvide di Walter et al. trascurare l'inter-riflesso della luce tra i microfacet, causando una perdita di energia che causa l'oscuramento soprattutto a valori di rugosità più elevati.

Il problema può essere facilmente dimostrato utilizzando il test del forno. Le immagini seguenti mostrano il comportamento della mia implementazione di un microfacet conduttivo BRDF utilizzando il modello Smith e la distribuzione GGX per i parametri di rugosità da 0,2 a 1,0 (il coefficiente di Fresnel è impostato deliberatamente su 1 qui per rendere più facile la visualizzazione del problema):

rugosità 0.2 rugosità 0.4 rugosità 0.6 rugosità 0,8 rugosità 1.0

Test in forno di dielettrico grezzo (IoR 1.51) BSDF utilizzando il modello Smith e la distribuzione di microfacet GGX per parametri di rugosità da 0,2 a 1,0:

rugosità 0.2 rugosità 0.4 rugosità 0.6 rugosità 0,8 rugosità 1.0

Eric Heitz et al. ha recentemente proposto un modello a dispersione multipla che risolve il problema dell'oscuramento risolvendo completamente l'interazione della luce, ma ci sono problemi di prestazioni dovuti alla natura stocastica della sua routine di valutazione, come indicato dallo stesso Heitz nel forum LuxRender .

Esiste un metodo di compensazione noto per recuperare l'energia persa dei modelli a dispersione singola? Non necessariamente fisicamente corretto, ma almeno non rompendo troppo la plausibilità fisica (reciprocità di Helmholtz e risparmio energetico) e, idealmente, senza la necessità di parametri di regolazione manuale.

Nella Disney BSDF , esiste un componente parametrizzato chiamato "lucentezza" (fondamentalmente un lobo lucido a base di Fresnel) che può essere usato per compensare l'oscuramento dei bordi, ma come menzionano nel loro corso Siggraph 2015 è un metodo molto ad hoc:

"... questo è molto approssimativo e non funziona altrettanto bene per altri valori di rugosità ..."

Il summenzionato commento di Eric Heitz nel forum LuxRender suggerisce anche l'uso di un hack di compensazione, ma, sfortunatamente, non entra in alcun dettaglio:

Per quanto ne so, è possibile utilizzare alcuni hack più semplici per migliorare il risparmio energetico nei singoli modelli di scattering (come modificare l'albedo). Tuttavia, se lo fai, non puoi ottenere un materiale perfettamente a risparmio energetico (ad esempio un vetro ruvido bianco perfetto) senza rompere la reciprocità del BSDF.

Risposte:


8

Per quanto ne so, non esiste un modo semplice e analitico per recuperare l'energia persa nei modelli a dispersione singola. Le tecniche precedenti precompongono la perdita di energia e la reiniettano nel BRDF come componente diffuso:

Ciò che propongono è un risparmio energetico e reciproco, ed è probabilmente il modo più semplice di riparare l'oscuramento visivo a causa della perdita di energia. Lo svantaggio principale è che poiché la perdita di energia non ha un'espressione analitica, deve essere pre-calcolata e memorizzata in una tabella di consultazione.

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.