Skip to content

colormotor/rumore

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Table of Contents

  1. Vectorized value & gradient noise with NumPy
    1. Install with PIP
    2. Install locally
    3. Examples

Vectorized value & gradient noise with NumPy

Rumore is a lightweight Python library for procedural noise. It provides value noise and gradient noise in 1D/2D/3D plus octave summation of these (fractal Brownian motion, fBm).

The library does not implement Ken Perlin’s original algorithm directly, but its gradient noise produces visually similar results.

Install with PIP

pip install rumore

Install locally

Clone the repo, navigate to the directory and from there

pip install -e .

Examples

Import necessary stuff

import matplotlib.pyplot as plt
import numpy as np
import rumore

rumore.set_defaults()

Generate some 1d gradient noise with different number of octaves

x = np.linspace(-10, 10, 200)
plt.figure(figsize=(5,4))
for i in range(1, 8):
    plt.plot(x, rumore.grad_noise(x, octaves=i))
plt.show()

img

Perturb points along a circle with 2d noise

t = np.linspace(0, np.pi*2, 200)
x = np.cos(t)
y = np.sin(t)
r = rumore.grad_noise(x, y)*0.5+0.5
plt.figure(figsize=(4,4))
plt.plot(x*r, y*r)
plt.show()

img

Generate a grid of 2d noise value (a grayscale image)

x = np.linspace(0, 5, 300)
y = np.linspace(0, 3, 100)
img = rumore.noise_grid(x, y)
plt.imshow(img)
plt.show()

img

Set noise properties. Here we set the octave_map property, defining a function that is applied to the noise of each octave. Note that in a notebook these states are persistent, which can give unexpected results. You can reset everything by using rumore.set_defaults().

rumore.cfg.lacunarity = 2.0
rumore.cfg.falloff = 0.5 # falloff for each octave (persistence)
rumore.cfg.set_degree(5) # Interpolation degree (3 or 5)
rumore.cfg.shift = 0 #120.321 # Shift between octaves
rumore.cfg.octave_map = lambda x: np.sin(x*np.pi*4)

x = np.linspace(0, 5, 300)
y = np.linspace(0, 3, 100)
img = rumore.noise_grid(x, y)
plt.imshow(img, cmap='gray')
plt.show()

img

About

A numpy-based noise generator

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages