-- epydoc Documentation for eeshlo's Noise module + small typo fix in Noise.c -- BPY_end_python closes .blend file opened by Library module when script doesn't do it by itself.
		
			
				
	
	
		
			301 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			301 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# Blender.Noise submodule
 | 
						|
 | 
						|
"""
 | 
						|
The Blender.Noise submodule.
 | 
						|
 | 
						|
Noise and Turbulence
 | 
						|
====================
 | 
						|
 | 
						|
This module can be used to generate noise of various types.  This can be used
 | 
						|
for terrain generation, to create textures, make animations more 'animated',
 | 
						|
object deformation, etc.  As an example, this code segment when scriptlinked
 | 
						|
to a framechanged event, will make the camera sway randomly about, by changing
 | 
						|
parameters this can look like anything from an earthquake to a very nervous or
 | 
						|
maybe even drunk cameraman... (the camera needs an ipo with at least one Loc &
 | 
						|
Rot key for this to work!):
 | 
						|
 | 
						|
Example::
 | 
						|
  from Blender import Get, Scene, Noise
 | 
						|
  ####################################################
 | 
						|
  # This controls jitter speed
 | 
						|
  sl = 0.025
 | 
						|
  # This controls the amount of position jitter
 | 
						|
  sp = 0.1
 | 
						|
  # This controls the amount of rotation jitter
 | 
						|
  sr = 0.25
 | 
						|
  ####################################################
 | 
						|
 | 
						|
  time = Get('curtime')
 | 
						|
  ob = Scene.GetCurrent().getCurrentCamera()
 | 
						|
  ps = (sl*time, sl*time, sl*time)
 | 
						|
  # To add jitter only when the camera moves, use this next line instead
 | 
						|
  #ps = (sl*ob.LocX, sl*ob.LocY, sl*ob.LocZ)
 | 
						|
  rv = Noise.vTurbulence(ps, 3, 0, Noise.NoiseTypes.NEWPERLIN)
 | 
						|
  ob.dloc = (sp*rv[0], sp*rv[1], sp*rv[2])
 | 
						|
  ob.drot = (sr*rv[0], sr*rv[1], sr*rv[2])
 | 
						|
 | 
						|
@type NoiseTypes: readonly dictionary
 | 
						|
@var NoiseTypes: The available noise types.
 | 
						|
    - BLENDER
 | 
						|
    - STDPERLIN
 | 
						|
    - NEWPERLIN
 | 
						|
    - VORONOI_F1
 | 
						|
    - VORONOI_F2
 | 
						|
    - VORONOI_F3
 | 
						|
    - VORONOI_F4
 | 
						|
    - VORONOI_F2F1
 | 
						|
    - VORONOI_CRACKLE
 | 
						|
    - CELLNOISE
 | 
						|
 | 
						|
@type DistanceMetrics: readonly dictionary
 | 
						|
@var DistanceMetrics: The available distance metrics values for Voronoi.
 | 
						|
    - DISTANCE
 | 
						|
    - DISTANCE_SQUARED
 | 
						|
    - MANHATTAN
 | 
						|
    - CHEBYCHEV
 | 
						|
    - MINKOVSKY_HALF
 | 
						|
    - MINKOVSKY_FOUR
 | 
						|
    - MINKOVISKY
 | 
						|
"""
 | 
						|
 | 
						|
NoiseTypes = {'BLENDER':0, 'STDPERLIN':1}
 | 
						|
 | 
						|
DistanceMetrics = {'DISTANCE':0}
 | 
						|
 | 
						|
def random ():
 | 
						|
  """
 | 
						|
  Returns a random floating point number."
 | 
						|
  @rtype: float
 | 
						|
  @return: a random number in [0, 1).
 | 
						|
  """
 | 
						|
 | 
						|
def randuvec ():
 | 
						|
  """
 | 
						|
  Returns a random unit vector.
 | 
						|
  @rtype: 3-float list
 | 
						|
  @return: a list of three floats.
 | 
						|
  """
 | 
						|
 | 
						|
