Selection of libraries designed to be used with Emu projects. This was originally a Math library only, but has since been changed to hold all Emu libraries to enable consistency in changes to dependencies (such as EmuCore modifications).
All of these generation algorithms have been provided for 1, 2, and 3 dimensions.
Provides a few randomisation features to get everything working, linked to EmuMath\Random.h.
Noise tables may be generated easily through some options via the EmuMath::NoiseTable template, which itself abstracts the storage of a table into a multi-dimensional vector.
This multi-dimensional storage is chosen over a fully contiguous vector for cases where huge contiguous blocks of memory may not be available, since 3D tables can get very large very quickly.
Noise tables additionally provide an abstract method of generating noise. The user may customise these with template arguments to provide:
The type of noise to generate (e.g. Perlin). Dimensions are decided by the table's dimensions.
An optional sample processor which may be used to modify base-generated noise samples before they are stored. By default this makes no changes, but users may provide a predefined one or a custom one to attune noise to what they would prefer.
One example is to normalise perlin noise into the range -1:1, since that is a reasonable use case compared to the normal range of -(sqrt(n)/2):(sqrt(n)/2) where n is the number of dimensions. Such functionality is not provided by default so that we follow the C++ philosophy of not paying for what you don't use.
Additionally, these may be used to track progress, and an easy-to-use template for getting analytics on post-calculation samples may also be used. This is useful for finding data such as the range of one's data, and is a variadic template to allow any number of analytics.
Additionally, users must provide options for the noise to generate. These can be fully seen in the EmuMath::NoiseTableOptions template, but some aspects to highlight are:
Desired resolution of the output table.
Start and end point (or start point and custom step value if step_mode is true).
Permutation customisation to allow different shuffle seeds for the hash used to select permutations/gradients.
Fractal customisations to allow fractal noise to optionally be used.
Includes noise generation algorithms for:
All of these generation algorithms have been provided for 1, 2, and 3 dimensions.
Provides a few randomisation features to get everything working, linked to
EmuMath\Random.h
.Noise tables may be generated easily through some options via the
EmuMath::NoiseTable
template, which itself abstracts the storage of a table into a multi-dimensional vector.Noise tables additionally provide an abstract method of generating noise. The user may customise these with template arguments to provide:
-1:1
, since that is a reasonable use case compared to the normal range of-(sqrt(n)/2):(sqrt(n)/2)
wheren
is the number of dimensions. Such functionality is not provided by default so that we follow the C++ philosophy of not paying for what you don't use.EmuMath::NoiseTableOptions
template, but some aspects to highlight are:step_mode
istrue
).