Sketchy line style - different line types not giving the same result

Hi there,

Following on my previous post about a definition that makes input curves sketchy. Not really relevant to this post, but I’ve developed it a bit further; the previous version didn’t take the length of the input curve into consideration, which meant that on shorter curves you ended up with a more “scribbly” looking line. Screenshot below you can see that regardless of curve length they are all relatively uniform in appearance.

I now realise that my definition doesn’t work as intended when the input curves include both curvy and straight lines. Result below, showing that the curved line input gives a “dotted” line.

I have a separate definition for curvy lines that fixes the issue, but then doesn’t work for straight lines.

The only difference between the two definitions being this:

I’d like to have one definition that can accommdate both, but unsure how to achieve this. Any ideas?

FYI, anyone is welcome to use this definition in their own work, in fact I am quite keen to see what you come up with. I really enjoy this forum and the opportunities for learning it facilitates.

multiple sketchy lines.gh (16.0 KB)

the reason why the curve appears dotted lies in the preview mode, and the fact that the curve develops along a local PerpFrame axis that is parallel to the world_Z axis instead of the world_Y axis:

with that preview style, imagine like having a plane that trims everything that goes under it:


[perspective view]


[top view]

take a circle “A” and its exact copy “B”
on circle A the “Perlinized” points are input to U (read “local PerpFrame X axis”)
while on circle B they are applied to input V (“local PerpFrame Y axis”)

in order to standardize on which direction the points are moved to generate your curve, I’d suggest to insert an Align Plane component that aligns the perpendicular frames to the Z axis, and always use the input V (of course, here I assume you’ll be always drawing on XY plane and use top view to get your result)

from this:

to this:


a minor thing I think it’s worth notice:

by flattening the L list input of the Jitter component then Unflattening the list of values, you will get a final result where all the Perlin values of all the curves being drawn are completely mixed together

it may sound a bit weird, but imagine each of your initial curves (let’s call them A, B, C, D) are being shattered into “n” small pieces, and then are rebuilt in a random order (which is what Jitter does)

if you flatten the L list input, then you will pick random pieces from the container with ALL jittered pieces of ALL the curves together: you could be rebuilding curve A with pieces of B, C and D, because they are all mixed together into the very same flattened list

if you want to rebuild A with just Perlin pieces that belong to A, and the same for B, C and D… then I would suggest something like the following, where for each curve you have a random Jitter seed (which are supposedly different from each other) and each List is separated from the others

multiple sketchy lines_Re.gh (29.4 KB)

1 Like

Thank you for the response. Aligning the planes, so simple! Gosh, the workaround I had in mind was a lot more convoluted.

I normally design my artworks in 2d (blame my architectural background, using 2d Autocad), so the top down view is generally the only one I care about.

Re flattening of the Jitter component input data comment: The workflow I used takes a set of values, and duplicates the data a number of times corresponding to the number of curve inputs. I couldn’t figure out how to jitter the data per branch - it would just shuffle everything the same way - but the workaround I found: Duplicate the list of values corresponding to the number of input curves, flatten it into one list, shuffle the whole lot, and then group them back into a number of branches corresponding to the number of input curves. Couldn’t identify any issues mixing values from different branches (and given that all values fall within a certain range, theoretically in my mind at least it should be fine to do so), so it didn’t really bother me. But you managed to answer the question I had in my previous post as well - i.e how to shuffle values within each branch - double whammy! I keep forgetting that I can pull multiple random values from one random component.

1 Like