def setRandomSeed (seed):
 | 
						|
  """
 | 
						|
  Initializes the random number generator.
 | 
						|
  @type seed: int
 | 
						|
  @param seed: the seed for the random number generator.  If seed = 0, the
 | 
						|
      current time will be used as seed, instead.
 | 
						|
  """
 | 
						|
 | 
						|
def noise (xyz, type = NoiseTypes['STDPERLIN']):
 | 
						|
  """
 | 
						|
  Returns general noise of the optional specified type.
 | 
						|
  @type xyz: tuple of 3 floats
 | 
						|
  @param xyz: (x,y,z) float values.
 | 
						|
  @type type: int
 | 
						|
  @param type: the type of noise to return.  See L{NoiseTypes}.
 | 
						|
  @rtype: float
 | 
						|
  @return: the generated noise value.
 | 
						|
  """
 | 
						|
 | 
						|
def vNoise (xyz, type = NoiseTypes['STDPERLIN']):
 | 
						|
  """
 | 
						|
  Returns noise vector of the optional specified type.
 | 
						|
  @type xyz: tuple of 3 floats
 | 
						|
  @param xyz: (x,y,z) float values.
 | 
						|
  @type type: int
 | 
						|
  @param type: the type of noise to return.  See L{NoiseTypes}.
 | 
						|
  @rtype: 3-float list 
 | 
						|
  @return: the generated noise vector.
 | 
						|
  """
 | 
						|
 | 
						|
def turbulence (xyz, octaves, hard, basis = NoiseTypes['STDPERLIN'],
 | 
						|
    ampscale = 0.5, freqscale = 2.0):
 | 
						|
  """
 | 
						|
  Returns general turbulence value using the optional specified noise 'basis'
 | 
						|
  function.
 | 
						|
  @type xyz: 3-float tuple
 | 
						|
  @param xyz: (x,y,z) float values.
 | 
						|
  @type octaves: int
 | 
						|
  @param octaves: number of noise values added.
 | 
						|
  @type hard: bool
 | 
						|
  @param hard: noise hardness: 0 - soft noise; 1 - hard noise.  (Returned value
 | 
						|
      is always positive.)
 | 
						|
  @type basis: int
 | 
						|
  @param basis: type of noise used for turbulence, see L{NoiseTypes}.
 | 
						|
  @type ampscale: float
 | 
						|
  @param ampscale: amplitude scale value of the noise frequencies added.
 | 
						|
  @type freqscale: float
 | 
						|
  @param freqscale: frequency scale factor.
 | 
						|
  @rtype: float
 | 
						|
  @return: the generated turbulence value.
 | 
						|
  """
 | 
						|
 | 
						|
def vTurbulence (xyz, octaves, hard, basis = NoiseTypes['STDPERLIN'],
 | 
						|
    ampscale = 0.5, freqscale = 2.0):
 | 
						|
  """
 | 
						|
  Returns general turbulence vector using the optional specified noise basis
 | 
						|
function.
 | 
						|
  @type xyz: 3-float tuple
 | 
						|
  @param xyz: (x,y,z) float values.
 | 
						|
  @type octaves: int
 | 
						|
  @param octaves: number of noise values added.
 | 
						|
  @type hard: bool
 | 
						|
  @param hard: noise hardness: 0 - soft noise; 1 - hard noise.  (Returned
 | 
						|
      vector is always positive.)
 | 
						|
  @type basis: int
 | 
						|
  @param basis: type of noise used for turbulence, see L{NoiseTypes}.
 | 
						|
  @type ampscale: float
 | 
						|
  @param ampscale: amplitude scale value of the noise frequencies added.
 | 
						|
  @type freqscale: float
 | 
						|
  @param freqscale: frequency scale factor.
 | 
						|
  @rtype: 3-float list
 | 
						|
  @return: the generated turbulence vector.
 | 
						|
  """
 | 
						|
 | 
						|
