Skip to content

Commit

Permalink
[radiance caches] Cleaning up use of OPENPGL_RADIANCE_CACHES define
Browse files Browse the repository at this point in the history
  • Loading branch information
sherholz-intel committed Jul 15, 2024
1 parent 49a7bf9 commit af484dc
Show file tree
Hide file tree
Showing 6 changed files with 26 additions and 39 deletions.
4 changes: 2 additions & 2 deletions openpgl/data/Range.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,13 @@ namespace openpgl
OPENPGL_ASSERT(int(m_end) - int(m_begin) >= 0);
return m_end - m_begin;
}

#ifdef OPENPGL_RADIANCE_CACHES
inline size_t sizeZeroValueSamples() const
{
OPENPGL_ASSERT(int(m_is_end) - int(m_is_begin) >= 0);
return m_is_end - m_is_begin;
}

#endif
inline void reset()
{
m_begin = 0;
Expand Down
4 changes: 2 additions & 2 deletions openpgl/directional/dqt/DQTSurfaceSamplingDistribution.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ struct DQTSurfaceSamplingDistribution: public ISurfaceSamplingDistribution {
inline float pdfLi(const Vector3 dir) const override {
return distribution.pdf(dir);
};

#ifdef OPENPGL_RADIANCE_CACHES
inline Vector3 incomingRadiance(const Vector3 dir) const override
{
return Vector3(0.f, 0.f, 0.f);
Expand All @@ -53,7 +53,7 @@ struct DQTSurfaceSamplingDistribution: public ISurfaceSamplingDistribution {
return Vector3(0.f, 0.f, 0.f);
}

#ifdef OPENPGL_RADIANCE_CACHES

inline Vector3 outgoingRadiance(const Vector3 dir) const override
{
return m_region->getOutgoingRadiance(dir);
Expand Down
36 changes: 13 additions & 23 deletions openpgl/directional/vmm/ParallaxAwareVonMisesFisherMixture.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,10 +76,10 @@ struct ParallaxAwareVonMisesFisherMixture
embree::vfloat<VecSize> _distances[NumVectors];
Point3 _pivotPosition {0.0f, 0.0f, 0.0f};

#ifdef OPENPGL_RADIANCE_CACHES
// fluence attributes
float _fluence {0.0f};
float _numFluenceSamples {0.f};
#ifdef OPENPGL_RADIANCE_CACHES
Vector3 _fluenceRGB {0.0f, 0.0f, 0.0f};
embree::Vec3<embree::vfloat<VecSize> > _fluenceRGBWeights[NumVectors];
#endif
Expand All @@ -106,13 +106,15 @@ struct ParallaxAwareVonMisesFisherMixture

void performRelativeParallaxShift( const Vector3 &shiftDirection);

#ifdef OPENPGL_RADIANCE_CACHES
Vector3 incomingRadiance( const Vector3 &direction ) const;

Vector3 irradiance( const Vector3 &normal ) const;

Vector3 inscatteredRadiance( const Vector3 &dir, const float meanCosine ) const;

Vector3 fluence() const;
#endif

// Product and convolution functions
void convole(const float &meanCosine);
Expand Down Expand Up @@ -149,7 +151,9 @@ struct ParallaxAwareVonMisesFisherMixture

void decay(const float alpha)
{
_numFluenceSamples *= alpha;
#ifdef OPENPGL_RADIANCE_CACHES
_numFluenceSamples *= alpha;
#endif
}

bool isValid() const;
Expand Down Expand Up @@ -254,12 +258,12 @@ std::string ParallaxAwareVonMisesFisherMixture<VecSize, maxComponents,UseParalla

ss << "pivot: " << _pivotPosition << std::endl;
ss << "sumWeights: " << sumWeights << std::endl;
ss << "fluence: " << _fluence << std::endl;
#ifdef OPENPGL_RADIANCE_CACHES
ss << "fluence: " << _fluence << std::endl;
ss << "fluenceRGB: " << _fluenceRGB.x << "\t" << _fluenceRGB.y << "\t" << _fluenceRGB.z << std::endl;
#endif
ss << "numFluenceSamples: " << _numFluenceSamples << std::endl;

#endif

return ss.str();
}

Expand Down Expand Up @@ -469,8 +473,8 @@ void ParallaxAwareVonMisesFisherMixture<VecSize, maxComponents,UseParallaxCompen
stream.write(reinterpret_cast<const char*>(&_numComponents), sizeof(_numComponents));
stream.write(reinterpret_cast<const char*>(&_pivotPosition), sizeof(Point3));

stream.write(reinterpret_cast<const char*>(&_fluence), sizeof(float));
#ifdef OPENPGL_RADIANCE_CACHES
stream.write(reinterpret_cast<const char*>(&_fluence), sizeof(float));
stream.write(reinterpret_cast<const char*>(&_fluenceRGB), sizeof(Vector3));
stream.write(reinterpret_cast<const char*>(&_numFluenceSamples), sizeof(float));
#endif
Expand All @@ -492,8 +496,8 @@ void ParallaxAwareVonMisesFisherMixture<VecSize, maxComponents,UseParallaxCompen
stream.read(reinterpret_cast<char*>(&_numComponents), sizeof(_numComponents));
stream.read(reinterpret_cast<char*>(&_pivotPosition), sizeof(Point3));

stream.read(reinterpret_cast<char*>(&_fluence), sizeof(float));
#ifdef OPENPGL_RADIANCE_CACHES
stream.read(reinterpret_cast<char*>(&_fluence), sizeof(float));
stream.read(reinterpret_cast<char*>(&_fluenceRGB), sizeof(Vector3));
stream.read(reinterpret_cast<char*>(&_numFluenceSamples), sizeof(float));
#endif
Expand Down Expand Up @@ -1095,9 +1099,9 @@ bool ParallaxAwareVonMisesFisherMixture<VecSize, maxComponents,UseParallaxCompen
return equal;
}

#ifdef OPENPGL_RADIANCE_CACHES
template<int VecSize, int maxComponents, bool UseParallaxCompensation>
Vector3 ParallaxAwareVonMisesFisherMixture<VecSize, maxComponents,UseParallaxCompensation>::incomingRadiance( const Vector3 &direction ) const{
#ifdef OPENPGL_RADIANCE_CACHES
const int cnt = (_numComponents+VecSize-1) / VecSize;

embree::Vec3< embree::vfloat<VecSize> > incomingRadiance = {0.0f, 0.0f, 0.0f};
Expand All @@ -1115,15 +1119,11 @@ Vector3 ParallaxAwareVonMisesFisherMixture<VecSize, maxComponents,UseParallaxCom
}

return Vector3(reduce_add(incomingRadiance.x), reduce_add(incomingRadiance.y), reduce_add(incomingRadiance.z));
#else
return Vector3(0.f, 0.f, 0.f);
#endif
}


template<int VecSize, int maxComponents, bool UseParallaxCompensation>
Vector3 ParallaxAwareVonMisesFisherMixture<VecSize, maxComponents,UseParallaxCompensation>::irradiance( const Vector3 &normal ) const{
#ifdef OPENPGL_RADIANCE_CACHES
const embree::vfloat<VecSize> cosine_meanCosine(KappaToMeanCosine<float>(2.18853f)); // TODO

const int cnt = (_numComponents+VecSize-1) / VecSize;
Expand All @@ -1140,15 +1140,11 @@ Vector3 ParallaxAwareVonMisesFisherMixture<VecSize, maxComponents,UseParallaxCom
irradiance += _fluenceRGBWeights[k] * eval;
}
return Vector3(reduce_add(irradiance.x), reduce_add(irradiance.y), reduce_add(irradiance.z));
#else
return Vector3(0.f, 0.f, 0.f);
#endif
}


