[Bf-blender-cvs] [9975974e58b] temp-gpencil-bezier-stroke-type: GPencil: Offset modifier add randomize to bezier type

Cody Winchester noreply at git.blender.org
Mon May 10 17:10:15 CEST 2021


Commit: 9975974e58b60bd97bcc71708400d6259f4dd2ca
Author: Cody Winchester
Date:   Mon May 10 17:06:57 2021 +0200
Branches: temp-gpencil-bezier-stroke-type
https://developer.blender.org/rB9975974e58b60bd97bcc71708400d6259f4dd2ca

GPencil: Offset modifier add randomize to bezier type

This patch adds the randomize offsets functionality to the bezier stroke type and moves the code to a shared generic function between the 2 stroke types.

Differential Revision: https://developer.blender.org/D11218

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

M	source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c

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

diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c b/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c
index 95156d9072d..827109a8d9e 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c
@@ -103,20 +103,11 @@ static float prepare_matrix(OffsetGpencilModifierData *mmd, float weight, float
   return (scale[0] + scale[1] + scale[2]) / 3.0f;
 }
 
-/* change stroke offsetness */
-static void deformPolyline(GpencilModifierData *md,
-                           Depsgraph *UNUSED(depsgraph),
-                           Object *ob,
-                           bGPDlayer *gpl,
-                           bGPDframe *gpf,
-                           bGPDstroke *gps)
+/* Calculate random transform matrix. */
+static void prepare_random_matrix(
+    GpencilModifierData *md, Object *ob, bGPDframe *gpf, bGPDstroke *gps, float mat_rnd[4][4])
 {
   OffsetGpencilModifierData *mmd = (OffsetGpencilModifierData *)md;
-  const int def_nr = BKE_object_defgroup_name_index(ob, mmd->vgname);
-
-  if (!do_modifier(ob, mmd, gpl, gps)) {
-    return;
-  }
 
   int seed = mmd->seed;
   /* Make sure different modifiers get different seeds. */
@@ -148,14 +139,32 @@ static void deformPolyline(GpencilModifierData *md,
       }
     }
   }
-  /* Calculate Random matrix. */
-  float mat_rnd[4][4];
   float rnd_loc[3], rnd_rot[3];
   float rnd_scale[3] = {1.0f, 1.0f, 1.0f};
   mul_v3_v3v3(rnd_loc, mmd->rnd_offset, rand[0]);
   mul_v3_v3v3(rnd_rot, mmd->rnd_rot, rand[1]);
   madd_v3_v3v3(rnd_scale, mmd->rnd_scale, rand[2]);
   loc_eul_size_to_mat4(mat_rnd, rnd_loc, rnd_rot, rnd_scale);
+}
+
+/* change stroke offsetness */
+static void deformPolyline(GpencilModifierData *md,
+                           Depsgraph *UNUSED(depsgraph),
+                           Object *ob,
+                           bGPDlayer *gpl,
+                           bGPDframe *gpf,
+                           bGPDstroke *gps)
+{
+  OffsetGpencilModifierData *mmd = (OffsetGpencilModifierData *)md;
+  const int def_nr = BKE_object_defgroup_name_index(ob, mmd->vgname);
+
+  if (!do_modifier(ob, mmd, gpl, gps)) {
+    return;
+  }
+
+  /* Calculate Random matrix. */
+  float mat_rnd[4][4];
+  prepare_random_matrix(md, ob, gpf, gps, mat_rnd);
 
   bGPdata *gpd = ob->data;
   for (int i = 0; i < gps->totpoints; i++) {
@@ -186,7 +195,7 @@ static void deformBezier(GpencilModifierData *md,
                          Depsgraph *UNUSED(depsgraph),
                          Object *ob,
                          bGPDlayer *gpl,
-                         bGPDframe *UNUSED(gpf),
+                         bGPDframe *gpf,
                          bGPDstroke *gps)
 {
   OffsetGpencilModifierData *mmd = (OffsetGpencilModifierData *)md;
@@ -196,6 +205,10 @@ static void deformBezier(GpencilModifierData *md,
     return;
   }
 
+  /* Calculate Random matrix. */
+  float mat_rnd[4][4];
+  prepare_random_matrix(md, ob, gpf, gps, mat_rnd);
+
   bGPdata *gpd = ob->data;
   bGPDcurve *gpc = gps->editcurve;
 
@@ -210,6 +223,11 @@ static void deformBezier(GpencilModifierData *md,
     if (weight < 0.0f) {
       continue;
     }
+    /* Apply randomness matrix. */
+    for (int j = 0; j < 3; j++) {
+      mul_m4_v3(mat_rnd, bezt->vec[j]);
+    }
+
     float mat[4][4];
     float unit_scale = prepare_matrix(mmd, weight, mat);
     pt->pressure *= unit_scale;



More information about the Bf-blender-cvs mailing list