Comments (5)
The m_distributions[0]
is actually an entire mixture of up to 32 components.
For the BSDF product, I may have to compute the product with 2 components
which then results in two mixutres m_distributions[0]
and m_distributions[1]
which essentially combine into a mixture of up to 64 components.
The product
function I've linked above is the wrong one.
This one will be called:
robust-vmm-guiding/include/pmm/ParametricMixtureModel.h
Lines 261 to 280 in b142273
Which then calls the one I've linked above on all components.
from robust-vmm-guiding.
Hi,
of course, all vMF distributions span the entire sphere - so when sampling them without bias, there are necessarily always a few samples below the hemisphere.
However, when we sample a vMF mixture, we already know our intersection point and its surface normal.
So, instead of sampling the mixture as is, we compute the product of each component with a vMF approximation of the cosine lobe centered around that surface normal.
(Each component will also be weighted by the integral of that product.)
The resulting mixture will be focused much more towards directions on the upper hemisphere and far less towards the lower hemisphere.
Essentially, its the cheapest way of product sampling you can do:
In this case, we only consider the cosine term in the rendering equation.
The relevant code is here:
robust-vmm-guiding/include/mitsuba/guiding/GuidingDistributionFactoryVMM.h
Lines 167 to 171 in b142273
Here, the
product
function modifies the mixture in place:robust-vmm-guiding/include/pmm/VMFKernel.h
Line 313 in b142273
And just above you can find the code for the full BSDF (including cosine) product sampling which can deal with multiple lobes.
I hope that is clear enough, I feel like this needs some drawing to come across :)
Best regards,
Lukas
from robust-vmm-guiding.
OMG, "a vMF approximation of the cosine!" -> That makes sense because the product of two vMF-lobes is as straightforward as your paper described in Appendix A.1, isn't it?
When I first read the paper, I was confused about multiplying the vMF with the cosine. But now I understand that you're multiplying it after approximating the cosine as another vMF. Thank you for explaining it so quickly and clearly.
from robust-vmm-guiding.
Additionally, I'm wondering why only the first lobe (gBSDF.m_guidingData.m_distributions[0]) is used when sampling the cosine product in GuidingDistributionFactoryVMM.h
.
from robust-vmm-guiding.
Thank you very much!!
from robust-vmm-guiding.
Related Issues (6)
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from robust-vmm-guiding.