template<int VecSize, int maxComponents, bool UseParallaxCompensation>
Vector3 ParallaxAwareVonMisesFisherMixture<VecSize, maxComponents,UseParallaxCompensation>::inscatteredRadiance( const Vector3 &dir, const float meanCosine ) const{
#ifdef OPENPGL_RADIANCE_CACHES
const embree::vfloat<VecSize> meanCosineVec(meanCosine);

const int cnt = (_numComponents+VecSize-1) / VecSize;
Expand All @@ -1165,19 +1161,13 @@ Vector3 ParallaxAwareVonMisesFisherMixture<VecSize, maxComponents,UseParallaxCom
inscatteredRadiance += _fluenceRGBWeights[k] * eval;
}
return Vector3(reduce_add(inscatteredRadiance.x), reduce_add(inscatteredRadiance.y), reduce_add(inscatteredRadiance.z));
#else
return Vector3(0.f, 0.f, 0.f);
#endif
}

template<int VecSize, int maxComponents, bool UseParallaxCompensation>
Vector3 ParallaxAwareVonMisesFisherMixture<VecSize, maxComponents,UseParallaxCompensation>::fluence() const{
#ifdef OPENPGL_RADIANCE_CACHES
return _fluenceRGB;
#else
return Vector3(0.f, 0.f, 0.f);
#endif
}
#endif

