Difference between revisions of "Noise"

From GiderosMobile
Line 31: Line 31:
 
myNoise:setSeed(456) -- set generation seed
 
myNoise:setSeed(456) -- set generation seed
 
myNoise:setFrequency(0.04) -- how coarse the noise output is
 
myNoise:setFrequency(0.04) -- how coarse the noise output is
myNoise:setInterp(FNoise.HERMITE) -- set noise interpolation type
+
myNoise:setInterp(Noise.HERMITE) -- set noise interpolation type
myNoise:setNoiseType(FNoise.SIMPLEX) -- set noise type
+
myNoise:setNoiseType(Noise.SIMPLEX) -- set noise type
 
   
 
   
 
for y = 1, 4 do  
 
for y = 1, 4 do  
Line 51: Line 51:
 
'''Example 2.'''
 
'''Example 2.'''
 
<source lang="lua">
 
<source lang="lua">
-- genTex(width, height, filtering, options)
+
require "FastNoise"
-- options (table): texture parameters. Includes standart options like wrap, transparentColor etc.
+
 
-- noise (table): noise parameters
+
local n = Noise.new()
-- xoff (number): offset noise on x axis (optional)
 
-- yoff (number): offset noise on y axis (optional)
 
-- zoff (number): offset noise on z axis (optional)
 
-- min (number): noise minimum value (optional, default: -1)
 
-- max (number): noise maximum value (optional, default: 1)
 
-- colors (table): noise color map
 
-- h (number): color height (from 0 to 1)
 
-- color (table): color in r g b a format (by default - white color)
 
 
local colors = {
 
{h = 0.3, color = {52,99,195,255}},
 
{h = 0.4, color = {54,102,198,255}},
 
{h = 0.45, color = {209,208,128,255}},
 
{h = 0.55, color = {88,151,24,255}},
 
{h = 0.6, color = {63,106,20,255}},
 
{h = 0.7, color = {92,68,61,255}},
 
{h = 0.9, color = {75,60,55,255}},
 
{h = 1, color = {255,255,255,255}},
 
}
 
 
 
n:setFrequency(0.03)
 
n:setFrequency(0.03)
 
n:setFractalOctaves(5)
 
n:setFractalOctaves(5)
Line 80: Line 60:
 
n:setFractalGain(0.6)
 
n:setFractalGain(0.6)
 
n:setNoiseType(Noise.SIMPLEX_FRACTAL)
 
n:setNoiseType(Noise.SIMPLEX_FRACTAL)
+
-- create a color table used by noise
local tex = genTex(128, 128, false, {wrap=Texture.REPEAT, noise = {xoff = 0, yoff = 0, zoff = 0, min = -1, max = 1, colors = colors}})
+
-- h: height value in range [0..1]
local btm = Bitmap.new(tex)
+
-- color: in RGBA format
btm:setPosition(10, 10)
 
btm:setScale(4)
 
stage:addChild(btm)
 
 
n:setSeed(6546)
 
n:setFrequency(0.02)
 
n:setFractalOctaves(3)
 
 
tex = genTex(128, 128, false, {wrap=Texture.REPEAT, noise = {xoff = 0, yoff = 0, zoff = 0, min = -1, max = 1, colors = colors}})
 
btm = Bitmap.new()
 
btm:setPosition(128*4 + 20, 10)
 
btm:setScale(4)
 
stage:addChild(btm)
 
</source>
 
 
 
 
 
'''Example 3.''' Save a picture on your phone or on your pc.
 
<source lang="lua">
 
application:setBackgroundColor(0x323232)
 
 
function byteColor(r,g,b,a)
 
r=r or 255
 
g=g or 255
 
b=b or 255
 
a=a or 255
 
return string.format("%s%s%s%s", string.char(r), string.char(g), string.char(b), string.char(a))
 
end
 
 
function map(v, minC, maxC, minD, maxD)
 
local newV = (v - minC) / (maxC - minC) * (maxD - minD) + minD
 
return newV
 
end
 
 
require "FastNoise"
 
 
local n = Noise.new()
 
 
function gen(w, h, filtering, options)
 
local data = ""
 
local t = options.noise or {}
 
t.min = t.min or -1
 
t.max = t.max or 1
 
t.xoff = t.xoff or 0
 
t.zoff = t.zoff or 0
 
t.zoff = t.zoff or 0
 
 
local colors = t.colors or {}
 
for y = 1, h do
 
for x = 1, w do
 
local c = byteColor()
 
 
local v = n:noise(x + t.xoff, y + t.yoff, t.zoff)
 
local maped = map(v, t.min, t.max, 0, 1)
 
 
for _,tc in ipairs(colors) do
 
if (maped <= tc.h) then
 
c = byteColor(unpack(tc.color))
 
break
 
end
 
end
 
 
data = data .. c
 
end
 
end
 
return Texture.new(data,w,h,filtering,options)
 
end
 
 
local colors = {
 
local colors = {
 
{h = 0.3, color = {52,99,195,255}},
 
{h = 0.3, color = {52,99,195,255}},
Line 159: Line 73:
 
{h = 1, color = {255,255,255,255}},
 
{h = 1, color = {255,255,255,255}},
 
}
 
}
+
-- generate 128x128 texture
n:setFrequency(0.03)
+
local tex = n:generateTexture(128, 128, false, {wrap=Texture.REPEAT}, {tileable = true, colors = colors})
n:setFractalOctaves(5)
+
-- add it to scene
n:setFractalLacunarity(2.5)
+
stage:addChild(Bitmap.new(tex))
n:setInterp(Noise.HERMITE)
 
n:setFractalType(Noise.FBM)
 
n:setFractalGain(0.6)
 
n:setNoiseType(Noise.SIMPLEX_FRACTAL)
 
 
local btm = Bitmap.new(gen(128, 128, false, {wrap=Texture.REPEAT, noise = {xoff = 0, yoff = 0, zoff = 0, min = -1, max = 1, colors = colors}}))
 
btm:setPosition(10, 10)
 
btm:setScale(4)
 
stage:addChild(btm)
 
 
--n:setSeed(6546)
 
n:setFrequency(0.02)
 
n:setFractalOctaves(3)
 
 
btm = Bitmap.new(gen(128, 128, false, {wrap=Texture.REPEAT, noise = {xoff = 0, yoff = 0, zoff = 0, min = -1, max = 1, colors = colors}}))
 
btm:setPosition(128*4 + 20, 10)
 
btm:setScale(4)
 
stage:addChild(btm)
 
 
</source>
 
</source>
  

Revision as of 07:10, 14 December 2019


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]

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

Orignal documentation: https://github.com/Auburns/FastNoise/wiki

Examples

Example 1.

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 z = 0, 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


Example 2.

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)
-- create a color table used by noise
-- h: height value in range [0..1]
-- color: in RGBA format
local colors = {
	{h = 0.3, color = {52,99,195,255}},
	{h = 0.4, color = {54,102,198,255}},
	{h = 0.45, color = {209,208,128,255}},
	{h = 0.55, color = {88,151,24,255}},
	{h = 0.6, color = {63,106,20,255}},
	{h = 0.7, color = {92,68,61,255}},
	{h = 0.9, color = {75,60,55,255}},
	{h = 1, color = {255,255,255,255}},
}
-- generate 128x128 texture
local tex = n:generateTexture(128, 128, false, {wrap=Texture.REPEAT}, {tileable = true, colors = colors})
-- add it to scene
stage:addChild(Bitmap.new(tex))

Notes

Methods

FastNoise:reset reset noise parameters to default

Events

Constants