diff options
-rw-r--r-- | release/scripts/freestyle/style_modules/parameter_editor.py | 48 | ||||
-rw-r--r-- | release/scripts/startup/bl_ui/properties_render.py | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/linestyle.c | 2 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_linestyle_types.h | 6 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_linestyle.c | 10 |
5 files changed, 62 insertions, 6 deletions
diff --git a/release/scripts/freestyle/style_modules/parameter_editor.py b/release/scripts/freestyle/style_modules/parameter_editor.py index 1525f411cf7..7d602d4e79e 100644 --- a/release/scripts/freestyle/style_modules/parameter_editor.py +++ b/release/scripts/freestyle/style_modules/parameter_editor.py @@ -419,6 +419,46 @@ class SinusDisplacementShader(StrokeShader): n = n * self._amplitude * math.cos(distance / self._wavelength * 2 * math.pi + self._phase) 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 class QuantitativeInvisibilityRangeUP1D(UnaryPredicate1D): @@ -836,11 +876,11 @@ def process(layer_name, lineset_name): shaders_list.append(SpatialNoiseShader( m.amplitude, m.scale, m.octaves, m.smooth, m.pure_random)) elif m.type == "PERLIN_NOISE_1D": - shaders_list.append(pyPerlinNoise1DShader( - m.frequency, m.amplitude, m.octaves, _seed.get(m.seed))) + shaders_list.append(PerlinNoise1DShader( + m.frequency, m.amplitude, m.octaves, m.angle, _seed.get(m.seed))) elif m.type == "PERLIN_NOISE_2D": - shaders_list.append(pyPerlinNoise2DShader( - m.frequency, m.amplitude, m.octaves, _seed.get(m.seed))) + shaders_list.append(PerlinNoise2DShader( + m.frequency, m.amplitude, m.octaves, m.angle, _seed.get(m.seed))) elif m.type == "BACKBONE_STRETCHER": shaders_list.append(BackboneStretcherShader( m.amount)) diff --git a/release/scripts/startup/bl_ui/properties_render.py b/release/scripts/startup/bl_ui/properties_render.py index 1ad1fb5f283..12f3dadbc40 100644 --- a/release/scripts/startup/bl_ui/properties_render.py +++ b/release/scripts/startup/bl_ui/properties_render.py @@ -477,12 +477,14 @@ class RENDER_PT_freestyle_linestyle(RenderButtonsPanel, Panel): box.prop(modifier, "frequency") box.prop(modifier, "amplitude") box.prop(modifier, "octaves") + box.prop(modifier, "angle") box.prop(modifier, "seed") elif modifier.type == "PERLIN_NOISE_2D": box.prop(modifier, "frequency") box.prop(modifier, "amplitude") box.prop(modifier, "octaves") + box.prop(modifier, "angle") box.prop(modifier, "seed") elif modifier.type == "BACKBONE_STRETCHER": diff --git a/source/blender/blenkernel/intern/linestyle.c b/source/blender/blenkernel/intern/linestyle.c index 90b35e1f220..f36bdaf487f 100644 --- a/source/blender/blenkernel/intern/linestyle.c +++ b/source/blender/blenkernel/intern/linestyle.c @@ -403,11 +403,13 @@ int FRS_add_linestyle_geometry_modifier(FreestyleLineStyle *linestyle, int type) ((LineStyleGeometryModifier_PerlinNoise1D *)m)->frequency = 10.0; ((LineStyleGeometryModifier_PerlinNoise1D *)m)->amplitude = 10.0; ((LineStyleGeometryModifier_PerlinNoise1D *)m)->octaves = 4; + ((LineStyleGeometryModifier_PerlinNoise1D *)m)->angle = 45.0; break; case LS_MODIFIER_PERLIN_NOISE_2D: ((LineStyleGeometryModifier_PerlinNoise2D *)m)->frequency = 10.0; ((LineStyleGeometryModifier_PerlinNoise2D *)m)->amplitude = 10.0; ((LineStyleGeometryModifier_PerlinNoise2D *)m)->octaves = 4; + ((LineStyleGeometryModifier_PerlinNoise2D *)m)->angle = 45.0; break; case LS_MODIFIER_BACKBONE_STRETCHER: ((LineStyleGeometryModifier_BackboneStretcher *)m)->amount = 10.0; diff --git a/source/blender/makesdna/DNA_linestyle_types.h b/source/blender/makesdna/DNA_linestyle_types.h index 936f01e0ab2..94d2d4bb723 100644 --- a/source/blender/makesdna/DNA_linestyle_types.h +++ b/source/blender/makesdna/DNA_linestyle_types.h @@ -261,18 +261,20 @@ typedef struct LineStyleGeometryModifier_SpatialNoise { typedef struct LineStyleGeometryModifier_PerlinNoise1D { struct LineStyleModifier modifier; - float frequency, amplitude; + float frequency, amplitude, angle; unsigned int octaves; int seed; + int pad1; } LineStyleGeometryModifier_PerlinNoise1D; typedef struct LineStyleGeometryModifier_PerlinNoise2D { struct LineStyleModifier modifier; - float frequency, amplitude; + float frequency, amplitude, angle; unsigned int octaves; int seed; + int pad1; } LineStyleGeometryModifier_PerlinNoise2D; diff --git a/source/blender/makesrna/intern/rna_linestyle.c b/source/blender/makesrna/intern/rna_linestyle.c index eb3245de2c9..fc12477b1ae 100644 --- a/source/blender/makesrna/intern/rna_linestyle.c +++ b/source/blender/makesrna/intern/rna_linestyle.c @@ -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_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); 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."); @@ -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_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); 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."); |