template<int VecSize, int maxComponents, bool UseParallaxCompensation>
embree::vfloat<VecSize> ParallaxAwareVonMisesFisherMixture<VecSize, maxComponents,UseParallaxCompensation>::_convolvePDF(const size_t k, const embree::Vec3< embree::vfloat<VecSize> >& normal, const embree::vfloat<VecSize>& meanCosine1) const {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -191,8 +191,10 @@ struct ParallaxAwareVonMisesFisherWeightedEMFactory

void partialUpdateMixture(VMM &vmm, PartialFittingMask &mask, SufficientStatistics &previousStats, const SampleData* samples, const size_t numSamples, const Configuration &cfg, FittingStatistics &fitStats) const;

#ifdef OPENPGL_RADIANCE_CACHES
void updateFluenceEstimate(VMM &vmm, const SampleData* samples, const size_t numSamples, const size_t numZeroValueSamples, const SampleStatistics &sampleStatistics) const;

#endif

VMM VMMfromSufficientStatistics(const SufficientStatistics &suffStats, const Configuration &cfg) const;

std::string toString() const
Expand Down Expand Up @@ -1324,6 +1326,7 @@ void ParallaxAwareVonMisesFisherWeightedEMFactory< TVMMDistribution>::updateComp

}

#ifdef OPENPGL_RADIANCE_CACHES
template<class TVMMDistribution>
void ParallaxAwareVonMisesFisherWeightedEMFactory<TVMMDistribution>::updateFluenceEstimate(VMM &vmm, const SampleData* samples, const size_t numSamples, const size_t numZeroValueSamples, const SampleStatistics &sampleStatistics) const
{
Expand All @@ -1341,7 +1344,6 @@ void ParallaxAwareVonMisesFisherWeightedEMFactory<TVMMDistribution>::updateFluen
float sumFluence {0.f};
Vector3 sumFluenceRGB {0.f, 0.f, 0.f};

#ifdef OPENPGL_RADIANCE_CACHES
embree::Vec3<embree::vfloat<VMM::VectorSize> > sumFluenceRGBWeights[VMM::NumVectors];
typename VMM::SoftAssignment softAssign;

Expand All @@ -1352,12 +1354,9 @@ void ParallaxAwareVonMisesFisherWeightedEMFactory<TVMMDistribution>::updateFluen
sumFluenceRGBWeights[k].z = zeros;
}

#endif

for (size_t n = 0; n < numSamples; n++)
{
sumFluence += samples[n].weight;
#ifdef OPENPGL_RADIANCE_CACHES
const Vector3 sampleDirection(samples[n].direction.x, samples[n].direction.y, samples[n].direction.z);
const Vector3 weightRGB(samples[n].weightRGB.x, samples[n].weightRGB.y, samples[n].weightRGB.z);
sumFluenceRGB += weightRGB;
Expand All @@ -1370,13 +1369,11 @@ void ParallaxAwareVonMisesFisherWeightedEMFactory<TVMMDistribution>::updateFluen
sumFluenceRGBWeights[k].z += weightRGB.z * softAssign.assignments[k];
}
}
#endif
}

const float oldNumFluenceSamples = vmm._numFluenceSamples;
const float newNumFluenceSamples = (oldNumFluenceSamples + float(numSamples + numZeroValueSamples));

#ifdef OPENPGL_RADIANCE_CACHES
if ( rem > 0 )
{
for ( size_t i = rem; i < VMM::VectorSize; i++)
Expand All @@ -1396,7 +1393,6 @@ void ParallaxAwareVonMisesFisherWeightedEMFactory<TVMMDistribution>::updateFluen
}

vmm._fluenceRGB = ((vmm._fluenceRGB * oldNumFluenceSamples) + sumFluenceRGB) / newNumFluenceSamples;
#endif
vmm._fluence = ((vmm._fluence * oldNumFluenceSamples) + sumFluence) / newNumFluenceSamples;
vmm._numFluenceSamples = newNumFluenceSamples;
#else //calcualting fluence and the RGB per lob estiamtions using the soft assigns counter to average the incoming radiance per lobe (getting rid of the PDF dependency) TODO: maybe drop this code
Expand Down Expand Up @@ -1484,6 +1480,7 @@ void ParallaxAwareVonMisesFisherWeightedEMFactory<TVMMDistribution>::updateFluen

#endif
}
#endif

