Doodles Wall c[_]

4 Likes

this is not a painting

4 Likes


here is a recent one I did (inspired by this animation)

it was a bit painful to draw the edges for each box. Here is the code: https://gist.github.com/ylegall/40a150bdcb1af53ff723583623320800
let me know if there is an easier way

1 Like

Very nice. Did you somehow increase the edge contrast between colors? How did you layout the strokes and choose the colors?

Nice :slight_smile: Could you shortly describe why it was hard to draw the box edges and how you tried to solve it? I know I can look at the code, but that doesn’t tell how you got there :slight_smile:

Thanks! The edge contrast that you refer to is the impact of specular lighting. I’m creating a normal map of the image and doing bump mapping with a basic 3d lighting shader. The algorithm uses feedback to move pixels around, the colors are from one picture and the movement by another.

@abe, for the box mesh, I used the built-in function boxMesh() from the mesh generators. This part is easy. but to draw the edge strokes, I had to manually enumerate each segment3D:

val leftTopFront = Vector3(-size, -size, -size)
val rightTopFront = Vector3(size, -size, -size)
...
return listOf(
                    Segment3D(leftTopFront, rightTopFront),
                    Segment3D(rightTopFront, rightBottomFront),
                   ...

Then I transform these segments to match the location/rotation/scale of the box:

val tx = transform { ... }
edges[i] = baseSegments.map { it.transform(tx) }

I was hoping there was a simpler way of specifying an edge “stroke” when rendering a mesh. For example, in processing/p5js this seems to be built-in:
https://editor.p5js.org/ylegall/sketches/6fqgaJcwP

2 Likes

So far it has some constraints but no goals yet.

3 Likes

Recent obsession - spirals

6 Likes

@axel beautiful pieces, would you mind elaborating on the process please?

creative coding doesn’t need to be all coding #2

4 Likes

@ricardo - sure, though it is not too deep actually: first step was to define a spiral object, given starting point, angle of starting arc, distance to center and ‘steepness’ of the logarithmic spiral. With that in hand, starting from one spiral I pick some starting point in the outer arm of the spiral as start for the next spiral, space permitting. Iteration then basically randomly (I had tried to be clever in finding space, but in the end random seemed good enough). Depending on how much variation is allowed for size and steepness in the new spirals, very different patterns emerge (these are basically represented in the upper two plots in the previous post).
Then I tried to allow also (small) spirals in the inner parts of existing spirals - eg as seen in the last white one (of the previous post). While aiming to that I first forgot to check spacing with the parent spirals - allowing only overlaps between direct parent and child. Actually I think that was a lucky mistake, as I like the generated black version (previous post) very much :slight_smile:
There are always so many things to try - eg here still 2 more: first where ‘steepness’ depends on place to generate a gradient effect, second to create kind of a ‘metaspiral’ pattern by varying the size of spirals based on another larger spiral pattern.

7 Likes

Here is a current work in progress:

  1. create a shape contour from an orthographic projection of a cube.
  2. starting from positions along that contour, trace paths using polar simlpex noise (2D curl noise)

edit: looping video:

7 Likes

Testing the splitting of ShapeContours with a ShapeContour (using straight segments, no actual curves).
split3

The gray circles show the first point of each resulting contour.

3 Likes

More contour splitting

4 Likes

3D circle pack:

4 Likes

I was playing a bit with big shaded particles moving according to Brownian motion calculated with compute shaders and taking some gravity into account. If particles are small, I can actually animate hundreds of thousands of them in real time on my integrated intel GPU. Nice.

2 Likes

the shading looks great!

expanding spiral mesh with a texture:

3 Likes


process:
  1. create random points using poisson disc sampling.
  2. for efficiency, index these points in a kd-tree or similar data structure.
  3. start from some point and find the shortest path to every other point (e.g. using Dijkstra’s algorith).
  4. render smoothed contours of each path.
7 Likes

tweet

5 Likes