Noise

From GiderosMobile
Revision as of 15:28, 13 July 2023 by Hgy29 (talk | contribs) (Text replacement - "<source" to "<syntaxhighlight")

Supported platforms: Platform android.pngPlatform ios.pngPlatform mac.pngPlatform pc.pngPlatform html5.pngPlatform winrt.pngPlatform win32.png
Available since: Gideros 2019.12

Description

FastNoise is an open source noise generation library with a large collection of different noise algorithms.

FastNoise home page and its documentation https://github.com/Auburns/FastNoise/wiki

To add FastNoise plugin to your application you call: <syntaxhighlight lang="lua"> require "FastNoise" </source>

Features

  • Value Noise 2D, 3D
  • Perlin Noise 2D, 3D
  • Simplex Noise 2D, 3D, 4D
  • Cubic Noise 2D, 3D
  • Gradient Perturb 2D, 3D
  • Multiple fractal options for all of the above
  • Cellular (Voronoi) Noise 2D, 3D
  • White Noise 2D, 3D, 4D
  • Texture generation
  • Array generation

Examples

2D noise <syntaxhighlight lang="lua"> require "FastNoise"

local myNoise = Noise.new() -- create FastNoise instance

myNoise:setSeed(456) -- set generation seed myNoise:setFrequency(0.04) -- how coarse the noise output is myNoise:setInterp(Noise.HERMITE) -- set noise interpolation type myNoise:setNoiseType(Noise.SIMPLEX) -- set noise type

for y = 1, 4 do for x = 1, 4 do local v = myNoise:noise(x, y) -- generate 2D noise -- other possible function: -- myNoise:noise(x) -- 1D noise -- myNoise:noise(x, y, z) -- 3D noise -- myNoise:noise2D(x, y) -- true 2D noise -- myNoise:noise3D(x, y, z) -- true 3D noise -- difference between noise2D(x, y) and noise(x, y) is that "noise" function uses 3D noise with -- x = 0, y = 0, z = 0 by default where noise2D uses only 2 values. In other words: noise(x) == noise(x,0,0); -- noise(x, y) == noise(x,y,0); noise(x,y) == noise2D(x,y); noise(x,y,z) == noise3D(x,y,z) print(v) end end </source>

Grayscaled noise image <syntaxhighlight lang="lua"> require "FastNoise"

local n = Noise.new() -- generate 128x128 texture with filtering local tex = n:getTexture(128, 128, true) -- add it to scene stage:addChild(Bitmap.new(tex)) </source>

Colored seamless noise image <syntaxhighlight lang="lua"> require "FastNoise"

local n = Noise.new() n:setFrequency(0.03) n:setFractalOctaves(5) n:setFractalLacunarity(2.5) n:setInterp(Noise.HERMITE) n:setFractalGain(0.6) n:setNoiseType(Noise.SIMPLEX_FRACTAL) -- set a color table used by noise -- first value - height (number), must be in range [0..1] -- second value - color (number) in hex format -- third value - alpha (number), must be in range [0..1] (optional, default - 1) n:setColorLookup{ {0.3, 0x4b3c37, 1}, {0.4, 0xffffff, 1}, {0.45, 0x5c443d, 1}, {0.55, 0x3f6a14, 1}, {0.6, 0x589718, 1}, {0.7, 0x3666c6, 1}, {0.9, 0xd1d080, 1}, {1, 0x3463c3, 1}, } -- generate 128x128 texture local tex = n:getTileTexture(128, 128, false, {wrap=Texture.REPEAT}) -- add it to scene stage:addChild(Pixel.new(tex, 256,256)) </source>

Some 3D examples here.

Plus Particles flow field.

Methods

Noise.new creates a new Noise object

Noise:getCellularDistanceFunction returns distance function type
Noise:getCellularJitter returns cellular jitter value
Noise:getCellularNoiseLookup returns Noise object that was set by setCellularNoiseLookup() function
Noise:getCellularReturnType returns cellular return type
Noise:getFractalGain returns noise gain
Noise:getFractalLacunarity returns noise lacunarity
Noise:getFractalOctaves returns number of fractal octaves
Noise:getFractalType returns noise type
Noise:getFrequency returns noise frequency
Noise:getGradientPerturbAmp returns gradient perturb amplitude.
Noise:getInterp returns interpolation type
Noise:getNoiseType returns noise type
Noise:getSeed returns generator's seed
Noise:getTexture gets noise texture
Noise:getTileTexture gets tileable texture
Noise:gradientPerturb2D returns modified x, y
Noise:gradientPerturb3D returns modified x, y, z
Noise:gradientPerturbFractal2D returns modified x,y
Noise:gradientPerturbFractal3D returns modified x,y,z
Noise:noise gets noise value
Noise:noise2D gets 2D noise value
Noise:noise3D gets 3D noise value
Noise:reset resets noise parameters to default
Noise:setCellularDistance2Indices sets the 2 distance indicies used for distance2 return types
Noise:setCellularDistanceFunction the distance function used to calculate the cell for a given point
Noise:setCellularJitter sets the maximum distance a cellular point can move from its grid position
Noise:setCellularNoiseLookup noise used to calculate a cell value
Noise:setCellularReturnType what value does the cellular function returns from its calculations
Noise:setColorLookup sets color table used by "getTexture" and "getTileTexture"
Noise:setFractalGain the relative strength of noise from each layer when compared to the last
Noise:setFractalLacunarity the frequency multiplier between each octave
Noise:setFractalOctaves the amount of noise layers used to create the fractal
Noise:setFractalType used in all fractal noise generation
Noise:setFrequency affects how coarse the noise output is
Noise:setGradientPerturbAmp sets the maximum perturb distance from original location when using gradientPerturb()
Noise:setInterp changes the interpolation method used to smooth between noise values
Noise:setNoiseType sets the type of noise returned by noise()
Noise:setSeed using different seeds will cause the noise output to change
Noise:simplex4D gets 4D simplex noise value
Noise:whiteNoise2DInt gets integer 2D white noise value
Noise:whiteNoise3DInt gets integer 3D white noise value
Noise:whiteNoise4D gets 4D white noise value
Noise:whiteNoise4DInt gets integer 4D white noise value

Events

Constants

Noise.BILLOW
Noise.CELLULAR
Noise.CELL_VALUE
Noise.CUBIC
Noise.CUBIC_FRACTAL
Noise.DISTANCE
Noise.DISTANCE_2
Noise.DISTANCE_2_ADD
Noise.DISTANCE_2_DIV
Noise.DISTANCE_2_MUL
Noise.DISTANCE_2_SUB
Noise.EUCLIDEAN
Noise.FBM
Noise.HERMITE
Noise.LINEAR
Noise.MANHATTAN
Noise.NATURAL
Noise.NOISE_LOOKUP
Noise.PERLIN
Noise.PERLIN_FRACTAL
Noise.QUINTIC
Noise.RIGID_MULTI
Noise.SIMPLEX
Noise.SIMPLEX_FRACTAL
Noise.VALUE
Noise.VALUE_FRACTAL
Noise.WHITE_NOISE