template<class TVMMDistribution>
void ParallaxAwareVonMisesFisherWeightedEMFactory< TVMMDistribution>::Configuration::init()
Expand Down
5 changes: 2 additions & 3 deletions openpgl/field/Field.h
Original file line number Diff line number Diff line change
Expand Up @@ -451,8 +451,8 @@ tbb::parallel_for( tbb::blocked_range<int>(0,samples.zeroValueSamples.size()), [
typename DirectionalDistributionFactory::FittingStatistics fittingStats;
m_distributionFactory.prepareSamples(samples.data() + regionStorage.second.m_begin, regionStorage.second.m_end - regionStorage.second.m_begin, regionStorage.first.sampleStatistics, m_distributionFactorySettings);
m_distributionFactory.fit(regionStorage.first.distribution, regionStorage.first.trainingStatistics, samples.data() + regionStorage.second.m_begin, regionStorage.second.m_end - regionStorage.second.m_begin, m_distributionFactorySettings, fittingStats);
m_distributionFactory.updateFluenceEstimate(regionStorage.first.distribution, samples.data() + regionStorage.second.m_begin, regionStorage.second.m_end - regionStorage.second.m_begin, regionStorage.first.numZeroValueSamples, regionStorage.first.sampleStatistics);
#ifdef OPENPGL_RADIANCE_CACHES
m_distributionFactory.updateFluenceEstimate(regionStorage.first.distribution, samples.data() + regionStorage.second.m_begin, regionStorage.second.m_end - regionStorage.second.m_begin, regionStorage.first.numZeroValueSamples, regionStorage.first.sampleStatistics);
regionStorage.first.outRadianceHist.update(samples.data() + regionStorage.second.m_begin, regionStorage.second.m_end - regionStorage.second.m_begin, zeroValueSamples.data() + regionStorage.second.m_is_begin, regionStorage.second.m_is_end - regionStorage.second.m_is_begin);
#endif
// TODO: we should move setting the pivot to the factory
Expand Down Expand Up @@ -527,9 +527,8 @@ tbb::parallel_for( tbb::blocked_range<int>(0,samples.zeroValueSamples.size()), [
typename DirectionalDistributionFactory::FittingStatistics fittingStats;
m_distributionFactory.prepareSamples(samples.data() + regionStorage.second.m_begin, regionStorage.second.m_end - regionStorage.second.m_begin, regionStorage.first.sampleStatistics, m_distributionFactorySettings);
m_distributionFactory.update(regionStorage.first.distribution, regionStorage.first.trainingStatistics, samples.data() + regionStorage.second.m_begin, regionStorage.second.m_end - regionStorage.second.m_begin, m_distributionFactorySettings, fittingStats);
m_distributionFactory.updateFluenceEstimate(regionStorage.first.distribution, samples.data() + regionStorage.second.m_begin, regionStorage.second.m_end - regionStorage.second.m_begin, regionStorage.first.numZeroValueSamples, regionStorage.first.sampleStatistics);
//regionStorage.first.valid = regionStorage.first.distribution.isValid();
#ifdef OPENPGL_RADIANCE_CACHES
m_distributionFactory.updateFluenceEstimate(regionStorage.first.distribution, samples.data() + regionStorage.second.m_begin, regionStorage.second.m_end - regionStorage.second.m_begin, regionStorage.first.numZeroValueSamples, regionStorage.first.sampleStatistics);
regionStorage.first.outRadianceHist.update(samples.data() + regionStorage.second.m_begin, regionStorage.second.m_end - regionStorage.second.m_begin, zeroValueSamples.data() + regionStorage.second.m_is_begin, regionStorage.second.m_is_end - regionStorage.second.m_is_begin);
#endif
regionStorage.first.valid = regionStorage.first.isValid();
Expand Down
3 changes: 2 additions & 1 deletion openpgl/spatial/kdtree/KDTreeBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -382,9 +382,10 @@ void insertTree(KDTree &kdTree, TZeroValueSamplesContainer &samples, tbb::concur
std::pair<TRegion, Range> &regionAndRangeData = dataStorage->operator[](dataIdx);
regionAndRangeData.first.sampleStatistics.addNumZeroValueSamples(sampleRange.size());
regionAndRangeData.first.numZeroValueSamples = sampleRange.size();

#ifdef OPENPGL_RADIANCE_CACHES
regionAndRangeData.second.m_is_begin = sampleRange.m_begin;
regionAndRangeData.second.m_is_end = sampleRange.m_end;
#endif
return;
}
else
Expand Down

0 comments on commit af484dc

Please sign in to comment.