def fBm (xyz, H, lacunarity, octaves, basis = NoiseTypes['STDPERLIN']):
 | 
						|
  """
 | 
						|
  Returns Fractal Brownian Motion noise value (fBm).
 | 
						|
  @type xyz: 3-float tuple
 | 
						|
  @param xyz: (x,y,z) float values.
 | 
						|
  @type H: float
 | 
						|
  @param H: the fractal increment parameter.
 | 
						|
  @type lacunarity: float
 | 
						|
  @param lacunarity: the gap between successive frequencies.
 | 
						|
  @type octaves: float
 | 
						|
  @param octaves: the number of frequencies in the fBm.
 | 
						|
  @type basis: int
 | 
						|
  @param basis: type of noise used for the turbulence, see L{NoiseTypes}.
 | 
						|
  @rtype: float
 | 
						|
  @return: the generated noise value.
 | 
						|
  """
 | 
						|
 | 
						|
def multiFractal (xyz, H, lacunarity, octaves, basis = NoiseTypes['STDPERLIN']):
 | 
						|
  """
 | 
						|
  Returns Multifractal noise value.
 | 
						|
  @type xyz: 3-float tuple
 | 
						|
  @param xyz: (x,y,z) float values.
 | 
						|
  @type H: float
 | 
						|
  @param H: the highest fractal dimension.
 | 
						|
  @type lacunarity: float
 | 
						|
  @param lacunarity: the gap between successive frequencies.
 | 
						|
  @type octaves: float
 | 
						|
  @param octaves: the number of frequencies in the fBm.
 | 
						|
  @type basis: int
 | 
						|
  @param basis: type of noise used for the turbulence, see L{NoiseTypes}.
 | 
						|
  @rtype: float
 | 
						|
  @return: the generated noise value.
 | 
						|
  """
 | 
						|
 | 
						|
def vlNoise (xyz, distortion, type1 = NoiseTypes['STDPERLIN'],
 | 
						|
    type2 = NoiseTypes['STDPERLIN']):
 | 
						|
  """
 | 
						|
  Returns Variable Lacunarity Noise value, a distorted variety of noise.
 | 
						|
  @type xyz: 3-float tuple
 | 
						|
  @param xyz: (x,y,z) float values.
 | 
						|
  @type distortion: float
 | 
						|
  @param distortion: the amount of distortion.
 | 
						|
  @type type1: int
 | 
						|
  @type type2: int
 | 
						|
  @param type1: sets the noise type to distort.
 | 
						|
  @param type2: sets the noise type used for the distortion.
 | 
						|
  @rtype: float
 | 
						|
  @return: the generated noise value.
 | 
						|
  """
 | 
						|
 | 
						|
def heteroTerrain (xyz, H, lacunarity, octaves, offset,
 | 
						|
    basis = NoiseTypes['STDPERLIN']):
 | 
						|
  """
 | 
						|
  Returns Heterogeneous Terrain value.
 | 
						|
  @type xyz: 3-float tuple
 | 
						|
  @param xyz: (x,y,z) float values.
 | 
						|
  @type H: float
 | 
						|
  @param H: fractal dimension of the roughest areas.
 | 
						|
  @type lacunarity: float
 | 
						|
  @param lacunarity: gap between successive frequencies.
 | 
						|
  @type octaves: float
 | 
						|
  @param octaves: number of frequencies in the fBm.
 | 
						|
  @type offset: float
 | 
						|
  @param offset: it raises the terrain from 'sea level'.
 | 
						|
  @type basis: int
 | 
						|
  @param basis: noise basis determines the type of noise used for the
 | 
						|
      turbulence, see L{NoiseTypes}.
 | 
						|
  @rtype: float
 | 
						|
  @return: the generated value.
 | 
						|
  """
 | 
						|
 | 
						|
