MCPcopy Create free account
hub / github.com/OpenPathGuidingLibrary/openpgl / newField

Method newField

openpgl/device/Device.h:88–224  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

86 }
87
88 ISurfaceVolumeField *newField(PGLFieldArguments args) const override
89 {
90 ISurfaceVolumeField *gField;
91
92 if (args.spatialStructureType == PGL_SPATIAL_STRUCTURE_KDTREE && args.directionalDistributionType == PGL_DIRECTIONAL_DISTRIBUTION_PARALLAX_AWARE_VMM)
93 {
94 using DirectionalDistributionFactory = AdaptiveSplitAndMergeFactory<ParallaxAwareVonMisesFisherMixture<VecSize, 32, true>>;
95 using GuidingField = SurfaceVolumeField<VecSize, DirectionalDistributionFactory, KDTreePartitionBuilder,
96 VMMSurfaceSamplingDistribution<typename DirectionalDistributionFactory::Distribution, true>,
97 VMMVolumeSamplingDistribution<typename DirectionalDistributionFactory::Distribution, true>>;
98
99 typename GuidingField::Settings gFieldSettings;
100 gFieldSettings.settings.decayOnSpatialSplit = 0.25f;
101 gFieldSettings.settings.deterministic = args.deterministic;
102 gFieldSettings.debugSettings.fitRegions = args.debugArguments.fitRegions;
103
104 PGLKDTreeArguments *spatialSturctureArguments = (PGLKDTreeArguments *)args.spatialSturctureArguments;
105 gFieldSettings.settings.useStochasticNNLookUp = spatialSturctureArguments->knnLookup;
106 gFieldSettings.settings.useISNNLookUp = spatialSturctureArguments->isKnnLookup;
107 gFieldSettings.settings.spatialSubdivBuilderSettings.minSamples = spatialSturctureArguments->minSamples;
108 gFieldSettings.settings.spatialSubdivBuilderSettings.maxSamples = spatialSturctureArguments->maxSamples;
109 gFieldSettings.settings.spatialSubdivBuilderSettings.maxDepth = spatialSturctureArguments->maxDepth;
110 delete spatialSturctureArguments;
111
112 PGLVMMFactoryArguments *directionalDistributionArguments = (PGLVMMFactoryArguments *)args.directionalDistributionArguments;
113
114 gFieldSettings.distributionFactorySettings.weightedEMCfg.initK = directionalDistributionArguments->initK;
115 gFieldSettings.distributionFactorySettings.weightedEMCfg.initKappa = directionalDistributionArguments->initKappa;
116 gFieldSettings.distributionFactorySettings.weightedEMCfg.maxK = directionalDistributionArguments->maxK;
117 gFieldSettings.distributionFactorySettings.weightedEMCfg.maxEMIterrations = directionalDistributionArguments->maxEMIterrations;
118
119 gFieldSettings.distributionFactorySettings.weightedEMCfg.maxKappa = directionalDistributionArguments->maxKappa;
120 gFieldSettings.distributionFactorySettings.weightedEMCfg.maxMeanCosine =
121 openpgl::KappaToMeanCosine<float>(gFieldSettings.distributionFactorySettings.weightedEMCfg.maxKappa);
122 gFieldSettings.distributionFactorySettings.weightedEMCfg.convergenceThreshold = directionalDistributionArguments->convergenceThreshold;
123 gFieldSettings.distributionFactorySettings.weightedEMCfg.weightPrior = directionalDistributionArguments->weightPrior;
124 gFieldSettings.distributionFactorySettings.weightedEMCfg.meanCosinePriorStrength = directionalDistributionArguments->meanCosinePriorStrength;
125 gFieldSettings.distributionFactorySettings.weightedEMCfg.meanCosinePrior = directionalDistributionArguments->meanCosinePrior;
126
127 gFieldSettings.distributionFactorySettings.splittingThreshold = directionalDistributionArguments->splittingThreshold;
128 gFieldSettings.distributionFactorySettings.mergingThreshold = directionalDistributionArguments->mergingThreshold;
129
130 gFieldSettings.distributionFactorySettings.partialReFit = directionalDistributionArguments->partialReFit;
131 gFieldSettings.distributionFactorySettings.maxSplitItr = directionalDistributionArguments->maxSplitItr;
132
133 gFieldSettings.distributionFactorySettings.useSplitAndMerge = directionalDistributionArguments->useSplitAndMerge;
134 gFieldSettings.distributionFactorySettings.minSamplesForSplitting = directionalDistributionArguments->minSamplesForSplitting;
135 gFieldSettings.distributionFactorySettings.minSamplesForPartialRefitting = directionalDistributionArguments->minSamplesForPartialRefitting;
136 gFieldSettings.distributionFactorySettings.minSamplesForMerging = directionalDistributionArguments->minSamplesForMerging;
137 delete directionalDistributionArguments;
138
139 gField = new GuidingField(gFieldSettings);
140 }
141 else if (args.spatialStructureType == PGL_SPATIAL_STRUCTURE_KDTREE && args.directionalDistributionType == PGL_DIRECTIONAL_DISTRIBUTION_VMM)
142 {
143 using DirectionalDistributionFactory = AdaptiveSplitAndMergeFactory<ParallaxAwareVonMisesFisherMixture<VecSize, 32, false>>;
144 using GuidingField = SurfaceVolumeField<VecSize, DirectionalDistributionFactory, KDTreePartitionBuilder,
145 VMMSurfaceSamplingDistribution<typename DirectionalDistributionFactory::Distribution, false>,

Callers 1

api.cppFile · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected