101 lines
3.3 KiB
Text
101 lines
3.3 KiB
Text
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.
|