def hybridMFractal (xyz, H, lacunarity, octaves, offset, gain,
 | 
						|
    basis = NoiseTypes['STDPERLIN']):
 | 
						|
  """
 | 
						|
  Returns Hybrid Multifractal value.
 | 
						|
  @type xyz: 3-float tuple
 | 
						|
  @param xyz: (x,y,z) float values.
 | 
						|
  @type H: float
 | 
						|
  @param H: fractal dimension of the roughest areas.
 | 
						|
  @type lacunarity: float
 | 
						|
  @param lacunarity: gap between successive frequencies.
 | 
						|
  @type octaves: float
 | 
						|
  @param octaves: number of frequencies in the fBm.
 | 
						|
  @type offset: float
 | 
						|
  @param offset: it raises the terrain from 'sea level'.
 | 
						|
  @type gain: float
 | 
						|
  @param gain: scale factor.
 | 
						|
  @type basis: int
 | 
						|
  @param basis: noise basis determines the type of noise used for the
 | 
						|
      turbulence, see L{NoiseTypes}.
 | 
						|
  @rtype: float
 | 
						|
  @return: the generated value.
 | 
						|
  """
 | 
						|
 | 
						|
def ridgedMFractal (xyz, H, lacunarity, octaves, offset, gain,
 | 
						|
    basis = NoiseTypes['STDPERLIN']):
 | 
						|
  """
 | 
						|
  Returns Ridged Multifractal value.
 | 
						|
  @type xyz: 3-float tuple
 | 
						|
  @param xyz: (x,y,z) float values.
 | 
						|
  @type H: float
 | 
						|
  @param H: fractal dimension of the roughest areas.
 | 
						|
  @type lacunarity: float
 | 
						|
  @param lacunarity: gap between successive frequencies.
 | 
						|
  @type octaves: float
 | 
						|
  @param octaves: number of frequencies in the fBm.
 | 
						|
  @type offset: float
 | 
						|
  @param offset: it raises the terrain from 'sea level'.
 | 
						|
  @type gain: float
 | 
						|
  @param gain: scale factor.
 | 
						|
  @type basis: int
 | 
						|
  @param basis: noise basis determines the type of noise used for the
 | 
						|
      turbulence, see L{NoiseTypes}.
 | 
						|
  @rtype: float
 | 
						|
  @return: the generated value.
 | 
						|
  """
 | 
						|
 | 
						|
def voronoi(xyz, distance_metric = DistanceMetrics['DISTANCE'], exponent = 2.5):
 | 
						|
  """
 | 
						|
  Returns Voronoi diagrams-related data.
 | 
						|
  @type xyz: 3-float tuple
 | 
						|
  @param xyz: (x,y,z) float values.
 | 
						|
  @type distance_metric: int
 | 
						|
  @param distance_metric: see L{DistanceMetrics}
 | 
						|
  @type exponent: float
 | 
						|
  @param exponent: only used with MINKOVSKY, default is 2.5.
 | 
						|
  @rtype: list
 | 
						|
  @return: a list containing a list of distances in order of closest feature,
 | 
						|
  and a list containing the positions of the four closest features.
 | 
						|
  """
 | 
						|
 | 
						|
def cellNoise (xyz):
 | 
						|
  """
 | 
						|
  Returns cellnoise.
 | 
						|
  @type xyz: 3-float tuple
 | 
						|
  @param xyz: (x,y,z) float values.
 | 
						|
  @rtype: float
 | 
						|
  @return: the generated value.
 | 
						|
  """
 | 
						|
 | 
						|
def cellNoiseV (xyz):
 | 
						|
  """
 | 
						|
  Returns cellnoise vector/point/color.
 | 
						|
  @type xyz: 3-float tuple
 | 
						|
  @param xyz: (x,y,z) float values.
 | 
						|
  @rtype: 3-float list
 | 
						|
  @return: the generated vector.
 | 
						|
  """
 |