Skip to content
Snippets Groups Projects
Commit edde9f26 authored by Tamito Kajiyama's avatar Tamito Kajiyama
Browse files

Added an 'angle' parameter to the Perlin Noise 1D and 2D geometry modifiers

to specify a displacement direction in degrees.
parent 1c153b01
No related branches found
No related tags found
No related merge requests found
...@@ -419,6 +419,46 @@ class SinusDisplacementShader(StrokeShader): ...@@ -419,6 +419,46 @@ class SinusDisplacementShader(StrokeShader):
n = n * self._amplitude * math.cos(distance / self._wavelength * 2 * math.pi + self._phase) n = n * self._amplitude * math.cos(distance / self._wavelength * 2 * math.pi + self._phase)
v.setPoint(p + n) v.setPoint(p + n)
class PerlinNoise1DShader(StrokeShader):
def __init__(self, freq = 10, amp = 10, oct = 4, angle = 45, seed = -1):
StrokeShader.__init__(self)
self.__noise = Noise(seed)
self.__freq = freq
self.__amp = amp
self.__oct = oct
theta = pi * angle / 180.0
self.__dir = Vector([cos(theta), sin(theta)])
def getName(self):
return "PerlinNoise1DShader"
def shade(self, stroke):
it = stroke.strokeVerticesBegin()
while not it.isEnd():
v = it.getObject()
i = v.getProjectedX() + v.getProjectedY()
nres = self.__noise.turbulence1(i, self.__freq, self.__amp, self.__oct)
v.setPoint(v.getPoint() + nres * self.__dir)
it.increment()
class PerlinNoise2DShader(StrokeShader):
def __init__(self, freq = 10, amp = 10, oct = 4, angle = 45, seed = -1):
StrokeShader.__init__(self)
self.__noise = Noise(seed)
self.__freq = freq
self.__amp = amp
self.__oct = oct
theta = pi * angle / 180.0
self.__dir = Vector([cos(theta), sin(theta)])
def getName(self):
return "PerlinNoise2DShader"
def shade(self, stroke):
it = stroke.strokeVerticesBegin()
while not it.isEnd():
v = it.getObject()
vec = Vector([v.getProjectedX(), v.getProjectedY()])
nres = self.__noise.turbulence2(vec, self.__freq, self.__amp, self.__oct)
v.setPoint(v.getPoint() + nres * self.__dir)
it.increment()
# Predicates and helper functions # Predicates and helper functions
class QuantitativeInvisibilityRangeUP1D(UnaryPredicate1D): class QuantitativeInvisibilityRangeUP1D(UnaryPredicate1D):
...@@ -836,11 +876,11 @@ def process(layer_name, lineset_name): ...@@ -836,11 +876,11 @@ def process(layer_name, lineset_name):
shaders_list.append(SpatialNoiseShader( shaders_list.append(SpatialNoiseShader(
m.amplitude, m.scale, m.octaves, m.smooth, m.pure_random)) m.amplitude, m.scale, m.octaves, m.smooth, m.pure_random))
elif m.type == "PERLIN_NOISE_1D": elif m.type == "PERLIN_NOISE_1D":
shaders_list.append(pyPerlinNoise1DShader( shaders_list.append(PerlinNoise1DShader(
m.frequency, m.amplitude, m.octaves, _seed.get(m.seed))) m.frequency, m.amplitude, m.octaves, m.angle, _seed.get(m.seed)))
elif m.type == "PERLIN_NOISE_2D": elif m.type == "PERLIN_NOISE_2D":
shaders_list.append(pyPerlinNoise2DShader( shaders_list.append(PerlinNoise2DShader(
m.frequency, m.amplitude, m.octaves, _seed.get(m.seed))) m.frequency, m.amplitude, m.octaves, m.angle, _seed.get(m.seed)))
elif m.type == "BACKBONE_STRETCHER": elif m.type == "BACKBONE_STRETCHER":
shaders_list.append(BackboneStretcherShader( shaders_list.append(BackboneStretcherShader(
m.amount)) m.amount))
......
...@@ -477,12 +477,14 @@ class RENDER_PT_freestyle_linestyle(RenderButtonsPanel, Panel): ...@@ -477,12 +477,14 @@ class RENDER_PT_freestyle_linestyle(RenderButtonsPanel, Panel):
box.prop(modifier, "frequency") box.prop(modifier, "frequency")
box.prop(modifier, "amplitude") box.prop(modifier, "amplitude")
box.prop(modifier, "octaves") box.prop(modifier, "octaves")
box.prop(modifier, "angle")
box.prop(modifier, "seed") box.prop(modifier, "seed")
elif modifier.type == "PERLIN_NOISE_2D": elif modifier.type == "PERLIN_NOISE_2D":
box.prop(modifier, "frequency") box.prop(modifier, "frequency")
box.prop(modifier, "amplitude") box.prop(modifier, "amplitude")
box.prop(modifier, "octaves") box.prop(modifier, "octaves")
box.prop(modifier, "angle")
box.prop(modifier, "seed") box.prop(modifier, "seed")
elif modifier.type == "BACKBONE_STRETCHER": elif modifier.type == "BACKBONE_STRETCHER":
......
...@@ -403,11 +403,13 @@ int FRS_add_linestyle_geometry_modifier(FreestyleLineStyle *linestyle, int type) ...@@ -403,11 +403,13 @@ int FRS_add_linestyle_geometry_modifier(FreestyleLineStyle *linestyle, int type)
((LineStyleGeometryModifier_PerlinNoise1D *)m)->frequency = 10.0; ((LineStyleGeometryModifier_PerlinNoise1D *)m)->frequency = 10.0;
((LineStyleGeometryModifier_PerlinNoise1D *)m)->amplitude = 10.0; ((LineStyleGeometryModifier_PerlinNoise1D *)m)->amplitude = 10.0;
((LineStyleGeometryModifier_PerlinNoise1D *)m)->octaves = 4; ((LineStyleGeometryModifier_PerlinNoise1D *)m)->octaves = 4;
((LineStyleGeometryModifier_PerlinNoise1D *)m)->angle = 45.0;
break; break;
case LS_MODIFIER_PERLIN_NOISE_2D: case LS_MODIFIER_PERLIN_NOISE_2D:
((LineStyleGeometryModifier_PerlinNoise2D *)m)->frequency = 10.0; ((LineStyleGeometryModifier_PerlinNoise2D *)m)->frequency = 10.0;
((LineStyleGeometryModifier_PerlinNoise2D *)m)->amplitude = 10.0; ((LineStyleGeometryModifier_PerlinNoise2D *)m)->amplitude = 10.0;
((LineStyleGeometryModifier_PerlinNoise2D *)m)->octaves = 4; ((LineStyleGeometryModifier_PerlinNoise2D *)m)->octaves = 4;
((LineStyleGeometryModifier_PerlinNoise2D *)m)->angle = 45.0;
break; break;
case LS_MODIFIER_BACKBONE_STRETCHER: case LS_MODIFIER_BACKBONE_STRETCHER:
((LineStyleGeometryModifier_BackboneStretcher *)m)->amount = 10.0; ((LineStyleGeometryModifier_BackboneStretcher *)m)->amount = 10.0;
......
...@@ -261,18 +261,20 @@ typedef struct LineStyleGeometryModifier_SpatialNoise { ...@@ -261,18 +261,20 @@ typedef struct LineStyleGeometryModifier_SpatialNoise {
typedef struct LineStyleGeometryModifier_PerlinNoise1D { typedef struct LineStyleGeometryModifier_PerlinNoise1D {
struct LineStyleModifier modifier; struct LineStyleModifier modifier;
float frequency, amplitude; float frequency, amplitude, angle;
unsigned int octaves; unsigned int octaves;
int seed; int seed;
int pad1;
} LineStyleGeometryModifier_PerlinNoise1D; } LineStyleGeometryModifier_PerlinNoise1D;
typedef struct LineStyleGeometryModifier_PerlinNoise2D { typedef struct LineStyleGeometryModifier_PerlinNoise2D {
struct LineStyleModifier modifier; struct LineStyleModifier modifier;
float frequency, amplitude; float frequency, amplitude, angle;
unsigned int octaves; unsigned int octaves;
int seed; int seed;
int pad1;
} LineStyleGeometryModifier_PerlinNoise2D; } LineStyleGeometryModifier_PerlinNoise2D;
......
...@@ -578,6 +578,11 @@ static void rna_def_linestyle_modifiers(BlenderRNA *brna) ...@@ -578,6 +578,11 @@ static void rna_def_linestyle_modifiers(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Octaves", "Number of octaves (i.e., the amount of detail of the Perlin noise)."); RNA_def_property_ui_text(prop, "Octaves", "Number of octaves (i.e., the amount of detail of the Perlin noise).");
RNA_def_property_update(prop, NC_SCENE, NULL); RNA_def_property_update(prop, NC_SCENE, NULL);
prop= RNA_def_property(srna, "angle", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "angle");
RNA_def_property_ui_text(prop, "Angle", "Displacement direction in degrees.");
RNA_def_property_update(prop, NC_SCENE, NULL);
prop= RNA_def_property(srna, "seed", PROP_INT, PROP_NONE); prop= RNA_def_property(srna, "seed", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "seed"); RNA_def_property_int_sdna(prop, NULL, "seed");
RNA_def_property_ui_text(prop, "Seed", "Seed for random number generation. If negative, time is used as a seed instead."); RNA_def_property_ui_text(prop, "Seed", "Seed for random number generation. If negative, time is used as a seed instead.");
...@@ -602,6 +607,11 @@ static void rna_def_linestyle_modifiers(BlenderRNA *brna) ...@@ -602,6 +607,11 @@ static void rna_def_linestyle_modifiers(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Octaves", "Number of octaves (i.e., the amount of detail of the Perlin noise)."); RNA_def_property_ui_text(prop, "Octaves", "Number of octaves (i.e., the amount of detail of the Perlin noise).");
RNA_def_property_update(prop, NC_SCENE, NULL); RNA_def_property_update(prop, NC_SCENE, NULL);
prop= RNA_def_property(srna, "angle", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "angle");
RNA_def_property_ui_text(prop, "Angle", "Displacement direction in degrees.");
RNA_def_property_update(prop, NC_SCENE, NULL);
prop= RNA_def_property(srna, "seed", PROP_INT, PROP_NONE); prop= RNA_def_property(srna, "seed", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "seed"); RNA_def_property_int_sdna(prop, NULL, "seed");
RNA_def_property_ui_text(prop, "Seed", "Seed for random number generation. If negative, time is used as a seed instead."); RNA_def_property_ui_text(prop, "Seed", "Seed for random number generation. If negative, time is used as a seed instead.");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment