Commit: be12ccff4a227934b20841a16fab7cd51c3b2551
Author: Antonio Vazquez
Date:   Mon Aug 7 11:04:41 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rBbe12ccff4a227934b20841a16fab7cd51c3b2551

VFX Wave modifier uses PI range

The sinusoidal curve uses a loop between 0 and PI to get better and smooth 
result

===================================================================

M       source/blender/draw/engines/gpencil/gpencil_engine.h
M       source/blender/draw/engines/gpencil/gpencil_vfx.c
M       source/blender/draw/engines/gpencil/shaders/gpencil_wave_frag.glsl
M       source/blender/modifiers/intern/MOD_gpencilwave.c

===================================================================

diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.h 
b/source/blender/draw/engines/gpencil/gpencil_engine.h
index c22b32b447a..99de3296045 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.h
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.h
@@ -54,6 +54,7 @@ typedef struct GPencilVFXWave {
        float amplitude;
        float period;
        float phase;
+       float wsize[2];
 } GPencilVFXWave;
 
  /* used to save gpencil objects */
diff --git a/source/blender/draw/engines/gpencil/gpencil_vfx.c 
b/source/blender/draw/engines/gpencil/gpencil_vfx.c
index b974c5afb2d..276aad85ae4 100644
--- a/source/blender/draw/engines/gpencil/gpencil_vfx.c
+++ b/source/blender/draw/engines/gpencil/gpencil_vfx.c
@@ -94,6 +94,9 @@ static void DRW_gpencil_vfx_wave(ModifierData *md, int 
ob_idx, GPENCIL_e_data *e
        stl->vfx[ob_idx].vfx_wave.phase = mmd->phase;
        stl->vfx[ob_idx].vfx_wave.orientation = mmd->orientation;
 
+       const float *viewport_size = DRW_viewport_size_get();
+       copy_v2_v2(stl->vfx[ob_idx].vfx_wave.wsize, viewport_size);
+
        struct Gwn_Batch *vfxquad = DRW_cache_fullscreen_quad_get();
 
        DRWShadingGroup *vfx_shgrp = 
DRW_shgroup_create(e_data->gpencil_vfx_wave_sh, psl->vfx_pass);
@@ -105,6 +108,7 @@ static void DRW_gpencil_vfx_wave(ModifierData *md, int 
ob_idx, GPENCIL_e_data *e
        DRW_shgroup_uniform_float(vfx_shgrp, "period", 
&stl->vfx[ob_idx].vfx_wave.period, 1);
        DRW_shgroup_uniform_float(vfx_shgrp, "phase", 
&stl->vfx[ob_idx].vfx_wave.phase, 1);
        DRW_shgroup_uniform_int(vfx_shgrp, "orientation", 
&stl->vfx[ob_idx].vfx_wave.orientation, 1);
+       DRW_shgroup_uniform_vec2(vfx_shgrp, "wsize", 
&stl->vfx[ob_idx].vfx_wave.wsize, 1);
 
        /* set first effect sh */
        if (cache->init_vfx_sh == NULL) {
diff --git a/source/blender/draw/engines/gpencil/shaders/gpencil_wave_frag.glsl 
b/source/blender/draw/engines/gpencil/shaders/gpencil_wave_frag.glsl
index 96f95f8194d..635bb027ca2 100644
--- a/source/blender/draw/engines/gpencil/shaders/gpencil_wave_frag.glsl
+++ b/source/blender/draw/engines/gpencil/shaders/gpencil_wave_frag.glsl
@@ -8,6 +8,9 @@ uniform float amplitude;
 uniform float period;
 uniform float phase;
 uniform int orientation;
+uniform vec2 wsize;
+
+#define M_PI 3.1415926535897932384626433832795
 
 #define HORIZONTAL 0
 #define VERTICAL 1
@@ -21,11 +24,13 @@ void main()
 
        float value;
        if (orientation == HORIZONTAL) {
-               value = amplitude * sin((period * uv.x) + phase);
+               float pval = (uv.x * M_PI) / wsize[0];
+               value = amplitude * sin((period * pval) + phase);
                outcolor = texelFetch(strokeColor, ivec2(uv.x, uv.y + value), 
0);
        }
        else {
-               value = amplitude * sin((period * uv.y) + phase);
+               float pval = (uv.y * M_PI) / wsize[1];
+               value = amplitude * sin((period * pval) + phase);
                outcolor = texelFetch(strokeColor, ivec2(uv.x + value, uv.y), 
0);
        }
 
diff --git a/source/blender/modifiers/intern/MOD_gpencilwave.c 
b/source/blender/modifiers/intern/MOD_gpencilwave.c
index 5e712e321bb..902de6c68b2 100644
--- a/source/blender/modifiers/intern/MOD_gpencilwave.c
+++ b/source/blender/modifiers/intern/MOD_gpencilwave.c
@@ -43,9 +43,9 @@
 static void initData(ModifierData *md)
 {
        GpencilWaveModifierData *gpmd = (GpencilWaveModifierData *)md;
-       gpmd->amplitude = 6.0f;
-       gpmd->period = 0.2f;
-       gpmd->phase = 11.0f;
+       gpmd->amplitude = 10.0f;
+       gpmd->period = 20.0f;
+       gpmd->phase = 0.0f;
        gpmd->orientation = 1;
        
        BKE_gpencil_batch_cache_alldirty();

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to