lumosquad/BlueNoise
2025-07-26 22:14:37 +02:00
..
BLUE_NOISE.cpp Initial commit 2025-07-26 22:14:37 +02:00
BLUE_NOISE.h Initial commit 2025-07-26 22:14:37 +02:00
LICENSE.txt Initial commit 2025-07-26 22:14:37 +02:00
RangeList.cpp Initial commit 2025-07-26 22:14:37 +02:00
RangeList.h Initial commit 2025-07-26 22:14:37 +02:00
README.txt Initial commit 2025-07-26 22:14:37 +02:00
RNG.cpp Initial commit 2025-07-26 22:14:37 +02:00
RNG.h Initial commit 2025-07-26 22:14:37 +02:00
ScallopedSector.cpp Initial commit 2025-07-26 22:14:37 +02:00
ScallopedSector.h Initial commit 2025-07-26 22:14:37 +02:00
WeightedDiscretePDF.cpp Initial commit 2025-07-26 22:14:37 +02:00
WeightedDiscretePDF.h Initial commit 2025-07-26 22:14:37 +02:00

PDSample - Poisson-Disk sample set generation
Daniel Dunbar, daniel@zuster.org
----


Overview
--
PDSample generates Poisson-disk sampling sets in the domain [-1,1]^2
using a variety of methods. See "A Spatial Data Structure for Fast 
Poisson-Disk Sample Generation", in Proc' of SIGGRAPH 2006 for more
information.


Building
---
The code should be portable to any platform with 32-bit float's and int's.

Windows: There is an included PDSample.sln for MSVS version 7.
Unix: Type 'make' and hope for the best. 


Usage
---
PDSample [-m] [-t] [-r <relax count=0>] [-M <multiplier=1>] 
         [-N <minMaxThrows=1000>] <method> <radius> <output>

Options
--
 o -t 
   Uses tiled (toroidal) domain for supporting samplers. The resulting point 
   set will be suitable for tiling repeatedly in the x and y directions.
 
 o -m
   Maximize the resulting point set. For samplers which do not already produce
   a maximal point set then this will use the Boundary sampling method to
   ensure the resulting point set is maximal. 
 
 o -r <relax count>
   Apply the specified number of relaxations to the resulting point set. This
   requires that qvoronoi be in the path.
 
 o -M <multiplier>
   For DartThrowing and BestCandidate methods this determines the factor to
   multiply the current number of points by to determine how many samples to
   take before exiting (DartThrowing) or accepting the best candidate 
   (BestCandidate).
 
 o -N <minMaxThrows>
   This specifies a minimum number of samples that will be taken for the
   DartThrowing sampler. See below.
   
   
Available Samplers (for method argument)
--
 o DartThrowing
     Standard dart throwing. On each iteration the DartThrowing sampler will 
     try min(N*multiplier,minMaxThrows) samples before termination. Note that
     for regular dart throwing where simply a maximum number of throws is used
     to determine the termination point, the multiplier should be set to 0.
 
 o BestCandidate
     Mitchell's Best Candidate algorithm. Uses the multiplier argument.
     
 o Boundary
     Dart throwing by maximizing boundaries.
 
 o Pure
     Dart throwing using scalloped sectors.
 o LinearPure
     Dart throwing using scalloped sectors but without sampling regions according
     to their probability of being hit.
     
 o Penrose
     Ostromoukhov et al.'s sampling method using their quasisampler_prototype.h
     
 o Uniform
     Random point generation. The number of samples to take is calculated as
     .75/radius^2 to approximately match the density of Poisson-disk sampling.


Output format
--
Point sets are output in a trivial binary format. The format is not intended
for distribution and does not encode the endianness of the generating platform.

The format matches the pseudo-C struct below:
struct {
	int N;       // number of points
	float t;     // generation time
	float r;     // radius used in generation
	int isTiled; // flag for if the set is tileable
	float points[N][2];
};


Acknowledgments
--
Thanks to Ares Lagae for comments on a preliminary release of the code,
Ostromoukhov et al. for making available their quasisampler implementation,
as well as Takuji Nishimura and Makoto Matsumoto for their Mersenne
Twister random number generator.