Distinct blue-noise sampler domains produce bit-identical sample streams
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 57/100
- Issue type
- Bug
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- cpp
- Domain
- computer-graphics
Research direction
The reproduction exercises SobolBnSampler, PmjBnSampler, and the SobolSampler control through qmc/sobolbn.h, qmc/pmjbn.h, and qmc/sobol.h. Start by tracing how newDomain and drawSample handle the domain key in the blue-noise samplers, then run the repro against the control. Done means keys 97 and 138 no longer produce identical first-coordinate streams for the reported indices, while the control remains collision-free.
Written by the indexing model from the issue text.
Description
Distinct sibling domain keys produce identical sample streams in SobolBnSampler and PmjBnSampler. With pixel (0,0), frame 0, keys 97 and 138 yield bit-for-bit identical first-coordinate samples for indices 0…4095. The non-blue-noise SobolSampler control does not exhibit this collision.
Her is a repro case:
#include <oqmc/sobolbn.h>
#include <oqmc/pmjbn.h>
#include <oqmc/sobol.h>
#include <cstdint>
#include <iostream>
#include <vector>
template<class Sampler>
bool check(const char* name)
{
std::vector<std::uint64_t> cache((Sampler::cacheSize + 7) / 8);
Sampler::initialiseCache(cache.data());
unsigned identical = 0;
for (int index = 0; index < 4096; ++index) {
const Sampler root(0, 0, 0, index, cache.data()); // x, y, frame, index
std::uint32_t a[1], b[1];
root.newDomain(97).template drawSample<1>(a);
root.newDomain(138).template drawSample<1>(b);
identical += a[0] == b[0];
}
std::cout << name << ": " << identical
<< "/4096 bit-for-bit identical sample pairs\n";
return identical == 4096;
}
int main()
{
const bool sobolBnCollision = check<oqmc::SobolBnSampler>("SobolBn");
const bool pmjBnCollision = check<oqmc::PmjBnSampler>("PmjBn");
const bool plainSobolCollision = check<oqmc::SobolSampler>("Sobol (control)");
if (!sobolBnCollision || !pmjBnCollision || plainSobolCollision) {
std::cerr << "Results differ from the OpenQMC 0.7.1.0 reproduction.\n";
return 1;
}
return 0;
}
- Dominant language
- C++
- Stars
- 106
- Forks
- 7
- PR merge metrics
- No merged PRs in 30d
Getting set up
- Ships a Dockerfile or Docker Compose file
- No pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from AcademySoftwareFoundation/openqmc
-
documentation
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
enhancement
Difficulty 4/5 3-5 days Newbie friendliness 45/100
AcademySoftwareFoundation/openqmc#100 · 2 comments ·
-
enhancement
Difficulty 4/5 3-5 days Newbie friendliness 35/100
-
Add C-ABI to provide an ABI stable interface and improve compatibilityPossibly taken @joshbainbridge claimed this 138 days ago. Openenhancement
AcademySoftwareFoundation/openqmc#87 · 1 assignee ·
-
enhancement
Difficulty 5/5 Over a week Newbie friendliness 32/100
AcademySoftwareFoundation/openqmc#71 · 4 comments ·
All issues in AcademySoftwareFoundation/openqmc
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
google/tensorstore#306 ·
-
comp-formats
Difficulty 2/5 Half a day Newbie friendliness 64/100
ClickHouse/ClickHouse#131694 ·
Maintainers usually reply within 1 day
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
ETSInitiative/PETSIRD#243 ·
Maintainers usually reply within 1 day
-
[BUG][Ascend][AscendC] Scalar FP8 arithmetic stored to UB emits ".data" on a float and fails deviceOpenascend bug
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
Maintainers usually reply within 2 days
-
bug-unconfirmed
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 1 day