Skip to content

Commit

Permalink
Add SimplexNoise and NoiseTexture as new resources
Browse files Browse the repository at this point in the history
SimplexNoise can be used to generate parameterized fractal noise based on Open Simplex.

NoiseTexture uses SimplexNoise to generate noise textures for using in
shaders/visual effects.
  • Loading branch information
JFonS committed Sep 14, 2018
1 parent 4d228e6 commit f12a1b8
Show file tree
Hide file tree
Showing 16 changed files with 3,450 additions and 2 deletions.
4 changes: 4 additions & 0 deletions modules/opensimplex/SCsub
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/usr/bin/env python

Import('env')
env.add_source_files(env.modules_sources, ["register_types.cpp", "simplex_noise.cpp", "noise_texture.cpp", "#thirdparty/misc/open-simplex-noise.c"])
14 changes: 14 additions & 0 deletions modules/opensimplex/config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
def can_build(env, platform):
return True

def configure(env):
pass

def get_doc_classes():
return [
"NoiseTexture",
"SimplexNoise"
]

def get_doc_path():
return "doc_classes"
50 changes: 50 additions & 0 deletions modules/opensimplex/doc_classes/NoiseTexture.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="NoiseTexture" inherits="Texture" category="Core" version="3.1">
<brief_description>
[SimplexNoise] filled texture.
</brief_description>
<description>
Uses a [SimplexNoise] to fill the texture data. You can specify the texture size but keep in mind that larger textures will take longer to generate and seamless noise only works with square sized textures.
NoiseTexture can also generate normalmap textures.
</description>
<tutorials>
</tutorials>
<demos>
</demos>
<methods>
<method name="set_height">
<return type="void">
</return>
<argument index="0" name="height" type="int">
</argument>
<description>
Set texture height.
</description>
</method>
<method name="set_width">
<return type="void">
</return>
<argument index="0" name="width" type="int">
</argument>
<description>
Set texture width.
</description>
</method>
</methods>
<members>
<member name="as_normalmap" type="bool" setter="set_as_normalmap" getter="is_normalmap">
If true, the resulting texture contains a normal map created from the original noise interpreted as a bump map.
</member>
<member name="noise" type="SimplexNoise" setter="set_noise" getter="get_noise">
The [SimplexNoise] instance used to generate the noise.
</member>
<member name="seamless" type="bool" setter="set_seamless" getter="get_seamless">
Whether the texture can be tiled without visible seams or not. Seamless textures take longer to generate.
</member>
<member name="size" type="Vector2" setter="set_size" getter="get_size">
Size of the generated texture.
</member>
</members>
<constants>
</constants>
</class>
132 changes: 132 additions & 0 deletions modules/opensimplex/doc_classes/SimplexNoise.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="SimplexNoise" inherits="Resource" category="Core" version="3.1">
<brief_description>
Noise generator based on Open Simplex.
</brief_description>
<description>
This resource allows you to configure and sample a fractal noise space.

Here is a brief usage example that configures a SimplexNoise and gets samples at various positions and dimensions:
[codeblock]
var noise = SimplexNoise.new()

# Configure
noise.seed = randi()
noise.octaves = 4
noise.period = 20.0
noise.persistance = 0.8

#Sample
print("Values:")
print(noise.get_noise_2d(1.0,1.0))
print(noise.get_noise_3d(0.5,3.0,15.0))
print(noise.get_noise_3d(0.5,1.9,4.7,0.0))
[/codeblock]

</description>
<tutorials>
</tutorials>
<demos>
</demos>
<methods>
<method name="get_image">
<return type="Image">
</return>
<argument index="0" name="width" type="int">
</argument>
<argument index="1" name="height" type="int">
</argument>
<description>
Generate a noise image with the requested [code]width[/code] and [code]height[/code], based on the current noise parameters.
</description>
</method>
<method name="get_noise_2d">
<return type="float">
</return>
<argument index="0" name="x" type="float">
</argument>
<argument index="1" name="y" type="float">
</argument>
<description>
2D noise value [-1,1] at position [code]x[/code],[code]y[/code].
</description>
</method>
<method name="get_noise_2dv">
<return type="float">
</return>
<argument index="0" name="pos" type="Vector2">
</argument>
<description>
2D noise value [-1,1] at position [code]pos.x[/code],[code]pos.y[/code].
</description>
</method>
<method name="get_noise_3d">
<return type="float">
</return>
<argument index="0" name="x" type="float">
</argument>
<argument index="1" name="y" type="float">
</argument>
<argument index="2" name="z" type="float">
</argument>
<description>
3D noise value [-1,1] at position [code]x[/code],[code]y[/code],[code]z[/code].
</description>
</method>
<method name="get_noise_3dv">
<return type="float">
</return>
<argument index="0" name="pos" type="Vector3">
</argument>
<description>
3D noise value [-1,1] at position [code]pos.x[/code],[code]pos.y[/code],[code]pos.z[/code].
</description>
</method>
<method name="get_noise_4d">
<return type="float">
</return>
<argument index="0" name="x" type="float">
</argument>
<argument index="1" name="y" type="float">
</argument>
<argument index="2" name="z" type="float">
</argument>
<argument index="3" name="w" type="float">
</argument>
<description>
4D noise value [-1,1] at position [code]x[/code],[code]y[/code],[code]z[/code],[code]w[/code].
</description>
</method>
<method name="get_seamless_image">
<return type="Image">
</return>
<argument index="0" name="size" type="int">
</argument>
<description>
Generate a tileable noise image, based on the current noise parameters.
Generated seamless images are always square ([code]size[/code]x[code]size[/code]).
</description>
</method>
</methods>
<members>
<member name="lacunarity" type="float" setter="set_lacunarity" getter="get_lacunarity">
Difference in period between [member octaves].
</member>
<member name="octaves" type="int" setter="set_octaves" getter="get_octaves">
Number of Simplex Noise layers that are sampled to get the fractal noise.
</member>
<member name="period" type="float" setter="set_period" getter="get_period">
Period of the base octave.
A lower period results in a higher frequancy noise (more value changes across the same distance).
</member>
<member name="persistance" type="float" setter="set_persistance" getter="get_persistance">
Contribuiton factor of the different octaves.
A [code]persistance[/code] value of 1 means all the octaves have the same contribution, a value of 0.5 means each octave contributes half as much as the previous one.
</member>
<member name="seed" type="int" setter="set_seed" getter="get_seed">
Seed used to generate random values, different seeds will generate different noise maps.
</member>
</members>
<constants>
</constants>
</class>
Loading

0 comments on commit f12a1b8

Please sign in to comment.